TiKV中的底层存储引擎是什么

在翻看TiDB的官方文档时,了解到TiKV的底层引擎存储是RocksDB(“RocksDB 作为 TiKV 的核心存储引擎,用于存储 Raft 日志以及用户数据。每个 TiKV 实例中有两个 RocksDB 实例,一个用于存储 Raft 日志(通常被称为 raftdb),另一个用于存储用户数据以及 MVCC 信息(通常被称为 kvdb)”)。但在后续的学习中了解到了TiKV还有其他的存储引擎,比如说raft-engine。那到底TiKV的默认存储引擎到底是什么呢?有人可以回答一下吗?谢谢

TiKV确实主要依赖RocksDB作为其核心存储引擎,用于存储Raft日志和用户数据。正如您所引用的TiDB官方文档描述,每个TiKV实例包含两个RocksDB实例——raftdb和kvdb,分别用于存储Raft日志和用户数据及MVCC信息。

至于raft-engine,它是TiKV引入的一个新的存储引擎,旨在优化Raft日志的存储。raft-engine的设计目标是减少写放大并提高性能,特别是针对Raft日志这部分。它通过将Raft日志存储在一个单独的、更高效的存储介质上,从而减轻了RocksDB的负担,提高了整体系统的写入性能。

尽管raft-engine提供了性能上的优势,但它并不是用来完全替代RocksDB的,至少在目前的版本中不是。RocksDB仍然是TiKV的主要存储引擎,用于存储用户数据和MVCC信息,而raft-engine则是专门用于优化Raft日志存储的部分。因此,可以说TiKV的默认存储引擎是RocksDB,而raft-engine是一个补充性的存储组件,用于提升特定部分的性能。

RocksDB

默认存储是RocksDB,RocksDB 是持久化存储引擎,用来存储单节点的持久化数据。
Raft 是一种分布式一致性算法,用于在 TiDB 集群中保证数据副本的一致性和可靠性。

TiKV的默认存储引擎确实是RocksDB。正如您在TiDB官方文档中所了解到的,TiKV使用RocksDB作为其核心存储引擎,用于存储Raft日志和用户数据。每个TiKV实例包含两个RocksDB实例:一个用于存储Raft日志(称为raftdb),另一个用于存储用户数据和MVCC信息(称为kvdb)。

然而,为了提高性能和优化存储空间,TiKV引入了raft-engine作为新的存储引擎,专门用于存储Raft日志。raft-engine设计用来替代原有的RocksDB存储Raft日志的部分,以此来减少写放大和提高写入性能。从TiKV的某个版本开始(具体版本号可能需要查看TiKV的更新日志或官方文档),raft-engine被引入作为一个可选的存储引擎,用于存储Raft log。

尽管raft-engine被引入,但它并不是立即取代了RocksDB作为默认存储引擎。在TiKV的某些版本中,raft-engine是作为一个实验性的特性存在的,需要在启动TiKV时通过配置选项显式启用。因此,如果您没有特别指定使用raft-engine,TiKV将继续使用RocksDB作为默认的存储引擎。

rocksdb

谢谢您的答复,您的意思是说现在默认还是用两个RocksDB实例来分别存储raft日志和用户数据吗?因为我之前用tiup搭建部署了一个tidb集群,在数据目录tidb-data内,我发现tikv他有两个目录,一个是db存储sst文件,一个是raft-engine,存储raftLog格式的数据。我搭建的版本为v7.5.0,所以我觉得有点奇怪。数据目录结构为:

好的,谢谢

好的,谢谢!

好的,我了解了

这里文档和视频课都有点旧了,默认用 raft-engine有段时间了

好的谢谢

默认存储是RocksDB,RocksDB raft存raft日志,RocksDB KV 存键值对,是持久化存储引擎
Raft 是一种分布式一致性算法,复制数据到Follower节点,用于在 TiDB 集群中保证数据副本的一致性和可靠性。

RocksDB 可以看看101课程~

TiKV是用rocksdb,tiflush是用列存,存在内存之中。