小编Lax*_*ant的帖子

如果我将正常一致性级别设置为条件写入(LWT)会发生什么?

我有6个节点集群,复制因子3.我使用常规一致性级别作为QUORUM,串行一致性级别作为SERIAL.

我有一个条件写查询(IF EXIST).如果我使用如下所示的datastax java驱动程序将normal和serial都设置为此语句,会发生什么.

//preparedStatement has a conditional query.
BoundStatement boundStatement = new BoundStatement(preparedStatement);
boundStatement.setSerialConsistencyLevel(ConsistencyLevel.SERIAL);
//is this required??
boundStatement.setConsistencyLevel(ConsistencyLevel.QUORUM);
Run Code Online (Sandbox Code Playgroud)

我的疑问:

  1. 是否会忽略正常的一致性QUORUM,还是会将其考虑在内?
  2. 在这种情况下,我应该只设置串行一致性级别吗?

我在下面提到的链接,但它没有解释太多 https://docs.datastax.com/en/cassandra/3.x/cassandra/dml/dmlConfigSerialConsistency.html

学习阶段定义了在发生轻量级写入时将立即完成哪些读取操作使用正常的一致性级别.

请简单解释一下.

cassandra datastax-java-driver cassandra-2.0

3
推荐指数
1
解决办法
297
查看次数

stream()。collect(Collectors.toSet())vs stream()。distinct()。collect(Collectors.toList())

如果我有一个对象列表(〜200个元素),则只有很少的唯一对象(〜20个元素)。我只想拥有唯一的值。之间list.stream().collect(Collectors.toSet()) and list.stream().distinct().collect(Collectors.toList())哪个更有效的WRT延迟和内存消耗?

java-8 java-stream

3
推荐指数
2
解决办法
1881
查看次数

如何确保仅在 cassandra 中不存在数据时才写入

我的服务器应用程序有两种方法:

boolean isMessageExist(messageId) 执行以下查询:

从消息中选择消息 ID 其中消息 ID = 1;

insertMessage(int messageId,String data) 执行以下查询:

INSERT INTO 消息 (messageId,data) VALUES (1, xyz);

在我的代码中,我在下面执行的操作是为了满足“仅在消息不存在时插入”的要求。

if(!isMessageExist(1)){
insertMessage(1,"xyz")
}
Run Code Online (Sandbox Code Playgroud)

但如果对相同 messageId 的请求几乎同时出现,则上述代码将不起作用。

即在时间 T0 ... Read1(1)、Write1(1) 和 Read2(1)、Write2(1) 同时发生,因为两个请求是同时从客户端发送的。有没有办法在服务器端按顺序发出这些请求。我的意思是 Read2(1) 应该总是得到结果 Write1(1) 吗?

由于性能开销,如果 IF NOT EXISTS,我不想使用 CAS 操作。还有其他方法可以达到我的要求吗?请建议。

cassandra cql3 cassandra-2.0

1
推荐指数
1
解决办法
6525
查看次数