问题 Cassandra是否支持分片?


是否 Apache Cassandra 支持分片?

道歉这个问题看起来似乎微不足道,但我似乎无法找到答案。我已经读到Cassandra是在GAE的Big Table之后部分建模的,这个Big Table大规模分片。但是我目前在Cassandra上发现的大多数文档似乎暗示Cassandra不会跨多台机器水平分区数据,而是支持许多重复的机器。这意味着Cassandra非常适合高可用性读取,但如果写入量变得非常高,最终会崩溃。


3633
2018-05-07 20:29


起源



答案:


Cassandra确实跨节点进行分区(因为如果你不能拆分它,你就无法扩展它)。 Cassandra集群的所有数据都被划分为“环”,环上的每个节点负责一个或多个密钥范围。您可以控制分区程序(例如,随机,有序)以及根据您的要求将密钥/列复制到环上的节点数。

这包含了很好的概述。 基础架构

此外,我强烈建议您阅读Dynamo白皮书。虽然卡桑德拉在很多方面与迪纳摩不同,但从概念上讲,它们源于相同的根源。一探究竟: 发电机白皮书


18
2018-05-07 20:55



好的,关键问题:在Olog(n)时间内使用大于和小于运算符可以查询Cassandra吗? - Chris Dutrow
这取决于您是否使用了Random或Ordered Partitioner。随机分区程序将在节点之间均匀分布,因此范围查询可能需要命中大多数/所有节点来检索数据......所以可能是O(n)。使用Ordered Partitioner,Cassandra可以准确地确定要查询哪些节点并返回环之间的所有内容,但这是以甚至数据分布(即hello热点)为代价完成的。有一些方法可以完成范围查询(例如,构建您自己的索引,其中您的行键是一列)。这本身就是另一个问题/讨论。 - Matt Self
分区数据是否在所有节点(设置为复制的节点)上复制? - user3587180
“基础架构”链接无效。 - uneq95


答案:


Cassandra确实跨节点进行分区(因为如果你不能拆分它,你就无法扩展它)。 Cassandra集群的所有数据都被划分为“环”,环上的每个节点负责一个或多个密钥范围。您可以控制分区程序(例如,随机,有序)以及根据您的要求将密钥/列复制到环上的节点数。

这包含了很好的概述。 基础架构

此外,我强烈建议您阅读Dynamo白皮书。虽然卡桑德拉在很多方面与迪纳摩不同,但从概念上讲,它们源于相同的根源。一探究竟: 发电机白皮书


18
2018-05-07 20:55



好的,关键问题:在Olog(n)时间内使用大于和小于运算符可以查询Cassandra吗? - Chris Dutrow
这取决于您是否使用了Random或Ordered Partitioner。随机分区程序将在节点之间均匀分布,因此范围查询可能需要命中大多数/所有节点来检索数据......所以可能是O(n)。使用Ordered Partitioner,Cassandra可以准确地确定要查询哪些节点并返回环之间的所有内容,但这是以甚至数据分布(即hello热点)为代价完成的。有一些方法可以完成范围查询(例如,构建您自己的索引,其中您的行键是一列)。这本身就是另一个问题/讨论。 - Matt Self
分区数据是否在所有节点(设置为复制的节点)上复制? - user3587180
“基础架构”链接无效。 - uneq95


是的,cassandra支持分片,但以自己的方式。

在Mongodb中,每个辅助节点都包含主节点的完整数据,但在Cassandra中,每个辅助节点都有责任仅保留一些关键数据分区。


-3
2018-05-07 20:43



你正在混淆MongoDB 复制 (其中辅助节点包含冗余数据的完整副本) 分片 (跨机器集群划分逻辑数据库)。通常,如果您是分片,您还希望每个分片都由副本集支持,但这两个概念实际上是正交的。 - Stennie