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

Mar*_*Pou 15 python neo4j networkx

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

有人如何获得这些信息?

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

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

Jac*_*son 23

更新:

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

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

MATCH (n) RETURN count(*)
Run Code Online (Sandbox Code Playgroud)

原始回复:

有两种方法可以获得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())
Run Code Online (Sandbox Code Playgroud)

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

node_count = sum(1 for _ in db.nodes)
node_count = len(db.nodes)
Run Code Online (Sandbox Code Playgroud)

请点击这些问题:

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

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

如果您遇到neo4j-embedded的任何其他问题,请立即告诉我们,如果您发现任何错误或想到任何其他增强功能,请为github问题添加一张票!