如何在neo4j中设置setProperty()以外的节点ID?

im9ewurl  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(151)

我想将节点ID设置为0,1,2,3,....,而不是setProperty()

Node[] newno = new Node[265214];
for (int i = 0; i < newno.length; i++) {
     newno[i] = db.createNode();
     System.out.println(newno[i].getId());
}

它显示以下大ID号:

996660
996661
996662
996663
996656
996657
996658
996659
996668
996669
996670

例如,当我想创建节点时,newno[i]的ID只是i。对于大型数据集,如果每个周期都调用getProperty(),它将减慢执行速度。实现这一点的更有效的方法是什么?

f4t66c6m

f4t66c6m1#

ID是由Neo4j自动分配的,您无法更改。如果需要,请尝试使用节点上的属性。

newno[i].setProperty("internal_id", i);
myss37ts

myss37ts2#

正如@RaduK所指出的,neo4j设置了节点的id,并且不允许用户覆盖这个行为。也许他们将来会这么做。但是,如果你正在考虑在你的系统中使用neo4j生成的id,neo4j会在他们的页面上发出警告。
节点的ID是唯一的,但请注意以下事项:当节点和关系被删除时,Neo4j重用它的内部id,这意味着用这种方式引用它们是不好的做法,而是使用应用程序生成的id。
所以不要在你的系统中使用neo4j的id。
也就是说,你最关心的是每次使用属性都会导致延迟。在Neo4J 2.x中,他们给予你一个选项,在你的属性上设置一个索引,这样遍历就更快了。下面是你如何做到这一点的。在你的代码中,你有GraphDatabaseService的对象,插入下面的代码:

try(Transaction transaction = graphDatabaseService.beginTx())
        {
            Schema schema = graphDatabaseService.schema();
            schema.indexFor(DynamicLabel.label("User")).on("internal_id").create();

            transaction.success();
        }

这段代码将告诉neo4j,从现在开始,您必须在属性“internal_id”上的所有“User”类型节点上创建并维护索引。
此外,neo4j有一个内部缓存系统,人们通常称之为热缓存。这意味着你的查询只在第一次运行时需要时间。从那时起,如果你重复尝试同一个查询,查询将很快。

相关问题