【问题标题】:how to avoid duplicate vertex entries in DSE graph/Titan如何避免 DSE 图/泰坦中重复的顶点条目
【发布时间】:2016-10-12 13:17:33
【问题描述】:

我有以下图形定义。

schema.propertyKey("ID").text().create()
schema.vertexLabel("Student").properties("ID").create()

当我执行以下 Gremlin 查询时,会创建一个新顶点。

g.addV(label, 'Student').property('ID', '1234')

当我再次执行它时,已经创建了具有相同 ID 的新顶点。我正在寻找一种方法来使 ID 值唯一。这意味着当我尝试添加具有相同 ID(1234)的新学生时,我应该得到错误。对此高度赞赏的任何帮助。

【问题讨论】:

    标签: unique graph-databases datastax-enterprise titan gremlin


    【解决方案1】:

    我不了解 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

    【讨论】:

      【解决方案2】:

      当您为图形定义架构时,将 ID 属性的基数设置为 SINGLE

      来自 Titan 架构文档

      SINGLE: 此类键的每个元素最多允许一个值。其他 换句话说,键→值映射对于图中的所有元素都是唯一的。 属性键birthDate 是一个具有 SINGLE 基数的示例,因为 每个人只有一个出生日期。

      这是文档的链接http://s3.thinkaurelius.com/docs/titan/1.0.0/schema.html

      【讨论】:

      • 你能根据我的情况给我一些例子吗?
      • 我还没有尝试过,但是这样的事情可能会起作用mgmt = graph.openManagement() ID = mgmt.makePropertyKey('ID').dataType(String.class).cardinality(Cardinality.SINGLE).make() mgmt.commit()
      • 好的。谢谢你。会检查它
      猜你喜欢
      • 2015-02-21
      • 2023-03-22
      • 2014-06-17
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      相关资源
      最近更新 更多