我想将节点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(),程序都需要很长时间。 感谢
答案 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);