Cassandra cqlsh connecton和通过复制命令插入数据?

问题描述

我有一个具有5个节点的cassandra集群的单个数据中心并正在运行。我用简单的策略创建了一个RF = 3的键空间。我需要澄清以下几点-

  1. 使用nodetool getpoints可以告知我们数据实际存储在哪个节点上。所以我知道我的数据存储在node-2、3、4。但是我仍然可以在每个节点上看到相应的sstable和* .db文件。因此,如果数据实际存储在节点2、3、4处,那么为什么它也显示在节点0、1上?

  2. 通过cqlsh客户端连接后,一致性命令向我显示ONE作为认一致性级别。所以我现在的理解是,如果我将执行任何通过复制执行的读取或写入命令,将被执行为一致性ONE。因此,如果我一次将3或4个节点断开,除了2、3、4中的一个节点之外,这将对客户端连接(cassandra读取或写入查询)有任何影响?

请让我知道这一点,以更好地理解cassandra概念?

解决方法

  1. Cassandra根据特定分区键的哈希值(此值通常称为令牌)和副本数将数据分发到群集的所有节点,因此PK的值为1将在节点(3,4,5)上,值2在节点(5、1、2)等上。ONE为您提供具有特定分区键的行的位置,而不是针对所有数据。您可以在下面的blog post中阅读有关此内容的更多信息。

  2. CL pip install --upgrade google-api-python-client 意味着我们仅需要确认一个数据副本的读或写操作即可(由于RF = 3,您需要三个副本)。写入始终会发送到所有副本,但是如果只有一个答案成功,我们将确认操作。对于您的特定问题-在您的情况下,您可以容忍丢失负责特定分区键的2个节点。

我建议至少阅读《 Cassandra:权威指南》第三版的第一部分-它是DataStax的freely available。或阅读DataStax Enterprise Architecture Guide-它也涵盖了Cassandra的体系结构。

P.S。我建议使用DSBulk utility而不是使用copy命令-在加载或卸载数据(尤其是处理大量数据)时,它已针对性能进行了充分优化,并且更加灵活。