認(rèn)識(shí)時(shí)序數(shù)據(jù)庫

在很多場(chǎng)景下,數(shù)據(jù)并不是孤立的存在。例如股票價(jià)格的走勢(shì),一天之內(nèi)溫度的變化等。一組相關(guān)數(shù)據(jù)以時(shí)間為坐標(biāo)串聯(lián)起來,形成一條連續(xù)的變化線,這就是時(shí)序數(shù)據(jù)。時(shí)序數(shù)據(jù)可以直觀地反映變化的規(guī)律性,也可以方便地用來識(shí)別和預(yù)測(cè)異常情形。

而時(shí)序數(shù)據(jù)庫,就是專門用來存儲(chǔ)時(shí)序數(shù)據(jù)的一類特殊數(shù)據(jù)庫。

北京市一天之內(nèi)的溫度走勢(shì),圖片截取自 www.weather.com.cn

相比于傳統(tǒng)的 RDBMS 或者 NoSQL,時(shí)序數(shù)據(jù)庫有下列鮮明的特征。

時(shí)序數(shù)據(jù)沒有復(fù)雜的結(jié)構(gòu)和關(guān)聯(lián)。時(shí)序數(shù)據(jù)關(guān)注的是被測(cè)指標(biāo)在時(shí)間維度上的變化規(guī)律,它并不需要復(fù)雜的嵌套的數(shù)據(jù)結(jié)構(gòu):時(shí)間戳連同數(shù)據(jù)值就構(gòu)成了一個(gè)數(shù)據(jù)點(diǎn)。另外,時(shí)序數(shù)據(jù)也不關(guān)心不同的被測(cè)指標(biāo)之間的關(guān)系(這種關(guān)系在定義良好的可視化圖表上一目了然),數(shù)據(jù)之間不需要任何諸如外鍵等關(guān)聯(lián)關(guān)系。

正是因?yàn)闆]有復(fù)雜的結(jié)構(gòu)和關(guān)聯(lián),時(shí)序數(shù)據(jù)庫不需要提供范式和事務(wù)支持。時(shí)序數(shù)據(jù)庫面向的是與傳統(tǒng)數(shù)據(jù)庫截然不同的業(yè)務(wù)領(lǐng)域,范式和事務(wù)在其中是不必要的。不過,時(shí)序數(shù)據(jù)庫存在其他的限制和約束。

時(shí)序數(shù)據(jù)庫的實(shí)時(shí)寫入量通常很大。時(shí)序數(shù)據(jù)需要采集的數(shù)據(jù)量與數(shù)據(jù)源的數(shù)量以及采樣的時(shí)間精度成正比。在某些業(yè)務(wù)場(chǎng)景下,一秒鐘需要采集上萬甚至更多個(gè)數(shù)據(jù)點(diǎn)。

時(shí)序數(shù)據(jù)的結(jié)構(gòu)

時(shí)序數(shù)據(jù)有著簡(jiǎn)單的結(jié)構(gòu)。

被測(cè)量的指標(biāo)一般稱作 metric。指標(biāo)的一個(gè)孤立數(shù)據(jù)點(diǎn)表示為以指標(biāo)名為索引的鍵值對(duì):

metric -> (timestamp, value)

依時(shí)間順序逐次采集若干數(shù)據(jù)點(diǎn),我們就得到了該被測(cè)量指標(biāo)的一系列值:

metric -> (t0, v0), (t1, v1), (t2, v2), ...

這就是時(shí)序數(shù)據(jù)的基本結(jié)構(gòu),一般來說采樣的時(shí)間間隔是恒定的(記作 $\Delta t$,允許存在誤差)。作為示例,下面是一組溫度的時(shí)序數(shù)據(jù)。

temperature -> (1502433662000, 29.3), (1502433672002, 29.7), (1502433681999, 29.6), ...

僅僅依靠指標(biāo)名稱來索引數(shù)據(jù)略嫌簡(jiǎn)陋,有時(shí)候希望能對(duì)數(shù)據(jù)作出進(jìn)一步的區(qū)分。為了達(dá)到這一目的,我們給指標(biāo)添加一個(gè)或者多個(gè)標(biāo)簽(labels)。例如,為了區(qū)分不同城市的溫度,我們引入一個(gè)叫做 city 的標(biāo)簽。

temperature{city=beijing} -> ...
temperature{city=nanjing} -> ...
temperature{city=tianjin} -> ...

指標(biāo)的名稱可以看作是一個(gè)叫作 name 的特殊標(biāo)簽,這樣,數(shù)據(jù)的索引就一般化為了一組標(biāo)簽的集合。

{name=temperature, city=beijing} -> ...
{name=temperature, city=nanjing} -> ...
{name=temperature, city=tianjin} -> ...

時(shí)序數(shù)據(jù)庫的讀寫特點(diǎn)

寫入操作的特點(diǎn):

  • 由于數(shù)據(jù)量龐大,存儲(chǔ)時(shí)需要引入某種壓縮方案。Facebook 在其闡述 Gorilla 數(shù)據(jù)庫的論文中介紹了一種非常適合時(shí)序數(shù)據(jù)庫的壓縮方案。
  • 同樣由于數(shù)據(jù)量龐大,存儲(chǔ)時(shí)應(yīng)當(dāng)使用適當(dāng)?shù)牧舸娌呗裕≧etention Policy),定期刪除數(shù)據(jù)。一般采用三級(jí)存儲(chǔ)方案:最上層的內(nèi)存用做緩存,存儲(chǔ)熱點(diǎn)數(shù)據(jù);下一層的 SSD 用來存儲(chǔ)留存期(一般為數(shù)周或數(shù)月)之內(nèi)的數(shù)據(jù);此外還有一個(gè)數(shù)據(jù)中心用來保留全部數(shù)據(jù)。
  • 寫入操作遠(yuǎn)多于讀取操作,可能占到 99% 以上。絕大部分?jǐn)?shù)據(jù)不會(huì)被用到。
  • 數(shù)據(jù)總是追加式地寫入(順序?qū)懭耄?/li>
  • 數(shù)據(jù)寫入之后,就不會(huì)再被更新(無隨機(jī)更新)。
  • 超出留存期的數(shù)據(jù)被整塊刪除(無隨機(jī)刪除)。

讀取操作的特點(diǎn):

  • 時(shí)序數(shù)據(jù)存在顯著的時(shí)間敏感性,越是近期的數(shù)據(jù)越重要。大部分讀取操作所請(qǐng)求的數(shù)據(jù)集中在最近一天或幾天。
  • 對(duì)時(shí)序數(shù)據(jù)的分析過程中需要進(jìn)行大量運(yùn)算(求和、計(jì)算變化率等),時(shí)序數(shù)據(jù)庫需要高效地支持這些運(yùn)算。

參考

你可以從以下兩篇文章中找到更多關(guān)于時(shí)序數(shù)據(jù)庫的討論:

另外,市面上已經(jīng)有了很多時(shí)序數(shù)據(jù)庫,下面兩個(gè)列表提供了相關(guān)方面的內(nèi)容:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容