Cassandra 列族大于节点驱动空间

Posted

技术标签:

【中文标题】Cassandra 列族大于节点驱动空间【英文标题】:Cassandra column family bigger than nodes drive space 【发布时间】:2013-04-09 08:50:45 【问题描述】:

我想启动一个 cassandra 集群(例如 3 个节点),而我的应用程序只有一个列族。

阅读文档后,我了解了 cassandra 如何跨多个节点复制一个列族。

例如。每个节点都有 2Tb 驱动器空间,列族在每个节点上复制,因此每个节点都包含它的完整副本。

如果几年后该列族将超过 2Tb 并且我无法增加驱动器空间会怎样?

如果我要添加更多 10 个节点,我希望将该列族拆分为多个部分并存储在节点上的不同驱动器上,这样它就可以增加到无限大。如果我理解正确,列族仅限于集群中最小的驱动器空间?

【问题讨论】:

【参考方案1】:

您描述的场景仅适用于将所有数据复制到所有节点的情况。您可以通过将复制因子 (RF) 设置为节点数来进行配置。

但是,RF 可以小于节点数,如果添加更多节点,则不需要扩展。

例如,如果您今天有 3 个 RF 为 3 的节点,如您所说,每个节点将包含所有数据的副本。但是如果再添加 3 个节点并将 RF 保持在 3,每个节点将拥有一半的数据。您可以不断添加更多节点,以便每个节点包含的数据比例越来越小。

因此,原则上数据的大小没有限制。

【讨论】:

如果我有 3 个节点和 RF 2,那么第三个节点会包含什么? 数据按行键拆分。每个行键都根据其令牌进行散列并存储在 RF 节点上。因此,对于 3 个节点,Cassandra 根据行键的散列有效地将您的数据分成 3 个部分,X、Y 和 Z。如果您的节点是 A、B 和 C,并且按该顺序具有平衡令牌,则节点 A 包含 X 和 Y,节点 B 包含 Y 和 Z,节点 C 包含 Z 和 X。所以每个节点包含 2/3 的数据,但没有两个节点包含相同的东西。

以上是关于Cassandra 列族大于节点驱动空间的主要内容,如果未能解决你的问题,请参考以下文章

使用 JMX 的 Cassandra 列族列表

Cassandra 数据模型

如何在 cassandra 中追溯列族的大分区

JAVA操作cassandra数据库

由于未知的列族,卡桑德拉没有开始

通过 Python 多处理队列执行 cassandra 插入查询