如何從0開始瞭解一個數據引擎
根據本人淺薄的經驗,瞭解一個數據引擎可能涉及以下問題:
目錄
1. 概念
先粗略看看是否適合自己的需求,從官網/社群/技術部落格,初步瞭解這個KV適合哪些場景,最佳實踐,不適合哪些場景(不一定完善,不完善的自己進行測試不要人云亦云)。不適合的場景也跑一跑,看看到什麼程度(資料大小到什麼級別,請求量到什麼級別會有比較大的效能拐點)看看效能到底什麼樣?
2. 架構
都有哪些節點,每個節點負責什麼功能,通過什麼協議進行互動的
3. 部署
部署起來跑一跑:使用一下api看看基本的相應時間和支援的操作
4. 元資料
元資料管理,元資料資訊分發,客戶端是否有快取?
5. 寫資料鏈路
flush?,資料副本是同步傳送還是非同步傳送,序列還是廣播?、一致性,故障時候如何保證不丟失資料,故障到什麼程度會阻止寫入/讀取?
6. 查詢鏈路
資料只能從一個程序查詢還是從多個服務程序查詢?是否可以寫在一個節點,讀在另外的節點?
階段總結
給出一句話的總結:適合什麼場景,不適合什麼場景。
總結就是總結,不要給長篇大論看半天 還不知道到底是否適合自己的需求
一些經常被關心的功能和特點
7. 舊資料清理
TTL,後臺檔案合併:HBase的compaction,Opentsdb的compaction,druid的檔案合併
8. 資料的hash
資料按什麼策略分到不同的程序中的?HBase可以做預分割槽。Es是根據分片策略進行分發
9. 離線檔案匯入匯出
是否有工具是否支援跨叢集
10. 故障恢復時間
故障恢復時間決定了這個服務大部分適合對接線上需求還是更適合離線場景
11. 對比其他DB
和其他在應用方面類似的系統/DB進行對比:
* 資料型別支援哪些不支援哪些
* 支援哪幾種api操作
* 資料匯入匯出是否有工具支援
* 擴容如何進行對使用者是否有影響
* 底層支援的儲存的資料量
* 一條資料最優大小
* 一次操作最優資料Size
* TTL:表級別?列級別? cell級別?
* 事務支援級別
* 其他獨有特性:HBase支援動態列,二級索引