我使用TitanDB和Cassandra作为存储,而ElasticSearch作为索引。我发现每次在TitanDB中添加Vertex时,它都会生成一个唯一的标识符。
我添加到其中的所有元素都已有标识符,这已被添加为Vertex的属性。
我的问题是:
如果我再次添加一个具有相同ID的Vertex,TitanDB如何识别它是重复的?
有可能update element on duplicate key
吗?或者你首先在TitanDB中进行查询?如果是这样的话,是不是浪费时间呢?
答案 0 :(得分:3)
" upsert"没有直接的方法。如上所述,在comment on the question中," getOrCreate"方法是执行此操作的标准方法。所以,"是"您需要通过标识符属性的索引进行查找。
如果您使用唯一约束建立indexed property,Titan可以检测重复项:
mgmt = graph.openManagement()
name = mgmt.getPropertyKey('name')
mgmt.buildIndex('byNameUnique', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.commit()
如果现在两次应用相同的属性值,则会在提交事务时生成异常。明智地使用唯一索引,因为它们会影响性能,尤其是当您期望对应用唯一的属性进行大量争用时。