以下查询仅在两个顶点不存在时才添加边。
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
)。我该如何处理这个问题?
您获得的行为不是由Gremlin强制执行或确定的。您可以选择基础图数据库。有些只会在脏读之后更新,而其他人可能会因同时修改数据而引发某种错误,这意味着您必须重试遍历。有些图表确实具有模式的概念,使您能够强制执行各种约束,包括边缘基数。我认为您选择的图表将决定您如何最好地处理此问题(或者您可能允许此问题来决定您选择的图表)。