【问题标题】:Gremlin-server: does vertexIdManager=ANY generates id collisions?Gremlin-server:vertexIdManager=ANY 会产生 id 冲突吗?
【发布时间】:2023-03-19 09:10:01
【问题描述】:

我需要在 gremlin-server 中配置 tinkergraph-empty.properties 文件,以便使用“ANY”逻辑生成 ID

gremlin.tinkergraph.vertexIdManager=ANY
gremlin.tinkergraph.edgeIdManager=ANY
gremlin.tinkergraph.vertexPropertyIdManager=ANY

我用一个空数据库测试了这个配置:当我创建一些顶点时,我注意到 id 是用字符串表示的数字,数字不是连续的,这是否意味着会有 id 冲突?这背后的逻辑是什么?

我需要此配置,因为我需要我的本地 gremlin-server 与 Amazon Neptune 中的数据兼容,只有 ANY 与 Neptune id 兼容。我需要能够在 localhost gremlin-server 中加载 Neptune 的数据库内容以对其进行一些操作,然后将其传输回 Neptune 而不会出现问题。

我担心冲突,因为这会破坏数据,而当我的数据被破坏时也是我的项目。

【问题讨论】:

    标签: gremlin tinkerpop amazon-neptune tinkerpop3 gremlin-server


    【解决方案1】:

    您可能看不到顺序 ID 的原因是属性也有 ID,并且在 TinkerGraph 的情况下,从同一个池中获取。您也可以在本地使用 Gremlin 控制台查看此内容。

    gremlin> conf = new BaseConfiguration();[]
    gremlin> conf.setProperty("gremlin.tinkergraph.vertexIdManager","ANY");[]
    gremlin> conf.setProperty("gremlin.tinkergraph.edgeIdManager","ANY");[]
    gremlin> conf.setProperty("gremlin.tinkergraph.vertexPropertyIdManager","ANY");[]
    gremlin> g = TinkerGraph.open(conf).traversal()
    ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
    
    gremlin> g.addV('test')
    ==>v[0]
    gremlin> g.addV('test')
    ==>v[1]
    gremlin> g.addV('test').property('x',1)
    ==>v[2]
    gremlin> g.addV('test')
    ==>v[4]
    gremlin> g.V().has('x').properties('x').id()
    ==>3       
    

    2022/01/16 更新以解决 cmets 中的其他问题。

    使用g.io 加载的文件(JSON 或 GraphML)可以包含用户提供的 ID。除非 ID 已在使用中,否则这些将起作用。不允许使用重复的 ID,如果遇到任何问题都会引发错误。只有属性会在文件加载过程中自动获得 ID。

    【讨论】:

    • 这是有道理的。当我使用g.io() 加载数据库内容时,这个池是否“知道”最后一个数字可能不同,因为我添加了内容?
    • 我更新了答案以解决g.io 问题
    猜你喜欢
    • 1970-01-01
    • 2014-06-03
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多