【问题标题】:titan make unique vertex based on property key泰坦根据属性键制作唯一顶点
【发布时间】:2013-09-16 05:59:44
【问题描述】:

我想创建一个没有重复属性的顶点,例如,名称

我关注了https://github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices的页面

但是,它对我不起作用

gremlin>g.makeType().name('dom').unique(OUT).dataType(String.class).indexed(Vertex.class).makePropertyKey()
==>v[36028797018965714]
gremlin> u2 = g.addVertex([dom:'def.com'])
==>v[480020]
gremlin> u2 = g.addVertex([dom:'def.com'])
==>v[480024]

我可以只为同一个 dom 属性创建一个顶点吗?

提前致谢

【问题讨论】:

    标签: unique vertex gremlin titan


    【解决方案1】:

    您需要将您的类型定义为unique(BOTH)。你可以阅读更多关于类型here的信息。

    gremlin> g = TitanFactory.open('/tmp/titan')
    ==>titangraph[local:/tmp/titan]
    gremlin> g.makeType().name('dom').unique(BOTH).dataType(String.class).indexed(Vertex.class).makePropertyKey()
    ==>v[36028797018963978]
    gremlin> g.commit()
    ==>null
    gremlin> u2 = g.addVertex([dom:'def.com'])
    ==>v[4]
    gremlin> u2 = g.addVertex([dom:'def.com'])
    The given value is already used as a property and the property key is defined as in-unique
    Display stack trace? [yN] n
    gremlin>
    

    【讨论】:

    • 感谢斯蒂芬帮助我。
    • 我有一个后续问题,我想把它放在 groovy 脚本中,这样我就可以运行批量插入。我遇到错误,例如“javax.script.ScriptException:java.lang.IllegalArgumentException:给定值已用作属性并且属性键被定义为唯一”,然后程序退出。如何无异常运行脚本?
    • 对我来说,我们定义的类型似乎正在做它应该做的事情。如果您添加多个具有相同值的“dom”属性,则该错误正是您应该期望看到的错误。确保在添加顶点之前检查“dom”是否存在。如果它已经存在,则不要再次添加该顶点。
    • 我想分布式使用titan。如果我在插入之前检查顶点是否存在,那么它可能会遇到竞争条件问题。另外,我想知道检查存在的最快方法是什么,我使用 g.V.has('dom', 'def.com'),它非常昂贵。
    • 如果不同线程中的两个事务尝试插入相同的顶点,您应该会遇到事务失败。 g.V('dom','def.com')g.V.has('dom','def.com') 从 gremlin 的角度编译为图形查询 (github.com/tinkerpop/gremlin/blob/…),假设涉及索引。既然你已经索引了dom,你不应该以顶点扫描结束。
    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 2013-09-24
    • 2014-01-17
    • 2015-02-21
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多