我正在尝试使用Python获取Neo4j图形数据库的节点数,但我找不到任何方法或属性来执行此操作。
有人如何获得这些信息?
像NetworkX这样的其他Python软件包有一种获取此信息的方法。
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2])
>>> len(G)
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数”值。