Concurrency 了解小精灵的行为';s在并发环境中合并

Concurrency 了解小精灵的行为';s在并发环境中合并,concurrency,graph-databases,gremlin,unique-constraint,tinkerpop,Concurrency,Graph Databases,Gremlin,Unique Constraint,Tinkerpop,以下查询仅在两个顶点之间不存在边时才添加该边 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')) 我的问题是,如果在高度并发的环境中执行此查询,会发生什么情况?是否有可能读取相同的“存在”标准并创

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

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'))

我的问题是,如果在高度并发的环境中执行此查询,会发生什么情况?是否有可能读取相同的“存在”标准并创建多个边?我对图形数据库还不熟悉,而且似乎没有像SQL中那样可以强制执行的唯一性约束。我的目标是确保某些边只能创建一次(例如
follows
likes
)。我应该如何处理这个问题?

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

谢谢您,Stephen。我正在考虑使用Azure的宇宙数据库图。您知道它在这个问题上的行为吗?我不是100%确定,但是它们有可调的一致性级别,所以我想您可以在那里进行一些控制。