了解并发环境中 Gremlin 合并的行为

Understanding the behavior of Gremlin's coalesce in a concurrent environment

以下查询仅在两个顶点之间不存在边时添加边。

g.V('ea36e68a-70c5-4d38-a038-f5145ed4ced7').as('v').
  V('e3516889-7df0-4cc9-b240-2aa0dba75280').
  coalesce(__.inE('follows').where(outV().as('v')), addE('follows').from('v'))

我的问题是,如果要在高并发设置中执行此查询会怎样?是否有可能读取相同的 "exists" 标准并创建多个边?我是图形数据库的新手,看起来没有我们可以像 SQL 中那样强制执行的唯一性约束。我的目标是确保某些边只能创建一次(例如 followslikes)。我该如何解决这个问题?

您获得的行为不是由 Gremlin 强制执行或决定的。这取决于您选择的底层图形数据库。有些只会在脏读后更新,而另一些可能会因并发修改数据而抛出某种错误,这意味着您将不得不重试遍历。一些图确实有一个模式的概念,它使您能够强制执行各种约束,包括边缘基数。我认为你选择的图表将决定你如何最好地处理这个问题(或者你允许这个问题决定你选择的图表)。