我阅读了很多 cassandra 文档,我知道我们有分区键,该键的哈希值用于在分区之间分割数据,以在节点之间均匀分配数据。
但是分区到底是什么?它是一个表,还是表中的某个子集,还是只是用于对节点上的行进行排序的另一种计算内容?它是一个纯粹的虚拟事物,还是一些会产生一些开销的真实实体?
限制分区数量是否更好?例如,我可以从 uuid 除法中取余数并将其用作分区键,这样仍然可以均衡分区之间的数据,但保持分区数较低,或者我可以只使用整个 uuid?
我阅读了很多 cassandra 文档,我知道我们有分区键,该键的哈希值用于在分区之间分割数据,以在节点之间均匀分配数据。
但是分区到底是什么?它是一个表,还是表中的某个子集,还是只是用于对节点上的行进行排序的另一种计算内容?它是一个纯粹的虚拟事物,还是一些会产生一些开销的真实实体?
限制分区数量是否更好?例如,我可以从 uuid 除法中取余数并将其用作分区键,这样仍然可以均衡分区之间的数据,但保持分区数较低,或者我可以只使用整个 uuid?
将其视为表的子集是一个好的开始。每个节点负责特定范围的分区(又称为令牌范围)。这就是 Cassandra 数据在节点之间的分布方式。无论数据位于哪个表中,令牌范围都是根据分区键的哈希值计算的。
因此,从根本上讲,分区是保证位于单个节点上的数据子集。这就是为什么我们说为了获得最佳性能,一起查询的数据应该存储在一起(同一分区)。
查询唯一会产生开销(与分区相关)的情况是尝试查询多个分区。多分区(分区键)查询很糟糕,因为无法确定确切的节点(包含要返回的所有数据)。因此,协调器会在整个集群中进行详尽搜索。
不。您肯定需要更多分区。这将有助于数据在整个集群中更均匀地分布。同样,这也有助于在集群中分配操作活动,并有助于保护部分节点免于过载。