TDengine能比Hadoop快10倍?


之前對國產的時序大數據存儲引擎 TDengine 感興趣,因為號稱比Hadoop快十倍,一直很好奇怎么實現的,所以最近抽空看了下白皮書設計文檔

如果用一句話總結,就是 TDengine 是為特定的工業物聯網領域而生,為時序數據做了針對性的優化也有一些限制,所以能比 Hadoop 快。而 Hadoop 運用於工業物聯網的時序數據的場景下,也是有點不合時宜。因為它是為了Map Reduce而生,想解決的是一次寫入、多次讀取,需要高數據吞吐的場景。

要想理解一個產品的設計,首先要理解它所面對的場景,比如TDengine面對的是工業物聯網。

工業物聯網大數據的特點

工業物聯網中,采集的數據都是傳感器等采集設備匯報的數值型數據,比如溫度、電流、電壓,經緯度等。這些數據有如下特點:

  1. 數據高度結構化,數據Schema是實現能確定的。不像互聯網,存儲的是圖片、語音、視頻等非結構化數據。
  2. 數據極少有更新或刪除操作。采集的目的是記錄,后續會進行分析。這個跟互聯網公司的系統監控數據類似,不會有更新老數據或者刪除某一條數據的場景。
  3. 無需傳統數據庫的事務處理。不需要保證幾個操作要么完成,要么失敗,比如需要從A轉賬給B。
  4. 寫多讀少,寫入數據都帶時間戳。反之寫少讀多的場景類似 Hadoop/GFS。GFS論文里提到了,一份爬蟲拉取的TB級別的網頁數據,會被很多業務線消費。
  5. 寫入流量平穩。根據設備數量和采集頻次,可以預測。比如有100個設備,每30s采集一次數據,那寫入最高是3000次每秒。不會像互聯網的To C 流量,會受營銷的影響。
  6. 用戶關注的是一段時間的趨勢,而不是某一特定時間點的值。用戶會在時序數據上進行一些聚合運算,比如求最近10分鍾內某個速度傳感器上的平均速度。
  7. 數據使用特點是最近的數據最常使用。比如展示最近的10條數據,或者最近的10分鍾里的最大值。
  8. 數據的查詢分析一定是基於時間段和空間區域;因為產生的數據都是時序數據。
  9. 產生的數據量很大。比如有1萬台設備,每個設備每30s上傳一次數據,那一天產生2800萬條數據。

TDengine 的設計取舍

關系型數據庫模型

上文說了采集的數據都是結構化數據,為了降低上手門檻,采用傳統的關系型數據庫模型管理數據。用戶先創建庫、表,然后才能插入或查詢數據。它底層采用結構化存儲,而不需要像 NoSQL這類Schemeless的key-value存儲。

一個數據采集點一張表

比如是智能電表采集數據,那有多少設備,就需要建多少張表。所以每個表只有一個寫入者,好處是:

  1. 一張表的寫入操作不會並發,不需要加鎖。
  2. 寫入者寫入的數據是時序且單調增加的,所以可以使用追加方式寫入內存,相當於順序寫入,效率自然高。類似 GFS 論文里提到的,這樣就不需要HDD硬盤做隨機尋址然后寫入的操作了。
  3. 一個表(一個采集點)的數據在硬盤上以固定大小的塊為單位連續存儲。所以按時間戳讀取的速度會非常快,讀取都是順序讀取,對計算機緩存友好。

寫入高效,原因:

  1. 每個采集點獨占表,所以無並發寫入,所以不需要加鎖
  2. 跟 Kafka 類似,先寫入內存,再定期寫入硬盤

讀取高效,原因:

  1. 數據分塊存儲,讀取最多兩次磁盤就能拿到指定時間段數據
  2. 都是順序讀取磁盤

總的來說,TDengine是通過vnode以及時間兩個維度,對大數據進行切分,便於並行高效的管理,實現水平擴展。

TDengine CEO寫的整體架構設計思路

留一個小問題,既然 TDegnine 是為時序數據庫而生,那它是否可以用來代替 Prometheus 呢?

歡迎關注我的微信公眾賬號,會在第一時間更新,博客園上只有部分文章會發布

code


免責聲明!

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



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