rocksdb列簇主要用来做什么

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

列簇就相当于部分列的组合,将一张表中的不同的列的存储隔离开来,不同的列拥有不同的存储目录。可以了解下hbase 这个结构跟rocksdb很像资料更多一点

列簇相当于RocksDB的逻辑分区,它们共享WAL,但可用来存放不同的数据。在TiDB里面存数据的RocksDB包含Default CF、Write CF、Lock CF和Raft CF这四个CF,其中前三个CF分别与percolator事务模型中的data列、write列和lock列对应,即用来存放percolator事务模型中不同列的数据,Raft CF用来存放当前TiKV实例中各个Region的元信息

不支持手工创建CF吗?

理论上可以通过RocksDB的CreateColumnFamily方法手动创建CF,但是TiDB事务模型只会用到它在kvdb中创建的上述4个CF

Hi,

TiKV 只使用了 RocksDB 中的 write、default、lock、raft 四个 ColumnFamily,前三个用于分别对应 Percolator 算法中的三个 column。详细可以参见 https://tikv.org/deep-dive/distributed-transaction/percolator/

在写入和读取过程中,write、default、lock 这三个 Column Family 实际上都需要涉及到。

rocksdb是一个单机版的kv数据库,列族可以像hbase那样随便建。每个列族单独占用memtable\immutable memtable、flush和compact也是分开的。
不同的列族共享wal,目的是实现rocksdb的多列族原子写。

tikv用单机版的rocksdb封装成了分布式的kv,固定创建了4个列族。

也就是说除了固定创建了4个列簇外,自己建表时可以创建指定列簇?

如果是tidb那么rocksdb只是tidb的一个存储组件,列簇都是定义好的,自己定义不了列簇,如果你是直接使用rocksdb 你可以自己去按需定义

了解了,列簇只是对于rocksdb而言的

列簇只是为了让相同格式的key-value放一起,方便存储和管理

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