一般人们谈论时间序列数据库的时候指代的就是这一类存储。按照底层技术不同可以划分为三类。

另外一类数据库其表结构是:

[timestamp] [d1] [d2] .. [dn] [v1] [v2] .. [vn]

其优化的查询方式不限于查询原始数据,而是可以组合查询条件并且做聚合计算,比如:

SELECT d2, sum(v1) / sum(v2) FROM metric WHERE d1 =
“A” AND timestamp >= B AND timestamp < C GROUP BY d2

我们希望时间序列数据库不仅仅可以提供原始数据的查询,而且要支持对原始数据的聚合能力。这种聚合可以是在入库阶段完成的,所谓物化视图。也可以是在查询阶段完成,所谓实时聚合。根据实际情况,可以在这两种方式中进行取舍。

想要在在查询阶段做数据的聚合和转换,需要能够支持以下三点。

  • 用索引检索出行号:能够从上亿条数据中快速过滤出几百万的数据。
  • 从主存储按行号加载:能够快速加载这过滤出的几百万条数据到内存里。
  • 分布式计算:能够把这些数据按照GROUP BY 和 SELECT 的要求计算出最终的结果集。

要想尽可能快的完成整个查询过程,需要在三个环节上都有绝招。传统上说,这三个步骤是三个不同的技术领域。

  • 检索:这是搜索引擎最擅长的领域。代表产品是Lucene。其核心技术是基于高效率数据结构和算法的倒排索引。
  • 加载:这是分析型数据库最擅长的领域。代表产品是C-storeMonetdb。其核心技术是按列组织的磁盘存储结构。
  • 分布式计算:这是大数据计算引擎最擅长的领域。代表产品是Hadoopspark。其核心技术是sharding 和 map/reduce等等。

前面提到的时间序列库(比如opentsdb)有不少从功能上来说是没有问题。它们都支持过滤,也支持过滤之后的聚合计算。在数据量小的时候勉强是可用的。但是如果要实时从十亿条里取百万记录出来,再做聚合运算,对于这样的数据量可能就勉为其难了。满足海量数据实时聚合要求的数据库不多,比较常见的有这么几种:

摘自:http://www.infoq.com/cn/articles/database-timestamp-01

最新文章

  1. 使用cocoaPods和遇到的问题以及解决办法
  2. CLion注册码算法逆向分析实录
  3. Rstudio安装
  4. SQL 面试题(一)
  5. Js 处理将时间转换 “年-月-日”
  6. 如何添加网站for Linux(绑定域名)
  7. Helpers\Cookie
  8. 解决Eclipse下第三方库无法导航源代码
  9. 201521123009 《Java程序设计》第7周学习总结
  10. python学习——读取染色体长度(五:从命令行输入染色体长度)
  11. 结对开发项目--石家庄地铁web版
  12. Mysql学习笔记整理手册
  13. Program type already present: android.support.v4.widget.EdgeEffectCompat
  14. Pandas重塑和轴向旋转
  15. .NetCore源码阅读笔记系列之Security (四) Authentication &amp; AddJwtBearer
  16. BZOJ1330 : Editing a Book
  17. shlve 模块
  18. PCM转MP3工具的封装
  19. bat 批处理脚本定时执行命令
  20. day 84 Vue学习四之过滤器、钩子函数、路由、全家桶等

热门文章

  1. android Gallery2 onPause时候,其背景界面显示黑色
  2. 分享一套C++入门基础视频
  3. storm笔记:Storm+Kafka简单应用
  4. (十)jQuery对表单、表格的操作
  5. 事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
  6. dm8148 videoM3 link源代码解析
  7. 高阶函数:map()/reduce()
  8. 【Java】 Spring依赖注入小试牛刀:编写第一个Spring ApplicationContext Demo
  9. linux下网卡绑定
  10. 下面哪个进制能表述 13*16=244是正确的?)[中国台湾某计算机硬件公司V2010年5月面试题]