请问RocksDB支持ACID事务吗

看了一篇帖子(https://blog.csdn.net/blissnmx/article/details/131124329)上面说 RocksDB不支持 不支持事务:RocksDB不支持ACID事务,但是我看TIDB文档上又说TIDB支持ACID事务,TIDB存储引擎不就是RocksDB吗,那RocksDB到底是支持事务还是不支持呀,有点懵,mysql是 InnoDB,Key-Value相比与InnoDB有什么优势和劣势吗,为什么TIDB没有选择 InnoDB呢

RocksDB 本身不直接支持传统 ACID 事务, 在TiDB中,通过额外的事务管理层来实现 ACID 事务的支持。
RocksDB 被选择作为 TiDB 的存储引擎,主要是因为 RocksDB 具有出色的性能和可扩展性,并且适合与分布式架构配合使用。

2 个赞

通过额外的事务管理层来实现 ACID 事务的支持,这点有文档解释吗请问

RocksDB实例:
存储用户数 据以及 MVCC 信息(通常被称为 kvdb)。kvdb 中有四个 ColumnFamily:raft、lock、default 和 write:

  • raft 列:用于存储各个 Region 的元信息。仅占极少量空间,用 户可以不必关注。
  • lock 列:用于存储悲观事务的悲观锁以及分布式事务的一阶段 Prewrite 锁。当用户的事务提交之后,lock cf 中对应的数据会很快删除掉,因此大部分情况下 lock cf 中的数据也很少(少于 1GB)。如果 lock cf 中的数据大量增加,说明有大量事务等待提交,系统出现了 bug 或者故障。
  • write 列:用于存储用户真实的写入数据以及 MVCC 信息(该数 据所属事务的开始时间以及提交时间)。当用户写入了一行数据 时,如果该行数据长度小于 255 字节,那么会被存储 write 列 中,否则的话该行数据会被存入到 default 列中。由于 TiDB 的 非 unique 索引存储的 value 为空,unique 索引存储的 value 为主键索引,因此二级索引只会占用 writecf 的空间。
  • default 列:用于存储超过 255 字节长度的数据

image
rocksdb不支持事务,但是tikv是支持事务的,tikv是一个高度分层的架构,在rockesdb上构建了raft层、mvcc层、transaction层。

2 个赞

RocksDB只负担了tidb数据的存储方式,tidb整个集群实现事物

不支持ACID事务

不支持

因为要做分布式,就要选一个适合分布式的存储结构,显然mysql 的innodb不适合做分布式存储,因为数据都是按单机存储的,根本没法拆分。但是LSM tree这种架构是key value模型的,每个数据都可以拆分,那就好办了。分布式就是要好拆分,这是我的理解。

1 个赞

mysql 的innodb也能做,比如腾讯的tdsql,自动分库分表

TDSQL没有测试过,但我理解它用innodb做分布式存储的数据库,是不是自带了一个分库分表的中间件?

是这样的,有个前置网关做分库分表

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。