在 TitanDB 中更新数据
upserting data in TitanDB
我正在使用 TitanDB,Cassandra 作为存储,ElasticSearch 作为索引。我发现每次在 TitanDB 中添加 Vertex 时,它都会生成一个唯一标识符。
我添加到其中的所有元素都已经有一个标识符,这已添加为 Vertex 的 属性。
我的问题是:
如果我再次添加一个具有相同 ID 的 Vertex,TitanDB 如何识别它是重复的?
有可能 update element on duplicate key
吗?或者您必须先在 TitanDB 中进行查询?如果是这样,这样做不是浪费时间吗?
"upsert" 没有直接的方法。如上所述,在 中,"getOrCreate" 方法是执行此操作的标准方法。因此,"yes" 您需要通过标识符 属性 上的索引进行查找。
Titan 可以检测重复项,如果您使用唯一约束建立 indexed property:
mgmt = graph.openManagement()
name = mgmt.getPropertyKey('name')
mgmt.buildIndex('byNameUnique', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.commit()
如果现在两次应用相同的 属性 值,将在提交事务时生成异常。明智地使用唯一索引,因为它们会影响性能,特别是如果您预计应用唯一索引的 属性 会出现激烈争用。
我正在使用 TitanDB,Cassandra 作为存储,ElasticSearch 作为索引。我发现每次在 TitanDB 中添加 Vertex 时,它都会生成一个唯一标识符。
我添加到其中的所有元素都已经有一个标识符,这已添加为 Vertex 的 属性。
我的问题是:
如果我再次添加一个具有相同 ID 的 Vertex,TitanDB 如何识别它是重复的?
有可能 update element on duplicate key
吗?或者您必须先在 TitanDB 中进行查询?如果是这样,这样做不是浪费时间吗?
"upsert" 没有直接的方法。如上所述,在
Titan 可以检测重复项,如果您使用唯一约束建立 indexed property:
mgmt = graph.openManagement()
name = mgmt.getPropertyKey('name')
mgmt.buildIndex('byNameUnique', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.commit()
如果现在两次应用相同的 属性 值,将在提交事务时生成异常。明智地使用唯一索引,因为它们会影响性能,特别是如果您预计应用唯一索引的 属性 会出现激烈争用。