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如果没有特殊说明,核心指标相同。