postgresql 查詢序列_時間序列數據庫(TSDB)初識與選擇

作者:碼哥字節 如需轉載聯系我的公眾號

背景

這兩年互聯網行業掀著一股新風,總是聽著各種高大上的新名詞。大數據、人工智能、物聯網、機器學習、商業智能、智能預警啊等等。

以前的系統,做數據可視化,信息管理,流程控制。現在業務已經不僅僅滿足于這種簡單的管理和控制了。數據可視化分析,大數據信息挖掘,統計預測,建模仿真,智能控制成了各種業務的追求。

“所有一切如淚水般消失在時間之中,時間正在死去“,以前我們利用互聯網解決現實的問題。現在我們已經不滿足于現實,數據將連接成時間序列,可以往前可以觀其歷史,揭示其規律性,往后可以把握其趨勢性,預測其走勢。

于是,我們開始存儲大量時間相關的數據(如日志,用戶行為等),并總結出這些數據的結構特點和常見使用場景,不斷改進和優化,創造了一種新型的數據庫分類——時間序列數據庫(Time Series Database).

時間序列模型

時間序列數據庫主要用于指處理帶時間標簽(按照時間的順序變化,即時間序列化)的數據,帶時間標簽的數據也稱為時間序列數據。

每個時序點結構如下:

  • timestamp: 數據點的時間,表示數據發生的時間。
  • metric: 指標名,當前數據的標識,有些系統中也稱為name。
  • value: 值,數據的數值,一般為double類型,如cpu使用率,訪問量等數值,有些系統一個數據點只能有一個value,多個value就是多條時間序列。有些系統可以有多個value值,用不同的key表示
  • tag: 附屬屬性。

4b3108526d24e38bdf92e276d66a27f6.png

實現

比如我想記錄一系列傳感器的時間序列數據。數據結構如下:

* 標識符:device_id,時間戳
* 元數據:location_id,dev_type,firmware_version,customer_id
* 設備指標:cpu_1m_avg,free_mem,used_mem,net_rssi,net_loss,電池
* 傳感器指標:溫度,濕度,壓力,CO,NO2,PM10

如果使用傳統RDBMS存儲,建一張如下結構的表即可:

d5d66657e88228ac1270fd1be7015ee8.png

如此便是一個最簡單的時間序列庫了。但這只是滿足了數據模型的需要。我們還需要在性能,高效存儲,高可用,分布式和易用性上做更多的事情。

大家可以思考思考,如果讓你自己來實現一個時間序列數據庫,你會怎么設計,你會考慮哪些性能上的優化,又如何做到高可用,怎樣做到簡單易用。

Timescale

這個數據庫其實就是一個基于傳統關系型數據庫postgresql改造的時間序列數據庫。了解postgresql的同學都知道,postgresql是一個強大的,開源的,可擴展性特別強的一個數據庫系統。

于是timescale.inc開發了Timescale,一款兼容sql的時序數據庫, 底層存儲架構在postgresql上。 作為一個postgresql的擴展提供服務。其特點如下:

基礎:

  • PostgreSQL原生支持的所有SQL,包含完整SQL接口(包括輔助索引,非時間聚合,子查詢,JOIN,窗口函數)
  • 用PostgreSQL的客戶端或工具,可以直接應用到該數據庫,不需要更改。
  • 時間為導向的特性,API功能和相應的優化。
  • 可靠的數據存儲。

擴展:

  • 透明時間/空間分區,用于放大(單個節點)和擴展
  • 高數據寫入速率(包括批量提交,內存中索引,事務支持,數據備份支持)
  • 單個節點上的大小合適的塊(二維數據分區),以確保即使在大數據量時即可快速讀取。
  • 塊之間和服務器之間的并行操作

劣勢:

  • 因為TimescaleDB沒有使用列存技術,它對時序數據的壓縮效果不太好,壓縮比最高在4X左右
  • 目前暫時不完全支持分布式的擴展(正在開發相關功能),所以會對服務器單機性能要求較高

其實大家都可以去深入了解一下這個數據庫。對RDBMS我們都很熟悉,了解這個可以讓我們對RDBMS有更深入的了解,了解其實現機制,存儲機制。在對時間序列的特殊化處理之中,我們又可以學到時間序列數據的特點,并學習到如何針對時間序列模型去優化RDBMS。

之后我們也可以寫一篇文章來深入的了解一下這個數據庫的特點和實現。

Influxdb

Influxdb是業界比較流行的一個時間序列數據庫,特別是在IOT和監控領域十分常見。其使用go語言開發,突出特點是性能。

特性:

  • 高效的時間序列數據寫入性能。自定義TSM引擎,快速數據寫入和高效數據壓縮。
  • 無額外存儲依賴。
  • 簡單,高性能的HTTP查詢和寫入API。
  • 以插件方式支持許多不同協議的數據攝入,如:graphite,collectd,和openTSDB
  • SQL-like查詢語言,簡化查詢和聚合操作。
  • 索引Tags,支持快速有效的查詢時間序列。
  • 保留策略有效去除過期數據。
  • 連續查詢自動計算聚合數據,使頻繁查詢更有效。

Influxdb已經將分布式版本轉為閉源。所以在分布式集群這塊是一個弱點,需要自己實現。

OpenTSDB

The Scalable Time Series Database. 打開OpenTSDB官網,第一眼看到的就是這句話。其將Scalable作為其重要的特點。OpenTSDB運行在Hadoop和HBase上,其充分利用HBase的特性。通過獨立的Time Series Demon(TSD)提供服務,所以它可以通過增減服務節點來輕松擴縮容。

ace98944569f95d3ac872164d8108aa8.png
  • Opentsdb是一個基于Hbase的時間序列數據庫(新版也支持Cassandra)。
    其基于Hbase的分布式列存儲特性實現了數據高可用,高性能寫的特性。受限于Hbase,存儲空間較大,壓縮不足。依賴整套HBase, ZooKeeper
  • 采用無模式的tagset數據結構(sys.cpu.user 1436333416 23 host=web01 user=10001)
    結構簡單,多value查詢不友好
  • HTTP-DSL查詢

OpenTSDB在HBase上針對TSDB的表設計和RowKey設計是值得我們深入學習的一個特點。有興趣的同學可以找一些詳細的資料學習學習。

Druid

Druid是一個實時在線分析系統(LOAP)。其架構融合了實時在線數據分析,全文檢索系統和時間序列系統的特點,使其可以滿足不同使用場景的數據存儲需求。

  • 采用列式存儲:支持高效掃描和聚合,易于壓縮數據。
  • 可伸縮的分布式系統:Druid自身實現可伸縮,可容錯的分布式集群架構。部署簡單。
  • 強大的并行能力:Druid各集群節點可以并行地提供查詢服務。
  • 實時和批量數據攝入:Druid可以實時攝入數據,如通過Kafka。也可以批量攝入數據,如通過Hadoop導入數據。
  • 自恢復,自平衡,易于運維:Druid自身架構即實現了容錯和高可用。不同的服務節點可以根據響應需求添加或減少節點。
  • 容錯架構,保證數據不丟失:Druid數據可以保留多副本。另外可以采用HDFS作為深度存儲,來保證數據不丟失。
  • 索引:Druid對String列實現反向編碼和Bitmap索引,所以支持高效的filter和groupby。
  • 基于時間分區:Druid對原始數據基于時間做分區存儲,所以Druid對基于時間的范圍查詢將更高效。
  • 自動預聚合:Druid支持在數據攝入期就對數據進行預聚合處理。

Druid架構蠻復雜的。其按功能將整個系統細分為多種服務,query、data、master不同職責的系統獨立部署,對外提供統一的存儲和查詢服務。其以分布式集群服務的方式提供了一個底層數據存儲的服務。

810f3b12dbdcf5fa80452bbf4b2139ff.png

Druid在架構上的設計很值得我們學習。如果你不僅僅對時間序列存儲感興趣,對分布式集群架構也有興趣,不妨看看Druid的架構。另外Druid在segment(Druid的數據存儲結構)的設計也是一大亮點,既實現了列式存儲,又實現了反向索引。

Elasticsearch

Elasticsearch 是一個分布式的開源搜索和分析引擎,適用于所有類型的數據,包括文本、數字、地理空間、結構化和非結構化數據。Elasticsearch 在 Apache Lucene 的基礎上開發而成,由 Elasticsearch N.V.(即現在的 Elastic)于 2010 年首次發布。Elasticsearch 以其簡單的 REST 風格 API、分布式特性、速度和可擴展性而聞名。

Elasticsearch以ELK stack被人所熟知。許多公司基于ELK搭建日志分析系統和實時搜索系統。之前我們在ELK的基礎上開始開發metric監控系統。即想到了使用Elasticsearch來存儲時間序列數據庫。對Elasticserach的mapping做相應的優化,使其更適合存儲時間序列數據模型,收獲了不錯的效果,完全滿足了業務的需求。后期發現Elasticsearch新版本竟然也開始發布Metrics組件和APM組件,并大量的推廣其全文檢索外,對時間序列的存儲能力。真是和我們當時的想法不謀而合。

Elasticsearch的時序優化可以參考一下這篇文章:《elasticsearch-as-a-time-series-data-store》

也可以去了解一下Elasticsearch的Metric組件:Elastic Metrics

Beringei

Beringei是Facebook在2017年最新開源的一個高性能內存時序數據存儲引擎。其具有快速讀寫和高壓縮比等特性。

2015年Facebook發表了一篇論文《Gorilla: A Fast, Scalable, In-Memory Time Series Database 》,Beringei正是基于此想法實現的一個時間序列數據庫。

Beringei使用Delta-of-Delta算法存儲數據,使用XOR編碼壓縮數值。使其可以用很少的內存即可存儲下大量的數據。

如何選擇一個適合自己的時間序列數據庫

  • Data model
    時間序列數據模型一般有兩種,一種無schema,具有多tag的模型,還有一種name、timestamp、value型。前者適合多值模式,對復雜業務模型更適合。后者更適合單維數據模型。
  • Query language
    目前大部分TSDB都支持基于HTTP的SQL-like查詢。
  • Reliability
    可用性主要體現在系統的穩定高可用上,以及數據的高可用存儲上。一個優秀的系統,應該有一個優雅而高可用的架構設計。簡約而穩定。
  • Performance
    性能是我們必須考慮的因素。當我們開始考慮更細分領域的數據存儲時,除了數據模型的需求之外,很大的原因都是通用的數據庫系統在性能上無法滿足我們的需求。大部分時間序列庫傾向寫多讀少場景,用戶需要平衡自身的需求。下面會有一份各庫的性能對比,大家可以做一個參考。
  • Ecosystem
    我一直認為生態是我們選擇一個開源組件必須認真考慮的問題。一個生態優秀的系統,使用的人多了,未被發現的坑也將少了。另外在使用中遇到問題,求助于社區,往往可以得到一些比較好的解決方案。另外好的生態,其周邊邊界系統將十分成熟,這讓我們在對接其他系統時會有更多成熟的方案。
  • Operational management
    易于運維,易于操作。
  • Company and support
    一個系統其背后的支持公司也是比較重要的。背后有一個強大的公司或組織,這在項目可用性保證和后期維護更新上都會有較大的體驗。

性能對比

TimescaleInfluxDBOpenTSDBDruidElasticsearchBeringeiwrite(single node)15K/sec470k/sec32k/sec25k/sec30k/sec10m/secwrite(5 node)128k/sec100k/sec120k/sec

總結

可以按照以下需求自行選擇合適的存儲:

  • 小而精,性能高,數據量較小(億級): InfluxDB
  • 簡單,數據量不大(千萬級),有聯合查詢、關系型數據庫基礎:timescales
  • 數據量較大,大數據服務基礎,分布式集群需求: opentsdb、KairosDB
  • 分布式集群需求,olap實時在線分析,資源較充足:druid
  • 性能極致追求,數據冷熱差異大:Beringei
  • 兼顧檢索加載,分布式聚合計算: elsaticsearch
  • 如果你兼具索引和時間序列的需求。那么Druid和Elasticsearch是最好的選擇。其性能都不差,同時滿足檢索和時間序列的特性,并且都是高可用容錯架構。

最后

之后我們可以來深入了解一兩個TSDB,比如Influxdb,OpenTSDB,Druid,Elasticsearch等。并可以基于此學習一下行存儲與列存儲的不同,LSM的實現原理,數值數據的壓縮,MMap提升讀寫性能的知識等。

鏈接:

十分鐘了解Apache Druid

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532184.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532184.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532184.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發html,HTML開發基礎

常用標簽1、各種符號2、p和br3、a標簽4、H標簽5、select6、input:checkbox7、input:radio8、input:password9、input:button10、input:file11、textarea12、label13、ul or dl14、table15、fieldset16、form17、divHTML代碼演示html>頁面一這是div塊級標簽,占一行…

concurrenthashmap實現原理_Mybatis:PageHelper分頁插件源碼及原理剖析

PageHelper是一款好用的開源免費的Mybatis第三方物理分頁插件,其實我并不想加上好用兩個字,但是為了表揚插件作者開源免費的崇高精神,我毫不猶豫的加上了好用一詞作為贊美。原本以為分頁插件,應該是很簡單的,然而PageH…

計算機網絡dst,計算機網絡基礎課程—Socket接口

什么是TCP/IP------本課程的主要部分TCP/IP如何工作-----TCP/IP軟件結構與實現如何用TCP/IP-------TCP/IP應用程序編程接口前面說過,TCP/IP標準并不指定應用程序與TCP/IP協議軟件的接口,但并不是說沒有提供任何指導,首先,它指定了…

python輸入圓的半徑公式_[圖文]鐵路曲線正矢的計算公式

一、圓曲線正矢的計算1.1 圓曲線正矢的計算公式取圓曲線上兩點拉一直線,叫做弦。弦上任意點至曲線上的垂直距離叫矢或叫矢距。在弦中央點的矢距叫正矢(下圖)。AB一弦;AC、CB一半弦;CD一正矢;EF一矢距正矢計算公式為其中: f-正矢 C-弦長 R-半徑 式中單位均為m。公式用文字表示即…

2021高考成績查詢抖音,2021抖音很火的高考唯美的文案20個

1、用孜孜不倦去追求,拼搏的精神來鉆研,讓知識澆灌心田,用激情去迎接困難,用青春寫意一片贊嘆,祝愿大學生活充實飽滿,學富五車,才高八斗,開創美麗的明天。2、如食糖蜜心里甜&#xf…

docker 安裝nacos_康過來!Nacos配置和管理微服務的使用

Nacos 具有如下特性:服務發現和服務健康監測:支持基于DNS和基于RPC的服務發現,支持對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求;動態配置服務:動態配置服務可以讓您以中心化、外部化和動態化的方式管…

HTML5中volume樣式自定義,html5中關于volume屬性的使用詳解

Audio對象屬性: volume 描述:設置或返回音頻的音量,取值范圍(0——1)下面是我做的音樂播放器如何調節音頻音量的代碼://增加切換音量事件(function(){var height $("#myAudio ul.control li.volume .alert-box .volume-wrap…

matlab中如何調用gpu進行并行計算_極致安卓-Termux/Aid learning開啟WebGL手機GPU并行計算...

在我的之前的測評中,我利用Termux和Aid Learning測試過基于C/C的openmp并行程序,基于Java的并行程序,還有基于MPI以及基于Java的分布式集群并行。但是很遺憾,一直無法成功開發基于OpenCL的GPU并行編程。這是主要是因為Android并沒…

python默認編碼方式_關于設置python默認編碼方式的問題

2019-8-27 07:45:36 本帖最后由 傻紙 于 2019-8-27 10:02 編輯 查了一會資料得出的結論是如果你用的是python3.x,那么就最好別去設置sys.defaultencoding或者sys.stdout.encoding 記住在需要編碼的時候用encode,解碼的時候decode就可以了。。。 這個問題…

計算機科學與技術是屬于什么學科,計算機科學與技術專業屬于什么大類 屬于哪個學科...

近日,有很多人咨詢小編計算機科學與技術專業屬于什么大類 屬于哪個學科?現在小編統一回復一下大家計算機科學與技術專業屬于工學類,下面是關于計算機科學與技術專業詳細的介紹。1計算機科學與技術專業門類及學科介紹專業名稱專業代碼門類學科…

matlab imread_MATLAB圖像處理:29:在幾何變換輸出中指定填充值

本示例說明如何指定imwarp執行幾何變換時使用的填充值。執行轉換時,輸出圖像中通常會有一些像素不屬于原始輸入圖像。必須為這些像素分配一些值,稱為填充值。默認情況下,imwarp將這些像素設置為零,并顯示為黑色。使用FillValues參…

小學生學計算機,學計算機對小學生的好處

內容提要:隨著計算機應用的日益社會化和家庭化,計算機在人們工作、學習和生活等各個方面正發揮著越來越重要的作用,而計算機應用基礎也相應成為現代社會人們必修的文化基礎課。現在的小學生將是未來的創新型人才,他們的計算機水平如何,直接關…

micopython 18b20_MicroPython控制8*8LED點陣顯示溫度

MicroPython顧名思義就是可以在單片機上跑的Python,借助Micro Python,用戶完全可以通過Python腳本語言實現硬件底層的訪問和控制,比如說控制LED燈泡、LCD顯示器、讀取電壓、控制電機、訪問SD卡等。目前支持MicroPython的開發板有好幾種&#…

計算機組裝維護文獻,組裝計算機論文,關于《計算機組裝維護》課程教學相關參考文獻資料-免費論文范文...

導讀:此文是一篇組裝計算機論文范文,為你的畢業論文寫作提供有價值的參考。【摘 要】計算機硬件知識的教與學對于計算機相關專業的學生來說,重要性是不言而喻的.由于教學資源缺乏,面對這門以操作性強為特點的課程,如何利用學校有限的條件培養出符合職業資格標準的學生是該專業教…

ip變更會影響賬號登陸嗎_【教程】PUBG賬號被盜導致封禁申訴解封教程

很多朋友詢問PUBG在被盜號后被盜號者開掛導致永封該如何申訴解封,現在結合一些玩家被盜號及成功申訴的經歷,詳列一下步驟。本方法只適用于被盜后開掛導致封禁的賬號,那些自己開掛被封的孤兒不用往下看了。一.先向steam客服申訴 找回自己的ste…

html5專著,參考文獻專著

參考文獻類型:專著[M],會議論文集[C],報紙文章[N],期刊文章[J], 學位論文[D], 報告[R], 標準[S], 專利[P],論文集中的析出文獻[A]關于你又知道多少呢?下面是小編為大家整…

濾鏡怎么調_手機、電腦怎么剪輯視頻?真心求推薦實用工具

自從加入了短視頻自媒體運營這個行業以后,我就開始接觸到各種各樣的手機、電腦視頻剪輯、制作軟件,用它們來處理、完成被安排到的工作任務。很多時候,我也用它們來剪視頻,借此來練練手、積累下素材。記得剛進入這個行業的時候&…

2021計算機基礎知識題庫,2021~2021計算機基礎知識練習題

2021~2021計算機基礎知識練習題 2021~2021計算機基礎知識練習題 北京聯合大學 2021~2021計算機基礎知識練習題 一、選擇題 1.記錄在存儲介質上的一組相關信息的集合稱為______。 A)程序 B)磁盤 C)軟件 D)文件 2.當一個文件更名后,文件的內容會______。 A)完全消失 B…

計算機背板知識,你知道背板的選購技巧嗎?

原標題:你知道背板的選購技巧嗎?背板就是母板,子板插在上面構成系統,計算機背板說成背板也成立,只不過背板更多的知識線路板而已,沒有實際的器件,只起信號通路作用。背板在設備機箱的后面。一般…