删除不能立即在单节点 Cassandra 数据库上起作用

问题描述 投票:0回答:1

我的问题是我没有在单节点 Cassandra 上立即删除。 当我在 Docker 容器中运行 Cassandra 时,该问题仅出现在 Windows 上。 Linux上没有问题。我正在使用 datastax 驱动程序从 Java 应用程序连接到 Cassandra。 测试流程如下:

  1. 将单行插入到my_lock_table
  2. 修改schema(相同的键空间,创建额外的表,大约需要300ms)
  3. 通过分区键从my_lock_table删除行
  4. 通过分区键从 my_lock_table 选择行 - 在 Linux 上没有我预期的结果。但在 Windows 上,应该删除的行是由 SELECT 返回的。

我尝试了多种方法来找出原因:

  1. 当我将 IF EXISTS 子句添加到删除查询中时,它可以正常工作,行立即消失。
  2. 我尝试再次删除行,但没有帮助。这很奇怪,因为无论我调用 DELETE 查询多少次,它都不会工作,直到 10 秒过去。自 INSERT 起 10 秒后,如果我再次调用 DELETE 查询,那么它会起作用并且该行消失了。
  3. 我检查了cassandra的日志,查询的时间戳顺序正确。
java cassandra datastax-java-driver
1个回答
0
投票

所以我怀疑这是由于Windows内核对某些操作的工作方式存在差异造成的。我们在内部对此进行了讨论(在 DataStax),一个想法是 LWT INSERT 可能存在竞争条件,导致 DELETE 可能在 INSERT 生效之前发生。这在 Windows 上会更加明显。

底线:我们停止在 Windows 上支持 Cassandra,因为 Windows 做了一些妨碍 Cassandra 正常运行的事情(删除活动文件句柄的问题)。要测试 Cassandra 单节点样式,请改用 Linux 或 MacOS、WSL 或容器化/虚拟化平台。

© www.soinside.com 2019 - 2024. All rights reserved.