我有以下图表定义。
schema.propertyKey("ID").text().create()
schema.vertexLabel("Student").properties("ID").create()
当我执行下面的Gremlin查询时,会创建一个新的顶点。
g.addV(label, 'Student').property('ID', '1234')
当我再次执行时,会创建具有相同ID的新Vertex。我正在寻找使ID值唯一的方法。这意味着当我尝试添加具有相同ID的新学生时,我会收到错误(1234)。任何帮助高度赞赏这一点。
答案 0 :(得分:2)
我不了解DSE Graph,但在Titan中,您可以创建索引并将其配置为唯一。但是不建议这样做(至少不会影响很多顶点),因为Titan必须使用锁来插入带有这样一个索引的顶点,以避免重复。
如果在插入顶点之前检查顶点是否存在,您将获得更好的性能。 Daniel Kuppitz在邮件列表[1]上提供了一个查询:
g.V().has('Student','ID','1234').tryNext().orElseGet(g.addV(T.label,'Student','ID', '1234').next())
当然,您可以进入竞争条件,其中两个查询同时评估相同的ID。但这应该很少发生,你可以使用即将推出的TinkerPop版本的OLAP作业进行定期清理。 (不幸的是,目前无法使用OLAP作业修改图形。)
[1] https://groups.google.com/forum/#!topic/gremlin-users/pCYf6h3Frb8
答案 1 :(得分:1)
为图表定义架构时,将ID
属性的基数设置为SINGLE
来自Titan架构文档
SINGLE:此键允许每个元素最多一个值。其他 单词,键→值映射对于图中的所有元素都是唯一的。 属性键birthDate是一个带有SINGLE基数的例子 每个人只有一个出生日期。
以下是文档http://s3.thinkaurelius.com/docs/titan/1.0.0/schema.html
的链接