我正在尝试使用 Python 获取 Neo4j 图形数据库的节点数,但我没有找到任何方法或属性来做到这一点。
有谁我怎么能得到这些信息?
其他 Python 包(如 NetworkX)有一种获取此信息的方法。
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2])
>>> len(G)
3
更新:
自从我第一次写这篇文章以来,答案已经改变了。数据库现在保留总节点的准确计数,以及按标签计数。与大多数数据库不同,这不是启发式的,这些计数器在事务上与数据存储的其余部分保持同步。
这意味着您可以在 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 问题添加票证!
或者(可能能够以某种方式从 Python 执行此查询),您可以
计算节点总数
CYPHER
并通过默认的 neo4j 浏览器界面 @执行查询来返回它http://localhost:7474/browser/
。准确的命令如下:
MATCH (`n: *`) RETURN count(*)+" nodes" as total;
希望这可以帮助。
如果您愿意进行 REST API 查询,此答案将为您提供粗略的“正在使用的节点 ID 数”值。