【问题标题】:Light-weight-transaction Performance in CassandraCassandra 中的轻量级事务性能
【发布时间】:2021-10-17 13:54:23
【问题描述】:

根据 cassandra 文档,LWT 性能很差。在以下场景中;

场景一;

  • 从 cassandra 读取(线程 1)
  • 如果上述步骤未返回任何数据,则写入 cassandra(线程 2)

在这种情况下,上述步骤由不同的线程处理。 Thread1 从 cassandra 读取数据,然后将其传递给 thread2。然后thread1会尽快查询新数据。这将提高性能。但是 cassandra 上会有 2 个连接。

场景2;

  • 使用 LWT 写入 cassandra。

在这种情况下,只有一个线程会向 cassandra 发送查询。如果 LWT 性能真的很差,这会降低整体性能。

我不确定哪个更好。 LWT 性能真的很差吗?

【问题讨论】:

  • 两者不一样,在那种情况下 1 将遭受竞争条件,除非您使用其他机制来确保线程不会处理相同的数据,例如演员模型。
  • 你是对的。但我保证只有一个线程会同时处理 cassandra 中的相同密钥。我只是试着想象一下 lwt 的确切性能是什么

标签: cassandra cassandra-3.0


【解决方案1】:

鉴于您提供的保证是同一主键不会发生线程之间的竞争条件,那么您应该继续使用先读后写的方法。

LWT 经历了 4 个阶段的过程,准备、读取、提议、提交 - 这可能导致该过程花费的时间是单个操作的 4 倍,因为它需要在充当协调者/提议者的节点之间进行 4 次往返以及事务中涉及的副本。

【讨论】: