【发布时间】:2018-07-26 20:00:08
【问题描述】:
我正在为我的应用程序创建一个 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 读取延迟小于 10 毫秒。 当我们添加 statement2 并从代码的一部分开始使用它时,每个 cassandra 调用的延迟增加到 250 毫秒。
这是 datastax 中的错误吗?有没有可能
statement2.setConsistencyLevel(ConsistencyLevel.QUORUM);
是否将整个会话的一致性级别设置为 ConsistencyLevel.QUORUM?
我错过了什么傻事吗?
我正在使用 cassandra-driver-core-3.1.3.jar
【问题讨论】:
-
了解您的担忧。您可以使用最新的 cassadra 驱动程序快速测试它吗?如果问题仍然存在,您可以在 cassandra 驱动项目中提出一个 jira。
-
我只是查看API文档,
setConsistencyLevel也返回statement对象,你能不能换成statement1 = session.prepare("SELECT key FROM foo WHERE key = ?").setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM) -
QUORUM 需要整个集群的 Quorum,而 LOCAL_QUORUM 只需要本地数据中心的 quorum。如果您有一个多数据中心集群,这将涉及更多副本,并且需要跨数据中心进行通信。如果您的 DC 位于不同的地方(即美国和欧盟),您的延迟会相当高......
-
@AndyTolbert 明白你的意思,但问题是,如果有的话,为
one查询设置一致性级别可能会更新同一会话的all查询的一致性级别。 -
您确定您的所有查询都不使用 statement2 吗?在一个语句上设置 CL 不应影响另一个语句,这不是我所知道的驱动程序中的错误。
标签: java cassandra datastax-java-driver