并发场景下的边基数保证

Edge cardinality guarantees in concurrency scenarios

DSE Graph 允许指定边基数,即对于某些边标签,它可以强制只有一个带有这样标签的边从任何顶点发出。这在手动线性化测试中非常有效 - 尝试设置具有相同标签的第二条边将失败。

但是,我们不清楚并发场景中的确切保证是什么,即当两个线程尝试大致同时将具有相同标签的边添加到顶点时。

鉴于 Cassandra 作为底层数据存储,可以想象有两种方式:

  1. 两个线程都没有观察到存在的边缘。两个线程都加边成功,第一次加边被覆盖,只有后面加边可见

  2. 采用了类似Cassandra轻量级事务的机制,只有在有none('Compare-and-set')的情况下才会增加一条边。其中一个线程肯定会失败。

我们假设 DSE Graph 保证足够强大,以至于我们不可能以具有相同标签的两条可观察边结束。是否有关于 DSE Graph 的实际实施的任何信息?

DSE 图中的单基数边会阻止您在一对顶点之间添加同一标签的多个边。 这是通过具有固定组件的边 ID 来实现的。没有使用 LWT。 可以有多个相同类型的单基数边连接到一个顶点,只要边的另一边连接到不同的顶点。