Cassandra 分区与 NoSql 分区
Cassandra Partition vs NoSql Partition
我了解差异 b/w Cassandra 分区键、复合键、集群键。但是没有找到足够的信息来了解 cassandra 中分区是如何处理的。
在 cassandra 中,分区键的范围存储在像 partition/shard 这样的节点上。我的理解对不对..?
每个分区键在数据库中都有不同的文件(在系统级别)吗?如果是这样,读取速度会不会更慢..?
如果每个分区键在数据库中没有不同的文件。它是如何处理的..?
数据以称为分区的宽行存储在 Cassandra 中。每行都有一个用于标识该分区的分区键。为了在集群中分布数据,Cassandra 使用分区器,这些分区器基本上是计算分区键的哈希值,数据基于这些值在集群中分布。 Cassandra 中的默认分区器是 Murmur3Partitioner。
在OS级别,数据存储在sstables文件中。一个分区可以分布在多个 sstable 中。这就是为什么您还需要压缩,这是合并这些 sstables 的过程,因此您的分区不会分布在很多 sstables 上。减少分区分布的 sstables 数量,也会缩短读取时间。值得注意的是 sstables 是不可变的。
我建议阅读 this,尤其是 "How Cassandra reads and writes data"。
我了解差异 b/w Cassandra 分区键、复合键、集群键。但是没有找到足够的信息来了解 cassandra 中分区是如何处理的。
在 cassandra 中,分区键的范围存储在像 partition/shard 这样的节点上。我的理解对不对..?
每个分区键在数据库中都有不同的文件(在系统级别)吗?如果是这样,读取速度会不会更慢..?
如果每个分区键在数据库中没有不同的文件。它是如何处理的..?
数据以称为分区的宽行存储在 Cassandra 中。每行都有一个用于标识该分区的分区键。为了在集群中分布数据,Cassandra 使用分区器,这些分区器基本上是计算分区键的哈希值,数据基于这些值在集群中分布。 Cassandra 中的默认分区器是 Murmur3Partitioner。
在OS级别,数据存储在sstables文件中。一个分区可以分布在多个 sstable 中。这就是为什么您还需要压缩,这是合并这些 sstables 的过程,因此您的分区不会分布在很多 sstables 上。减少分区分布的 sstables 数量,也会缩短读取时间。值得注意的是 sstables 是不可变的。
我建议阅读 this,尤其是 "How Cassandra reads and writes data"。