1. 程式人生 > >TDengine能比Hadoop快10倍?

TDengine能比Hadoop快10倍?

之前對國產的時序大資料儲存引擎 TDengine 感興趣,因為[號稱比Hadoop快十倍](https://zhuanlan.zhihu.com/p/157716807),一直很好奇怎麼實現的,所以最近抽空看了下[白皮書](https://www.taosdata.com/downloads/TDengine%20White%20Paper.pdf)和[設計文件](https://www.taosdata.com/cn/blog/?categories=3)。 如果用一句話總結,就是 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寫的整體架構設計思路](https://mp.weixin.qq.com/s/6wKz11z5r5YsJeKBekorzQ) 留一個小問題,既然 TDegnine 是為時序資料庫而生,那它是否可以用來代替 Prometheus 呢? ## 歡迎關注我的微信公眾賬號,會在第一時間更新,部落格園上只有部分文章會發布 ![code](http://img2.tbcdn.cn/L1/461/1/5a0eff69de17d58383b72c9a78b3c28cd7