database - Cassandra(复制因子 : 2, 节点:3)和轻量级事务

标签 database cassandra

我们有一个运行有 3 个节点且复制因子为 2 的 cassandra 集群 -> 也许我们应该从一开始就选择 3,但事实并非如此。

因此我们的法定人数 = 2/2 + 1 = 2

假设我们丢失了一个节点 - 所以现在只有两个 cassandra 节点在线。

如果我们将一致性级别设置为“ONE”然后读取 ->,我们仍然有可能从集群中读取,所以这不是问题。

我不明白的是以下内容。

我们仍然有两个节点在运行,那么为什么不能将串行(轻量级事务)插入到我们的键空间中呢?我们有两个节点,所以在尝试插入时不应该获得 2 的法定人数吗?

是否因为其中一行已经放在丢失的节点上?

最佳答案

当您尝试插入数据时,数据会根据 token 值(根据配置的分区程序)存储并以循环方式复制。

例如如果您在 3 节点集群 Node1(拥有 token A)、Node2(拥有 token B)和 Node3(拥有 token C)中的复制因子为 2 的键空间中插入数据 X。假设如果数据 X 被计算为 token B,那么 Cassandra 开始从 Node2 和 Node3 插入数据(直到它完成副本)。假设如果数据 X 被计算为 token C,那么 Cassandra 开始从 Node3 和 Node1 插入数据。

所以设置一致性级别为2意味着数据必须写入2个节点。 在您的情况下,即使您在 Node1( token A)和 Node2( token B)上有 2 个节点,在 Node3( token C)下有一个节点,如果数据被计算并选择为 token B,那么 Cassandra 会尝试插入 Node2 和Node3 并且您会收到一致性错误,因为它无法插入 Node3。

因此要插入,您必须将复制增加到 3 或将一致性降低到 1。

要了解有关一致性的更多信息,请参阅此文档 https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_config_consistency_c.html

关于database - Cassandra(复制因子 : 2, 节点:3)和轻量级事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694324/

相关文章:

python - 该字段没有指定默认值,但为 NOT NULL

cassandra - Hector为 super cf的子列做incrementCounter

cassandra - Cassandra中带TTL的多列数据开销如何工作?

python - 使 pig 嵌入 python 脚本和 pig cassandra 集成以与 oozie 一起工作

database - 如何以最有效的方式更新数据库?

sql - 删除数据库中的重复行而不使用 rowid 或创建临时表

node.js - 如何确保非规范化数据插入到cassandra中?

cassandra:您可以查询集合字段吗?

sql - PL SQL如何选择所有列

php - 英国时区 (GMT) - PHP 日期还是 MySQL 日期?