如何从 java 中获取 Neo4j 图形数据库的节点数,我们可以从磁盘存储和重用 graphdb 吗?

Posted

技术标签:

【中文标题】如何从 java 中获取 Neo4j 图形数据库的节点数,我们可以从磁盘存储和重用 graphdb 吗?【英文标题】:How can I get the number of nodes of a Neo4j graph database from java and can we store and reuse graphdb from disk? 【发布时间】:2013-02-13 09:52:59 【问题描述】:

我刚开始研究 neo4j 以将其用于我的社交网络相关项目。在此期间,我遇到了以下代码:

https://github.com/neo4j/neo4j/blob/1.9.M04/community/embedded-examples/src/main/java/org/neo4j/examples/EmbeddedNeo4jWithIndexing.java

在浏览它时(请参阅上面的代码链接),我很想知道如何获得添加到给定graphDb 的节点总数。有没有办法使用graphDbnodeIndexreferenceIndex 或其他任何方法找到它(节点总数)?如果是,如何?

我还需要帮助知道,如何将 graphdb 存储到磁盘上的任何给定路径?如何加载这个存储的 graphdb 并对其执行操作,如搜索节点/关系等?

(执行上述代码时,在给定的DB_PATH 创建了几个文件,如*.db、*.id、*.keys 等。所有这些文件有什么用?这些文件中是否包含节点创建?如果是,我们如何使用它们?)

我们如何从网络界面访问此graphDb,例如http://localhost:7474/webadmin/ 的仪表板或http://localhost:7474/db/data/ 的数据?

如果您需要任何具体信息来帮助我,请告诉我..

谢谢,尼丁。

【问题讨论】:

【参考方案1】:

要开始使用 Neo4j Embedded 和 Java API,请参阅:

http://docs.neo4j.org/chunked/milestone/tutorials-java-embedded.html

获取正确的节点和关系计数:

IteratorUtil.count(GlobalGraphOperations.at(gdb).getAllNodes())
IteratorUtil.count(GlobalGraphOperations.at(gdb).getAllRelationships())

要使用集成的 neo4j 服务器访问嵌入式图形数据库,请参阅 http://docs.neo4j.org/chunked/milestone/server-embedded.html

【讨论】:

【参考方案2】:

呸!对于一个条目,这些问题很多......

要获取数据库中节点和关系的总数,请使用:

NodeManager nodeManager = ((GraphDatabaseAPI) graphDb).getDependencyResolver().resolveDependency(
            NodeManager.class);

long currentRelationships = nodeManager.getNumberOfIdsInUse(Relationship.class);
long currentNodes = nodeManager.getNumberOfIdsInUse(Node.class);

要更改图形数据库的路径,只需将路径传递给 GraphDatabaseFactory().newEmbeddedDatabase 方法。在您提到的示例中,您可以简单地设置 DB_PATH 例如到/home/youruser/neo4j

要通过 webadmin 访问您的数据库,请下载 neo4j,更改文件 conf/neo4j-server.properties 中的 org.neo4j.server.database.location 属性并将其指向您的数据库路径并启动服务器。

【讨论】:

非常感谢@James。关于GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH ),如果给定路径已经存在,这会加载数据库吗?如果没有,我们如何加载它而不是创建一个新的?在给定路径创建的各种文件是什么?您能否参考我可以找到此类特定文档/教程的任何链接(http://docs.neo4j.org 除外)? 我们在代码中可以看到,graphDb 中添加了 100 个(+1 引用节点)节点。但是,为什么我得到currentRelationships=300currentNodes=304 作为输出? 您将获得 304 个节点,因为您运行了该程序 3 次...每次运行添加 101 个节点加上一个参考节点 = 304。;-)

以上是关于如何从 java 中获取 Neo4j 图形数据库的节点数,我们可以从磁盘存储和重用 graphdb 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Neo4j Graph 中获取每个节点的不同中心性索引?

r 直接从Neo4j REST API获取图形数据到R.对于R igraph用户有用。

Neo4j - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?

centos 安装neo4j图形数据库

Neo4j 图形数据库 java.lang.OutOfMemoryError:Java 堆空间。 Neo4j 图数据库

我如何在 Neo4j 图形数据库中检索关系