neo4j如何设置除setproperty之外的节点id

时间:2014-04-24 23:53:34

标签: neo4j

我想将节点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就是我。 对于大型数据集,如果每次调用getProperty(),程序都需要很长时间。 感谢

2 个答案:

答案 0 :(得分:1)

正如@RaduK所指出的,neo4j设置了节点本身的id,并且不允许用户覆盖此行为。也许他们将来会做些什么。但是,如果您正在考虑在系统中使用neo4j生成的id,neo4j会在其页面上发出警告。

  

节点的id是唯一的,但请注意以下内容:Neo4j重用它   删除节点和关系时的内部ID,这意味着   以这种方式引用它们是不好的做法。相反,使用应用程序   生成的ids。

所以不要在你的系统中使用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有一个内部缓存系统,人们通常将其称为热缓存。这意味着您的查询只会在第一次运行时花费时间。从那时起,如果您重复尝试相同的查询,查询将会非常快速。

答案 1 :(得分:0)

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

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