Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra如何仅使用分区键检索行?_Cassandra_Rocksdb_Sst - Fatal编程技术网

Cassandra如何仅使用分区键检索行?

Cassandra如何仅使用分区键检索行?,cassandra,rocksdb,sst,Cassandra,Rocksdb,Sst,类似BigTable的数据库存储按键排序的行 Cassandra使用分区键和聚类键的组合来保持数据的分布和排序;然而,您只能通过使用分区键来选择行 卡桑德拉的架构是如何以这种方式工作的 例如,在RocksDB中解决此问题的一种方法是,您可以按分区键拥有一个默认列族,另一个具有分区和群集组合键,并迭代排序数据并按默认列族进行检索,最终导致非常高的空间复杂度 更新:我猜Cassandra试图将每一列存储在不同的键中,它从分区键开始,并在不同的“列名”上进行迭代—可能是其他列和集群列的组合。请参阅底层

类似BigTable的数据库存储按键排序的行

Cassandra使用分区键和聚类键的组合来保持数据的分布和排序;然而,您只能通过使用分区键来选择行

卡桑德拉的架构是如何以这种方式工作的

例如,在RocksDB中解决此问题的一种方法是,您可以按分区键拥有一个默认列族,另一个具有分区和群集组合键,并迭代排序数据并按默认列族进行检索,最终导致非常高的空间复杂度

更新:我猜Cassandra试图将每一列存储在不同的键中,它从分区键开始,并在不同的“列名”上进行迭代—可能是其他列和集群列的组合。请参阅底层存储引擎的图片-

从姓名='Tom Clancy'和年份='1993'的作者中选择*。 在一个表中,“name”是分区键,“year”和“title”是集群列


Cassandra中的所有数据都是通过分区存储的,因此当您仅对分区键有条件时,您将检索具有该分区键的所有行—它们将一个接一个地写入。您可以在中找到更多信息。

Cassandra中的所有数据都是按分区存储的,因此,当您只有分区键的条件时,您可以检索具有该分区键的所有行—它们会一个接一个地写入。您可以在中找到更多信息。

Cassandra具有您提到的分区键和群集键

这里有一个关于这个主题的非常简短和清晰的解释,并有很好的例子

本文件的重要内容包括:

主键中的第一个元素是我们所称的分区键。分区键在ApacheCassandra中除了显示数据库中记录的唯一性之外还有特殊用途。另一个目的,也是在分布式系统中非常关键的一个目的,是确定数据的局部性

这解释了Cassandra的设计中如何仅通过分区键来选择行

如果分区键在其定义中有多个列-

分区键之后列出的所有列都称为集群列。这就是我们从关系数据库中获得巨大突破的地方。当分区键对于数据局部性很重要时,集群列指定数据在分区内的排列顺序

正确设计集群列后,与未定义集群列相比,读取查询所需的时间应该更少

除了上面的链接,您还可以在(Cassandra中分区键、复合键和集群键之间的区别?)中找到非常好的解释和示例

更新:


数据库使用嵌套排序顺序存储和定位数据。数据存储在查询必须遍历的层次结构中。您已经为集群列的不同值共享了密钥。看看这里:

正如您所提到的,Cassandra有一个分区键和一个集群键

这里有一个关于这个主题的非常简短和清晰的解释,并有很好的例子

本文件的重要内容包括:

主键中的第一个元素是我们所称的分区键。分区键在ApacheCassandra中除了显示数据库中记录的唯一性之外还有特殊用途。另一个目的,也是在分布式系统中非常关键的一个目的,是确定数据的局部性

这解释了Cassandra的设计中如何仅通过分区键来选择行

如果分区键在其定义中有多个列-

分区键之后列出的所有列都称为集群列。这就是我们从关系数据库中获得巨大突破的地方。当分区键对于数据局部性很重要时,集群列指定数据在分区内的排列顺序

正确设计集群列后,与未定义集群列相比,读取查询所需的时间应该更少

除了上面的链接,您还可以在(Cassandra中分区键、复合键和集群键之间的区别?)中找到非常好的解释和示例

更新:


数据库使用嵌套排序顺序存储和定位数据。数据存储在查询必须遍历的层次结构中。您已经为集群列的不同值共享了密钥。看看这里:

我明白这一点。我猜Cassandra为了允许这种重复并按照集群键的顺序进行排序,会尝试按顺序将每一列存储在不同的键中,因此每一行都是列的范围查询。(请参考我发现的带有可视化的更新问题)。我说的对吗?是的,类似这样的东西-数据在写入文件之前按每个聚类列排序。。。然后,Cassandra能够进行有效的范围查询,甚至在同一分区内进行聚合OK。根据上面的图片和我们所说的,您对Cassandra如何理解行的最后一列有什么意见吗?特别是空列,考虑到它们不应该占用任何空间。对不起,我不明白您的意思-您的意思是“C*如何理解停止读取的位置?”是的,C*在哪里停止读取单行的列?由于每个列都存储在不同的键中,我想我们必须在达到列数的地方停止,但是如果我们有空列,我们怎么知道我们在一行的末尾呢?我理解这一点。我猜Cassandra为了允许这种重复并按照集群键的顺序进行排序,会尝试按顺序将每一列存储在不同的键中,因此每一行都是列的范围查询。(请参考我发现的带有可视化的更新问题)。我说的对吗?是的,有些事