当前位置: 首页 > 知识库问答 >
问题:

Cassandra数据税务一致性级别问题

越学博
2023-03-14

我正在为我的应用程序创建一个cassandra会话对象,并为它创建一些准备好的语句。对每个准备好的语句设置不同的一致性级别。

statement1 = session.prepare("SELECT key FROM foo WHERE key = ?");
statement1.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);

statement2 = session.prepare("SELECT key FROM foo WHERE key = ?");
statement2.setConsistencyLevel(ConsistencyLevel.QUORUM);

我们之前只有statement1,cassandra读取延迟小于10ms。当我们添加statement2并从代码的一部分开始使用它时,每次cassandra调用的延迟都会增加到250ms。

这是datastax中的错误吗?有没有可能

statement2.setConsistencyLevel(ConsistencyLevel.QUORUM);

正在将一致性级别设置为一致性级别。整个会话的法定人数

我错过了一些愚蠢的东西吗?

我用的是Cassandra-driver-core-3 . 1 . 3 . jar

共有1个答案

凌伟泽
2023-03-14

溶液:

statement1 = session.prepare("SELECT key FROM foo WHERE key = ?");
statement2 = session.prepare("SELECT key FROM foo WHERE key = ?");

这两个预准备语句完全相同,这意味着查询字符串是相同的:“从 foo 中选择键,其中键 = ?”

cassandra datastax驱动器已进行了优化。因此,当您创建第二条语句时,datastax驱动程序将返回第一条语句的引用。因此

statement2.setConsistencyLevel(ConsistencyLevel.QUORUM);

最终在第一条语句上设置一致性级别。

此问题的解决方案是在绑定语句上设置一致性级别,而不是在预准备语句上设置一致性级别。

例如:

statement1 = session.prepare("SELECT key FROM foo WHERE key = ?");
BoundStatement boundStatement = new BoundStatement(statement1); 
boundStatement.setConsistencyLevel(ConsistencyLevel.QUORUM);
 类似资料:
  • 想象一个电子商务应用程序: 假设我有三个并且我的一致性级别(CL)很弱:即 我有一个产品表,例如 这是跨三个节点同步的初始数据 > 现在,客户端A从N1读取信息,客户端B从N2读取信息 客户端1看到1台计算机可用 客户端 2 看到 1 台计算机可用 他们现在都去购买客户A先下订单。所以N1,表格如下所示: 现在客户端 2 下订单,因此在 N2 处,表将如下所示: 但实际上客户2的订单不应该被处理。

  • 我正在尝试使用JMX BulkLoader将ETL数据从远程节点传输到集群上的Cassandra https://github.com/PatrickCallaghan/datastax-analytics-example/blob/master/src/main/java/com/datastax/jmxloader/JmxBulkLoader.java 但是,在成功建立JMX连接后,它似乎无法

  • 我对卡珊德拉的一致性有疑问。我在集群中有3个Cassandra节点(版本2.0.14.352 ),我使用< b >一致性级别仲裁读取和写入,我的< b >复制因子是3。如果我理解replication_factor " >这个对我来说卡珊德拉应该是一致的,因为2 ^ 2 与相应的表 dataProvider.setValue()内部将给定值放入NavigableMap。dataProvider.s

  • 有人能帮助我如何通过datastax.cassandraconnector设置一致性吗?

  • 我正在编写一个连接到Microsoft Azure CosmosDB中的Cassandra数据库的Java应用程序。根据文档页面:https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-manage-consistency,cosmosdb具有设置读取操作的一致性级别的选项。然而,我无法找到在使用针对cassandra的SQL API时如何做

  • 我有一个3节点的Cassandra集群,其密钥空间的复制因子为3: (仅部署在一个数据中心) 当进行失败测试时,即关闭一个节点,我在尝试查询我的键空间时得到这些异常: 我不知道为什么会看到这个错误,因为: 我的复制因子设置为3(即我仍然有2个节点,每个节点包含所有数据) 我的一致性级别设置为QUORUM。(为什么我看到LOCAL_ONE?)