對比維度
|
Redis |
Redis Cluster |
Medis |
Hbase |
Tair |
訪問模式 |
支援Value大小 |
理論上不超過1GB(建議不超過1MB) |
理論上可配置(預設配置10M,這個可以調大) |
256M(更大value還需要測試) |
支援Value結構 |
byte[]/list/map/set |
支援分列族儲存,在列族(column Family)下支援多quantifier(quantifier支援即時增刪,不需要在schema中預定義) |
(1)kv/map/list (2)支援big_list(list無長度限制) (3)支援建立schema,cmd query |
支援的總資料量 |
|
1000+instance |
按業務劃分group叢集,單個group不超過100GB |
scale out(業界已經有單機群幾百台伺服器的叢集規模應用案例) |
scale out,理論上總資料量無限制 |
適宜的讀寫比 |
存記憶體型,均適合 |
支援讀寫混合的業務模型(讀、寫應用不同的Cache,可配置適用各種比例的讀寫業務) |
支援多引擎,適宜各種比例的讀寫。讀多寫少(mdb+leveldb),讀少寫多(leveldb)。 |
資料是否可改寫 |
Y |
Y |
支援 |
是否支援Scan/Range Query |
|
不支援,並且不支援merge operations |
Scan目前不支援(即將支援),Range Query不支援 |
支援按Key維度Scan |
支援scan 支援range query |
CAP |
|
CP |
僅CA(有方案可擴充為CP) |
CP |
使用者可配置,CP或AP |
語言支援 |
主流語言 |
主流語言,目前java、ruby可用 |
僅Java(有其它語言支援方案) |
原生為Java介面。支援restful介面,支援通過thrift Server方式間接支援其他多用語言(如C,golang等) |
php,restful,java,c/c++ |
訪問效能 |
點寫latency |
虛機上平均1~2ms |
平均5ms以下(寫操作直接刷cache和追加持久化HLOG即可) |
5~8ms(write through),1ms左右(write back) |
點寫吞吐率 |
一個instance 5w,單機器整體效能根據cpu來決定 |
|
虛機上單個redis節點5~10w qps,group的吞吐可通過多節點來擴充。受限網卡頻寬瓶頸 |
預計單節點可達20K/s(key + value = 1k) |
受限網卡頻寬瓶頸(100MB),單機純記憶體8w~10w qps(key+value=1k) |
批量寫吞吐率 |
受限網卡頻寬瓶頸 |
可在hbase叢集外直接將未經處理資料轉換為HFile(hbase底層隱藏檔),直接以檔案介面copy到hbase叢集即可(理論上受限於網路頻寬) |
受限網卡頻寬瓶頸(100MB),單機純記憶體8w ~10w batch/s(batch=10keys,key+value=100,batch_size=1k) |
讀latency |
虛機上平均1~2ms |
目前Java client的平均latency在5ms左右。(理論上負載過高時,latency會有所增加) |
同機房記憶體1ms,磁碟5-8ms(延遲不會隨單機資料容量增加而增加) |
可營運性 |
可擴充性(自動擴容、線上擴容) |
|
支援水平擴充 |
支援線上擴容(暫不支援擴容時資料移轉),支援線上資料移轉 |
支援線上平滑擴容。 |
在不停讀和寫的服務下自動擴容 |
可用性(是否有單點、資料移轉/單機出錯時是否會有服務中斷、過載保護、慢查詢保護) |
使用keepalived或者官方哨兵來保持高可用 |
無單點 |
無單點 資料移轉/單機出錯時自動容錯移轉 無過載保護(僅限制單用戶端到redis的串連數500) 無慢查詢保護 |
目前的叢集hmaster為單點服務(提供進程級恢複機制)。後續部署多hmaster方案。 單個RegionServer異常時,region服務被遷移到其他Server上時,該Server上的資料短時不可訪問。 無慢查詢保護 |
(1)無單點 (2)不中斷服務 (3)有過載保護 (4)無慢查詢保護,但有慢查詢遞迴樹監控 |
可靠性(如何防止資料丟失,包括機器斷電、硬碟損毀等情形下) |
0~N個資料slave備份(實際使用方式基本是0個備份) |
資料持久化在底層HDFS中,預設配置為三備份。 |
(1)多機資料冗餘 (2)斷電資料不丟失,重放redo log (3)資料完整性crc校正(防止磁碟損壞) |
對業務混合部署的支援(效能隔離) |
進程級隔離(特殊處理可以到機器間隔離) |
叢集級隔離 |
硬軟隔離: (1)支援不同group的業務混步 (2)支援同一個group業務混步(通過名字空間隔離),支援網路和記憶體的隔離。 |
對存取權限的可控制性 |
web操作系統管理員授權 api操作支援鑒權和非鑒權兩種模式 |
提供機器接入的安全認證; 提供業務表層級的許可權認證機制(如讀、寫、管理營運等)。 |
機器粒度的白名單管理 |
實現語言、代碼量 |
JAVA,java用戶端14000行、管理中心22000行 |
Java。 client,30K 整個工程(包括client和測試案例等)500k |
核心代碼c++,10w行左右 |