[转帖]KV数据库调研

kv,数据库,调研 · 浏览次数 : 0

小编点评

**比较流行的KV系统** | 系统 | 数据结构 | 数据组织 | 底层引擎 | |---|---|---|---| | Redisl | Hash | key space | RocksDB | | Tairl | Hash | key space | LevelDB | | Zeppelin | Hash | Key-Value | RocksDB | | TiKV | Rust | Key-Value | RocksDB | | Annal | RocksDB | Key-Value | RocksDB | | GMKV | C++ | Key-Value | RocksDB | | Masstreel | C++ | Key-Value | RocksDB | | Redis2.8 | RocksDB | Key-Value | RocksDB | | TiKV+proxy | Go | Key-Value | RocksDB | | DCachel | Go | Key-Value | RocksDB | | AerospikeAerospike | Go | Key-Value | RocksDB | | SequoiaDB | SQL | Collection-Document | RocksDB |

正文

https://zhuanlan.zhihu.com/p/499313638

 

Redis作为NoSQL领域的代表,拥有很高的读写性能,支持比较丰富的数据类型,但是Redis也存在一些缺陷。

  • l 内存数据库,容量有限,成本很高
  • l 主从复制模型,存在数据丢失的风险
  • l 自身备份代价很大
  • l 集群模式存在很多的限制
  • l Redis支持事务,但是并不完全满足ACID

业务要求的KV存储需要满足以下条件:

  • l 兼容Redis通信协议
  • l 分布式持久化存储(数据不能丢失)
  • l 单个存储节点的宕机,不影响整个系统的正常运转(或者可以基于备份自动恢复)
  • l 集群扩容方便,对用户透明
  • l 相对于Redis,性能损失(延迟,吞吐量 ...等)要在可接受范围内
  • l 对于监控、命名空间 ... 提供更好的支持

下面根据网络上的资料,简单整理一下目前比较流行的KV系统

Redis

  • l 内存数据库,容量有限,成本较高
  • l 主从复制模型,不能保证数据强一致
  • l 数据持久化代价很大,对性能影响很大
  • l 有官方和非官方的分布式方案,其中官方集群版本很少听说大规模生产使用
  • l Redis支持事务,但是不满足ACID

HBASE

  • l 支持单行事务
  • l 依赖HDFS,ZK部署运维复杂
  • l 读写延迟比较大
  • l 需要自己实现兼容Redis协议的proxy
  • l 支持数据强一致
  • l 不支持Key级别的TTL

Cassandra

  • l Dynamo的开源实现
  • l 支持最终一致性(AP系统)
  • l 分片规则是hash,对scan不友好
  • l CQL查询语言
  • l 无中心化设计,部署简单
  • l 需要自己实现Redis协议的proxy
  • l Java语言开发
  • l 资料不多

Tair

  • l 客户端支持不够友好,业务需要改造,对开发语言有要求
  • l 不能保证数据强一致性
  • l 支持多种存储引擎

Zeppelin

  • l 360开源的分布式KV存储数据库
  • l 数据采用key space 划分partition,大分片策略
  • l 支持有限的API:Set,Get,Delete
  • l 支持TTL
  • l 支持HashTag,以及HashTag的batch提交原子性
  • l 元数据保证强一致性,数据采用主从复制
  • l 开源关注度很低(star 359),未见社区应用案例

Pika

  • l 单机版的兼容Redis协议的持久化存储引擎
  • l 没有集群方案

SSDB

  • l 底层存储引擎采用leveldb单机引擎,实现zset、map、queue数据结构
  • l 基于master-slave复制、
  • l 全量复制和flush操作速度慢
  • l 本身无集群化方案,类似于redis2.8
  • l 主从复制效率低,全局锁竞争严重
  • l 数据结构的一些操作效率低,很多操作基于遍历
  • l c++实现

LedisDB

  • l Golang实现
  • l 底层引擎采用可替换引擎,leveldb、rocksdb、goleveldb等,实现kv、list、set、zset、hash等数据结构
  • l 采用leveldb或rocksdb会存在cgo性能损失
  • l 基于master-slave复制
  • l 采用类似codis的集群化方案xcodis
  • l 未经线上多规模验证

SwapDB

  • l 深度定制的redis和优化过的ssdb整合
  • l 京东金融开源
  • l 高度兼容redis api
  • l 冷热数据分离,热数据在redis,冷数据存储到ssdb
  • l 可以实现原生的redis cluster集群
  • l 无数据可靠性保证,定位还是缓存
  • l 开源后没看到社区应用案例

Tidis

  • l golang实现
  • l 目前状态为demo实现,还处于功能开发阶段,仅供测试
  • l 实现采用分布式key value引擎TiKV, 可以对比FoundationDB
  • l Tidis类似TiDB层,无状态
  • l 采用存储计算分离架构
  • l 无限水平扩展
  • l 自动数据均衡
  • l Raft副本复制,确保数据不丢
  • l TiKV采用rust语言,底层引擎为rocksdb
  • l 支持分布式事务
  • l 事务采用乐观锁,事务提交冲突可配重试次数
  • l 事务是完全的2PC分布式事务,因为采用TSO时钟,性能较差,延迟比较高

Anna

  • l 伯克利开源的号称最快的KV存储引擎,性能是Redis的10倍
  • l 充分利用了多核架构,尽量避免线程切换,绑定CPU
  • l 针对热点数据有非常好的优化
  • l 没有经过生产检验,偏学术

Masstree

  • l 单机KV系统
  • l 字典树+Btree的组合数据结构
  • l 充分利用CPU cache line
  • l 没有经过生产检验,存在不少的bug,偏学术研究

GMKV

  • l 资料很少,TiKV+proxy,支持Redis协议
  • l 类似Tidis,未开源

DCache

  • l 腾讯开源的分布式缓存
  • l 支持持久化,cache和磁盘的一致性对用户透明
  • l API简单,支持简单的KV接口
  • l 部署比较复杂,组件比较多,运维成本高,依赖ETCD,TARS中间件以及持久化数据库

Aerospike

Aerospike是一个高性能、可扩展、可靠性强的NoSQL解决方案,支持RAM和SSD作为存储介质,并专门针对SSD特殊优化,广泛应用于实时竞价等实时计算领域。官方保证99%的操作在1ms内完成,并提供集群数据自动Rebalance、集群感知客户端等功能,且支持超大规模数据集(100T级别)的存储。

  • l 跟Redis比较亲和,支持String,Hash,Set,ZSet
  • l 支持分布式集群,可以自动负载均衡
  • l 磁盘存储,绕过文件系统,读写性能很高
  • | 限制比较多,比如一个namespace下的set数量,set中的成员数量。
  • | 只支持行级事务,不支持分布式事务
  • | 查询支持限制比较多

ArangoDB

  • | 支持Multi-Model :KV、Document、Graph、AQL
  • | 数据组织形式:database → collection → document
  • | 底层引擎支持MMFiles和RocksDB,前者是mmap实现锁粒度比较粗。
  • | 支持的索引:Primary、Edge、Hash、Skiplist、Persistent、Geo、Fulltext (文档中的_id、_key、_from、_to字段建立索引)
  • | 支持完整的ACID和snapshot isolation。

SequoiaDB

  • | 支持Multi-Model:支持SQL、API、Json、对象存储
  • | BSON作为记录的存储结构
  • | 数据逻辑组织形式:collection space → collection → doc (bson)
  • | 数据物理组织形式:file (data / index) → extent → page (存放doc)
  • | 引擎级复制,支持灾备
  • | 支持多租户

与[转帖]KV数据库调研相似的内容:

[转帖]KV数据库调研

https://zhuanlan.zhihu.com/p/499313638 Redis作为NoSQL领域的代表,拥有很高的读写性能,支持比较丰富的数据类型,但是Redis也存在一些缺陷。 l 内存数据库,容量有限,成本很高 l 主从复制模型,存在数据丢失的风险 l 自身备份代价很大 l 集群模式存

[转帖]三篇文章了解 TiDB 技术内幕 - 谈调度

返回全部 申砾产品技术解读2017-06-06 为什么要进行调度 先回忆一下 三篇文章了解 TiDB 技术内幕 - 说存储 提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数据以 Region 为单位进行复制和管理,每个 Region 会有多个 Replica(副本),这

[转帖]抛砖系列之redis监控命令

处理一下.. 前言 redis是一款非常流行的kv数据库,以高性能著称,其高吞吐、低延迟等特性让广大开发者趋之若鹜,每每看到别人发出的redis故障报告都让我产生一种居安思危,以史为鉴的危机感,恰逢今年十一西安烟雨不断,抽时间学习了几个redis监控命令,和大家分享一波。 redis-cli --s

[转帖]Redis 可以禁用的高危命令

https://cloud.tencent.com/developer/article/2064127 高危命令禁用 redis一款高并发的内存K-V数据库,提供了好多命令,但是其中有部分对于生产环境来说比较危险,需要禁用掉。 keys 命令 keys 命令执行的时候是需要进行全库扫描的,因为red

[转帖]Redis--COW(Copy On Write)

文章系转载,便于整理和归纳,原文地址:https://zhuanlan.zhihu.com/p/339437815 摘要 问题概述: 1、RDB的过程中是否会停止对外提供服务? 2、RDB的过程中数据修改了,备份的是修改前的还是修改后的? 3、RDB时是不是先把内容中的所有KV复制一份,保证数据不会

[转帖]002、体系结构之TiDB Server

TiDB Server 1、TiDB总览1.1、TiDB Server架构1.2、TiDB Server 主要功能: 2、SQL语句处理语句的解析和编译SQL层协议层上下文解析层逻辑优化器物理优化器本地执行器分布式执行器 3、如何将表的数据转成kv形式4、在线DDL相关模块5、GC机制与相关模块6、

[转帖]突破 etcd 限制!字节自研 K8s 存储 KubeBrain

https://my.oschina.net/u/5632822/blog/5596911 KubeBrain 是字节跳动针对 Kubernetes 元信息存储的使用需求,基于分布式 KV 存储引擎设计并实现的、可以取代 etcd 的元信息存储系统,目前支撑着线上超过 20,000 节点的超大规模

[转帖]关系模型到 Key-Value 模型的映射

https://cn.pingcap.com/blog/tidb-internal-2 在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句。 假设我们有这样一个表的定义: CREATE TABLE

[转帖]TiKV 缩容不掉如何解决?

https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tikv TiKV节点缩容不掉,通常遇到的情况: 1、经常遇到的情况是:3个节点的tikv集群缩容肯定会一直卡着,因为没有新节点接受要下线kv的region peer。 2、另外就是除缩

[转帖]TiKV 缩容不掉如何解决?

TiKV节点缩容不掉,通常遇到的情况: 1、经常遇到的情况是:3个节点的tikv集群缩容肯定会一直卡着,因为没有新节点接受要下线kv的region peer。 2、另外就是除缩容tikv外,剩下的KV硬盘使用情况比较高,到达schedule.high-space-ratio=0.6的限制,导致该ti