時間序列數據庫概覽——基於文件(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM