DSE 如何传播数据?

How DSE Spread Data?

我们将 DSE 与 Cassandra + Solr 结合使用。

我不确定它是如何传播数据的,假设我们有 6 个节点,复制因子为 3。

我们平台使用6个节点全部查询数据,我从6个节点中查询一个节点会不会有数据丢失?

或者如果我想使用平台中的所有节点,我需要具有与我拥有的节点数相同的复制因子。

它是如何工作的?

如果你有 6 个节点和 RF 3,这意味着你的 cassandra 集群中存在 3 个数据副本。数据可用性还取决于一致性级别。如果您使用一个一致性和 2 个节点故障,那么也将获得数据并且不会丢失,但如果使用两个、QOURAM、三个或所有一致性,那么情况将有所不同。

在 Cassandra 中,每个节点存储部分数据。当您构建集群时,每个节点将负责特定部分的数据。这是根据分配给该节点的令牌值决定的。现在,当您插入或 select 数据时,每个插入或 select 都会有一个分区键。基于该分区键计算哈希值,并将数据发送到负责该特定令牌值的节点。

如果有 6 个节点并且 RF = 3,那么在集群中你有 3 个完整数据的副本。基于上述概念存储主副本。副本将根据您在创建密钥空间时指定的复制 class 进行存储。如果你采用 SimpleStrategy 它会顺时针将副本存储在下一个节点上,即 node1 的副本将存储在 node2 和 node3 上,node2 的副本将存储在 node3 和 node4 上,依此类推。

如果您从一个节点查询,则根据分区键,查询将发送到负责该分区键的特定节点。要知道您的查询将发送到哪个节点,您可以使用 nodetool 实用程序。

nodetool getendpoints <keyspace> <table> <key> 

这将为您提供将发送查询以获取结果的节点 Ip