【问题标题】:How to overwrite vertices ID in Titan Database?如何覆盖 Titan 数据库中的顶点 ID?
【发布时间】:2013-06-28 03:51:24
【问题描述】:

我正在使用一个生成对象Node 的框架,并且它们已经分配了一个ID。现在需要将它们转换为在框架中控制的具有相同 ID 的 Titan 顶点(使用 node.id 访问)

public long addNode(Node node) {    
   TitanVertex vertex = (TitanVertex) g.addVertex(null);
   g.commit();

   vertex.setProperty(ID, node.id);
   vertex.setProperty(TYPE, node.type);
   vertex.setProperty(VERSION, node.version);
   vertex.setProperty(TIME, node.time);
   vertex.setProperty(DATA, node.data);
   ...

错误:

java.lang.IllegalArgumentException: Name is reserved: id

但似乎不允许。我应该使用一些假属性来模仿辅助身份吗? Titan有办法做到这一点吗?

谢谢!

【问题讨论】:

    标签: nosql neo4j titan


    【解决方案1】:

    实际上很少有图形数据库允许您设置元素标识符。无论您使用的是 Neo4j、OrientDB、Titan 等,它们都倾向于拥有自己的 ID 系统。TinkerGraph 确实是唯一允许 ID 分配的蓝图实现。

    如果您想保留您的 ID,则只需将其重命名为其他名称即可。也许您可以使用“iid”来代替“id”。为了使事情更透明,从编程的角度来看,您可以考虑使用 IdGraph 包装器,它可以让您执行以下操作:

    gremlin> base = TitanFactory.open('/tmp/titan-berkley')
    ==>titangraph[local:/tmp/titan-berkley]
    gremlin> g = new IdGraph(base, true, false)            
    ==>idgraph[titangraph[local:/tmp/titan-berkley]]
    gremlin> g.addVertex(45)  
    ==>v[45]
    gremlin> g.v(45)
    ==>v[45]
    

    您可以看到 IdGraph 允许它看起来好像您正在分配元素 id 本身。在幕后,它实际上只是使用键索引。

    【讨论】:

    • 不错的答案!谢谢!对于我来说,唯一的问题是我想在有和没有关键索引的情况下执行基准测试。它索引数据库中的顶点查找或仅索引自定义 id x 真实 id 之间的分配?再次感谢
    • 如果您需要在没有键索引的情况下工作,请使用“id”以外的名称(例如“iid”)创建属性名称。您没有提及您的基准是什么,但是如果没有关键索引,您可能会看到一些相当糟糕的结果,因为“iid”的查找最终会成为线性扫描。我假设你问的问题与泰坦如何存储关键索引本身有关。如果是这样,此链接可能会有所帮助:github.com/elffersj/delftswa-aurelius-titan/blob/master/SA-doc/…
    • 如果您还想在边上自定义 id,IdGraph(base, true, true) 那么您可能需要在之前创建 __id 属性,我需要它在 0.3.0 github.com/thinkaurelius/titan/issues/179
    • 我也在寻找这个解决方案。当我们手动将 Id 分配给顶点时,IdGraph 会有任何性能问题吗?
    • IdGraph 基本上只是在幕后进行,使用键索引来查找顶点。因此,当您执行 g.getVertex("id123") 时,它知道引用“vid”,从而避免您输入它。
    【解决方案2】:

    @Stephen,不能说 gremlin 终端,但通过 Titan Java API 尝试过,但没有成功。 即使在 id 图中创建顶点时传递了 id,也会将默认 id 分配给节点。

    【讨论】:

    • 我有同样的问题,TitanGraph 实例不能作为base 传递给IdGraph :/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2013-09-04
    相关资源
    最近更新 更多