列族的意义是什么?


9

我已经看到像RocksDB这样的NoSQL数据库系统提供了称为列族的功能。我相信我理解该概念所指的含义,但是使用它们的实际(实用)好处是什么?我认为它们至少可以改善某些情况下的查询性能,或者至少可以改善键值整体的空间局部性?据我了解,这似乎并不会影响数据库访问的实际语义。它是否正确?有什么我想念的吗?

Answers:


3

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

以下是一些相关摘录。

问:列族有什么用?

答:使用列族的最常见原因:(1)在数据的不同部分使用不同的压缩设置,比较器,压缩类型,合并运算符或压缩过滤器;(2)删除列族以删除其数据;(3)一列族用于存储元数据,另一列族用于存储数据。

问:将数据存储在多个列族和多个rockdb数据库中有什么区别?

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

问:我有不同的密钥空间。我应该使用前缀将它们分开,还是使用不同的列族?

答:如果每个键空间都足够大,则最好将它们放在不同的列族中。如果它很小,则应考虑将多个键空间打包到一个列族中,以避免维护太多列族的麻烦。


2

我知道您不是在寻找与SQL并行的方法,但是本文只是简单地解释了计划的目的和列家族的好处。

从RubyScale 的SQL角度理解Cassandra数据模型

那么,什么是柱族?只是一个表前缀?列族具有许多与之相关的设置,这些设置可以改变其行为。 有键的缓存设置(在此示例中为UUID),在整个行(在此示例中为整个表)的缓存设置,最重要的是排序。在Cassandra中,没有OFFSET,只有LIMIT和BETWEEN的等效项。在此示例中,列名只是字符串,但它们也可以是整数或时间戳记,并且始终按排序顺序存储。一列族可能具有按时间戳排序的数据,在其中您可以按时间片查询事物,而另一列可能是通讯簿数据,在其中您可以按字母顺序查询事物。事实之后,您要做的唯一排序是反转特定切片。


有趣。正如您所说,它不能完全回答问题,但确实可以提供提示。谢谢。
Noldorin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.