首頁 - 關于我們 - 新聞活動 - 物(wù)聯網場(chǎng)景中,我們如何選擇時(shí)序數據庫 ?

物(wù)聯網場(chǎng)景中,我們如何選擇時(shí)序數據庫 ?

2022-11-10新聞

如今時(shí)序數據的(de)應用(yòng)場(chǎng)景十分(fēn)廣泛,許多(duō)類型的(de)數據都是時(shí)間序列數據:
  • 金融市場(chǎng)交易
  • 傳感器測量(水(shuǐ)冷(lěng)、高(gāo)溫、地震...)
  • 服務器監控(CPU、内存、磁盤...)
  • 資源消耗(能源、電力...)
  • 人(rén)體健康(心率、血氧濃度...)
  • 網絡訪問
通(tōng)過保留數據固有的(de)時(shí)間序列性質,我們可(kě)以記錄下(xià)事物(wù)是如何随時(shí)間變化(huà)的(de)事實,正因如此,這(zhè)一反應真實的(de)客觀屬性使得(de)時(shí)序數據在特定的(de)場(chǎng)景中充滿了(le)商業價值:通(tōng)過分(fēn)析時(shí)序數據,決策者可(kě)以了(le)解到生産和(hé)業務中的(de)細微變化(huà),從而對(duì)資源優化(huà)跟蹤預測商業智能等方面進行優化(huà)。

在時(shí)序數據庫成爲熱(rè)點之前,時(shí)序數據通(tōng)常使用(yòng) MySQL 或 PostgreSQL 等關系數據庫進行處理(lǐ)。但自2010年以來(lái),随著(zhe)互聯網和(hé)通(tōng)信技術的(de)發展,網絡中産生的(de)時(shí)間序列數據量有了(le)爆炸式的(de)增長(cháng),傳統的(de)數據庫已經無法處理(lǐ)這(zhè)種萬億級的(de)海量數據。不僅如此,現代業務對(duì)數據價值挖掘的(de)需求已不僅僅停留在簡單計算(suàn)和(hé)繪制圖表的(de)層面上,而是需要更多(duō)精細、複雜(zá)的(de)計算(suàn)分(fēn)析。

如何以一種高(gāo)性能的(de)方式記錄、查詢和(hé)分(fēn)析如此大(dà)規模的(de)數據,成爲了(le)一個(gè)難題。時(shí)序數據庫(time-series database)應運而生。以對(duì)數據價值嗅覺最敏感的(de)金融領域爲例,早在20年前,華爾街(jiē)就已經開始使用(yòng)時(shí)序數據庫對(duì)股票(piào)交易數據進行實時(shí)的(de)計算(suàn)分(fēn)析。

那麽,時(shí)序數據庫與“普通(tōng)”數據庫在技術上有哪些區(qū)别呢(ne)

我們假定“普通(tōng)”數據庫是 MySQL、Oracle 之類的(de) OLTP (Online Transaction Processing) 事務型數據庫


01.


首先,大(dà)部分(fēn)時(shí)序數據庫的(de)查詢場(chǎng)景可(kě)以認爲是 OLAP(Online Analytical Processing )分(fēn)析型數據庫場(chǎng)景。具體地說,時(shí)序數據庫的(de)讀取負載主要可(kě)以分(fēn)爲兩種,一種是對(duì)指定時(shí)間序列在指定時(shí)間段内數據的(de)查詢,如查詢某個(gè)設備或某支股票(piào)最新一小時(shí)的(de)數據等;另一種是對(duì)大(dà)量數據進行統計分(fēn)析,如分(fēn)析某支股票(piào)、甚至是所有股票(piào)在過去一周内的(de)平均價格。這(zhè)兩種場(chǎng)景都算(suàn)是典型的(de) OLAP 的(de)讀取場(chǎng)景。因此,時(shí)序數據庫具有大(dà)部分(fēn) OLAP 數據庫的(de)特點,如列存會對(duì)數據做(zuò)壓縮支持複雜(zá)的(de)查詢語句等等。


02.


其次,從寫入負載來(lái)分(fēn)析,時(shí)序數據庫的(de)場(chǎng)景有大(dà)量數據的(de)實時(shí)寫入,而非單行數據的(de)寫入與修改。由于時(shí)序數據庫的(de)寫入負載通(tōng)常很高(gāo),如每秒幾百萬甚至幾千萬條數據,所以時(shí)序數據庫的(de)存儲引擎往往是基于對(duì)大(dà)量寫入更加友好的(de) LSM Tree(Log Structured Merge Tree),而非對(duì)主鍵點查詢、主鍵範圍查詢以及單行修改與更新更友好的(de) B+ 樹。開發高(gāo)效的(de)時(shí)序數據庫存儲引擎,需要紮實的(de)操作系統、數據庫系統、分(fēn)布式系統、體系結構、數據結構與算(suàn)法等計算(suàn)機基礎。


03.


第三,時(shí)序數據庫需要支持很多(duō)時(shí)序場(chǎng)景特有的(de)分(fēn)析語句與函數。一些常見的(de)語句與函數有:降采樣、插值、滑動平均、時(shí)間滑動平均、累積和(hé)、window join、context by、pivot by 等等。要高(gāo)效地(往往是向量化(huà)地)支持這(zhè)些查詢語句并不是一件非常容易的(de)事情。

04.


第四,流數據的(de)處理(lǐ)。對(duì)時(shí)序數據的(de)離線分(fēn)析屬于批處理(lǐ)的(de)範疇,而還(hái)有許多(duō)時(shí)序數據場(chǎng)景則可(kě)以抽象成另外一個(gè)我們稱之爲流數據的(de)計算(suàn)場(chǎng)景:有數據不停地産生,且需要低延時(shí)地對(duì)這(zhè)些數據做(zuò)即時(shí)的(de)響應與計算(suàn)。在時(shí)序領域,對(duì)于流數據的(de)處理(lǐ),以往的(de)做(zuò)法往往是使用(yòng) flink 等單獨的(de)流數據處理(lǐ)平台,這(zhè)當然也(yě)能夠解決問題,但會導緻至少兩個(gè)問題,第一是需要維護時(shí)序數據庫與 flink 這(zhè)兩套系統,使得(de)運維成本大(dà)大(dà)提升;第二個(gè)問題則可(kě)能更加緻命,那就是流數據的(de)處理(lǐ)是否能夠與批數據處理(lǐ)一緻,而如果産生不一緻,則可(kě)能會對(duì)業務場(chǎng)景帶來(lái)毀滅性的(de)影(yǐng)響(熟悉機器學習(xí)的(de)同學應該知道機器學習(xí)的(de)訓練場(chǎng)景、測試場(chǎng)景與服務場(chǎng)景必須達到高(gāo)度的(de)一緻)。如果時(shí)序數據庫能夠推出針對(duì)時(shí)序場(chǎng)景的(de)特殊流數據處理(lǐ)子系統,并且能夠達到“流批一體”,就可(kě)以保證批數據與流數據處理(lǐ)的(de)結果完全一緻。

數據庫的(de)性能往往很大(dà)程度上由存儲引擎決定如何針對(duì)不同的(de)應用(yòng)場(chǎng)景設計高(gāo)性能的(de)存儲引擎一直是數據庫開發的(de)難題。而在時(shí)序數據庫的(de)場(chǎng)景下(xià),究竟該怎麽設計一個(gè)存儲引擎,至今仍是一個(gè)沒有标準答(dá)案的(de)開放性問題。

長(cháng)按關注

新浪微博

視頻(pín)号

官網



分(fēn)享、在看與點贊

隻要你點我都喜歡