KV系統對比表
對比維度 |
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行左右 |
注:redis、redis cluster、medis如果沒有特殊說明,核心指標相同。