如何从Python获取Neo4j图形数据库的节点数?

时间:2011-11-16 22:37:16

标签: python neo4j networkx

我正在尝试使用Python获取Neo4j图形数据库的节点数,但我找不到任何方法或属性来执行此操作。

有人如何获得这些信息?

像NetworkX这样的其他Python软件包有一种获取此信息的方法。

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

3 个答案:

答案 0 :(得分:19)

更新:

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

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

MATCH (n) RETURN count(*)

原始回复:

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

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

Alt one相当精确(取决于迭代时创建/删除的数量),但可能超级慢。 Alt 2可能是关闭的,但是是O(1)操作。

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

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

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

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问题添加一张票!

答案 1 :(得分:3)

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

  

计算节点总数

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

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

希望这有帮助。

答案 2 :(得分:0)

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