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

时间:2019-02-21 13:37:12

标签: 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'))

我的问题是,如果要在高度并发的设置中执行此查询会怎样?是否有可能读取相同的“存在”条件并创建多个边缘?我是数据库数据库的新手,似乎没有像SQL中可以强制执行的唯一性约束。我的目标是确保某些边只能创建一次(例如followslikes)。我应该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您得到的行为不是由Gremlin强制执行或确定的。由您选择的基础图形数据库决定。有些会在脏读后才进行更新,而另一些可能会在并发修改数据时抛出某种错误,这意味着您必须重试遍历。某些图形确实具有架构的概念,可让您实施各种约束,包括边基数。我认为,您选择的图表将决定如何最好地处理此问题(或者也许让该问题决定您选择的图表)。

相关问题