列族的重点是什么?

Nol*_*rin 11 nosql

我已经看到像RocksDB这样的 NoSQL 数据库系统提供了一个叫做column family的特性。我相信我明白这个概念指的是什么,但使用它们的实际(实际)好处是什么?我认为它们至少可以在某些情况下提高查找性能,或者键值整体的空间局部性?然而,据我所知,它似乎不会影响数据库访问的实际语义。这样对吗?有什么我想念的吗?

Nol*_*rin 7

我刚刚从RocksDB FAQ 中发现了一些有趣的信息。(RocksDB 是一个 KV 存储。)

以下是一些相关的摘录。

问:列族有什么用?

A:使用列族最常见的原因:(1)在数据的不同部分使用不同的compaction setting、comparator、compression type、merge operators或compaction filter;(2) drop一个列族来删除它的数据;(3) 一个列族存储元数据,另一个列族存储数据。

Q:多列族和多rocksdb数据库有什么区别?

答:主要区别在于备份、原子写入和写入性能。使用多个数据库的优点:数据库是备份或检查点的单位。将数据库复制到另一台主机比列族更容易。使用多个列族的优点: (1) 写批处理在一个数据库上跨多个列族是原子的。您无法使用多个 RocksDB 数据库来实现这一点。(2) 如果您向 WAL 发出同步写入,过多的数据库可能会损害性能。

问:我有不同的键位。我应该用前缀分隔它们,还是使用不同的列族?

答:如果每个键空间都相当大,最好将它们放在不同的列族中。如果可以小,那么就应该考虑将多个键空间打包成一个列族,避免维护太多列族的麻烦。