我的cassandraconfiguration是否正确

在正常情况下,我有一个cassandra集群,有三个节点。 当我从node.js发送写请求集群时,我希望所有的节点在写入完成后写回给我,而在读取时,我希望能够读取我连接的节点。 当三个节点中的一个死亡时,我希望这个设置继续。 我select了复制因子= 3一致性= 2我应该如何实现configuration。 configuration是否正确? 我的敬意

所以我不幸的是没有提供从节点JS驱动程序提供的数字的真实线索,但我知道一些关于一致性级别,我怀疑你在后台使用,假设你使用这个驱动程序: http:// datastax。 github.io/nodejs-driver/ 。

只是一个基本的事情:节点不直接写回给你,但你的查询被发送到一个节点,该查询的协调员,然后根据您的一致性级别规范在您的群集中分发查询(至less如果它一个简单的查询,在批量查询的情况下应用更复杂的归因逻辑)。 协调员然后在执行查询时向您报告。

您的要求是否完全取决于您select的复制因素。 这里的问题是卡珊德拉只知道这么多。 写作的选项是:所有(最初看起来你想要什么),法定(也是一个选项),一个和任何。 所以让我们假设你select全部,因为你想要写入所有副本。 这是完全正常的,但是如果其中一个节点出现故障,将会出现写入失败,因为其中一个副本无法更新。 如果您实际使用复制因子3,则可以使用法定数回退写入,在这种情况下为2个节点。 如果另一个节点失败会发生什么? 我知道,不太可能,但我已经看到它在生产,所以它不时发生。 应该在这种情况下更新单个最后一个节点? 那么你需要回退到一致性水平1.一切都很好。

但是如果你select复制因子是5呢? 那么,没有办法说:我想要4个节点。 如果一个节点出现故障,则只能有一个法定人数,而这个数字应该是3,而不是4。下一个回退应该是1而不是2。

最后一个问题是:如果你失去了一个节点,并且在写作部分做了一个fallbak,那么当你的节点回来的时候(假设由于某些暗示的越区切换已经被丢弃而丢失了更新)会发生什么? 应用程序的读取部分可以始终读取陈旧的数据,因为您始终只能从单个节点读取数据。 在我看来,你正在努力弥补写作部分。 我个人的想法是在读写时使用法定人数,这样可以保证读取当前的数据,并且单个节点可以下降(复制因子5甚至是2个节点)。 另外请记住,当你写一个节点的时候,cassandra会一直试图在后台写副本,所以它会尽量保持你的数据是最新的。 如果您确实需要速度,那么即使使用一对一致性级别读取陈旧数据的风险也是可以接受的。