Cassandra如何水平缩放?

Ade*_*lin 8 cassandra nosql

我在Cassandra数据库上观看了一段视频,该视频非常有效,并且真正解释了很多关于Cassandra的内容.我还准备了一些关于Cassandra的文章和书籍,但我无法理解的是Cassandra如何横向扩展.通过水平缩放,我的意思是添加更多节点以获得更多空间.据我所知,每个节点都有相同的数据,即如果一个节点有1TB的数据并被复制到其他节点,这意味着所有n个节点都将包含1TB的数据.我在这里错过了什么吗?

ole*_*sii 12

是的,你错过了什么.数据可能不需要重复n次,其中n是节点数.您通常会将复制因子(RF)配置为低于节点数(N).

例如,RF = 3,N = 5.意味着每行将在5个节点中随机选择的3个节点(加上原始副本)重复3次.如果一个节点发生故障,则其他节点上的其他节点将有3个副本.

这在较大的群集中效果更好,例如RF = 5,N = 100.

较高的RF可提高数据冗余和读取速度,但会降低写入速度.所以有一个平衡点,如果您的RF非常高,如RF = N,您将拥有非常高的数据冗余,对节点故障的高弹性以及高读取吞吐量.另一方面,您的写入吞吐量将非常有限,因为数据需要复制到所有节点.如果在这种情况下一个节点发生故障,则写入可能会失败(取决于客户端配置),因为无法实现所需的复制因子.

  • 这是理解这个概念的一个很好的答案,但你提到的(高RF)的缺点在Cassandra中并不是真正的问题.如果我的RF值为5,我可以将应用程序的写入一致性设置得更低(例如2或甚至1).这样我的应用程序只关心确保少量节点的写入成功,而Cassandra处理完整的数据复制(事后).如果一个节点出现故障,Cassandra会指定其他节点负责该节点的令牌范围,并确保它获得所有错过的写入(如果它相对很快恢复). (4认同)
  • 我同意这是一个很好的答案,@ BryceAtNetwork23提供的澄清我会进一步澄清失败的主题.如果副本失败,则提示将存储在群集中的其他节点上,直到它返回为止.失败时不会重新分配令牌范围.仅当运算符明确删除节点时才会发生该操作.如果您熟悉HDFS如何复制,这是一个区别. (3认同)

The*_*ous 2

是的很多。

复制的发生取决于键空间的复制因子。因此,如果复制因子为 2,则会创建两个副本。在 20 个节点的集群中,这意味着只有 3 个节点拥有一组数据,其他 17 个节点将拥有其余数据。

根据设置为聚类键的列中的数据来划分节点中的数据。因此,在簇键列中具有相同数据的一组行将被放置在单个节点中。这是为了确保一个查询只需命中一个节点即可完成查询。