• 时间序列数据库概览——基于文件(RRD)、K/V数据库(influxDB)、关系型数据库


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

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

    [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

  • 相关阅读:
    ZOJ 2671 Cryptography(线段树+求区间矩阵乘积)
    HDU 4662 MU Puzzle(找规律)
    Codeforces 392 C Unfair Poll(模拟)
    UVA 11134 Fabled Rooks(传说中的车)(贪心)
    UVA 11212 Editing a Book(IDA*算法+状态空间搜索)
    用户的昵称【哈希】
    【洛谷P2375】动物园【KMP】
    【洛谷P2375】动物园【KMP】
    【洛谷P2375】动物园【KMP】
    【洛谷P1886】滑动窗口【单调队列】
  • 原文地址:https://www.cnblogs.com/bonelee/p/6432562.html
Copyright © 2020-2023  润新知