17

我正在尝试使用 Python 获取 Neo4j 图形数据库的节点数,但我没有找到任何方法或属性来做到这一点。

有谁我怎么能得到这些信息?

其他 Python 包(如 NetworkX)有一种获取此信息的方法。

>>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2])
>>> len(G)
3
4

3 回答 3

25

更新:

自从我第一次写这篇文章以来,答案已经改变了。数据库现在保留总节点的准确计数,以及按标签计数。与大多数数据库不同,这不是启发式的,这些计数器在事务上与数据存储的其余部分保持同步。

这意味着您可以在 O(1) 时间内从 Neo4j 获得准确的节点数。您可以通过询问 Cypher 来访问它们:

MATCH (n) RETURN count(*)

原回复:

有两种方法可以获取 neo4j 数据库中的节点数。第一个是实际遍历所有节点,并对它们进行计数。

备选方案二是使用 db 内核提供的“使用中的节点 ID 数”统计信息,它不保证准确,但至少是正在使用的节点数。在高负载数据库中,它会更高,因为它还包含尚未回收的已删除节点的 ID。

替代项是相当准确的(取决于您在迭代时创建/删除了多少),但可能非常慢。Alt 2 可能还有很长的路要走,但它是一个 O(1) 操作。

您目前没有太多选择,因为替代一是唯一有效的。它没有得到官方支持,所以今天这样做看起来有点脏:

from neo4j import GraphDatabase
db = GraphDatabase('..')
node_count = sum(1 for _ in db.getAllNodes().iterator())

我为此添加了两个问题,一个是添加对访问管理信息的支持(例如,支持 alt 2 方法),另一个是添加对这些用例的支持:

node_count = sum(1 for _ in db.nodes)
node_count = len(db.nodes)

在此处关注这些问题:

https://github.com/neo4j/python-embedded/issues/7

https://github.com/neo4j/python-embedded/issues/6

如果您在使用 neo4j-embedded 时遇到任何其他问题,请立即告诉我们,如果您发现任何错误或想到任何其他增强功能,请向 github 问题添加票证!

于 2011-11-16T23:24:38.970 回答
4

或者(可能能够以某种方式从 Python 执行此查询),您可以

计算节点总数

CYPHER并通过默认的 neo4j 浏览器界面 @执行查询来返回它http://localhost:7474/browser/。准确的命令如下:

MATCH (`n: *`) RETURN count(*)+" nodes" as total;

希望这可以帮助。

于 2013-12-19T07:36:00.443 回答
1

如果您愿意进行 REST API 查询,此答案将为您提供粗略的“正在使用的节点 ID 数”值。

于 2013-12-29T16:41:42.310 回答