如何从Python获取Neo4j图数据库的节点数量?
我想用Python获取Neo4j图数据库中的节点数量,但找不到任何方法或属性来做到这一点。
有没有人知道我该如何获取这个信息?
其他Python库,比如NetworkX,有方法可以获取这些信息。
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2])
>>> len(G)
3
3 个回答
如果你想要进行一个REST API查询,这个回答可以帮你大致了解“正在使用的节点ID数量”。
另外(也许可以通过Python来执行这个查询),你可以
计算节点的总数
然后通过默认的neo4j浏览器界面在 http://localhost:7474/browser/
执行一个 CYPHER
查询来返回这个总数。具体的命令如下:
MATCH (`n: *`) RETURN count(*)+" nodes" as total;
希望这对你有帮助。
更新:
自从我第一次写这个内容以来,答案已经发生了变化。现在,数据库可以准确记录总节点数以及按标签分类的节点数。与大多数数据库不同,这些计数器并不是通过估算得出的,而是与数据存储的其他部分保持事务性同步。
这意味着你可以在O(1)的时间内从Neo4j获取准确的节点数量。你可以通过询问Cypher来获取这些信息:
MATCH (n) RETURN count(*)
原始回复:
在neo4j数据库中获取节点数量有两种方法。第一种方法是实际遍历所有节点,并进行计数。
第二种方法是使用数据库内核提供的“正在使用的节点ID数量”统计数据,这个数据不保证完全准确,但至少会是正在使用的节点数量。在高负载的数据库中,这个数字会更高,因为它还包含那些尚未被回收的已删除节点的ID。
第一种方法相对准确(取决于你遍历时创建或删除了多少节点),但可能会非常慢。第二种方法可能会有很大偏差,但它是O(1)的操作。
目前你没有太多选择,因为第一种方法是唯一有效的。它并没有得到官方支持,所以现在这样做看起来有点不太干净:
from neo4j import GraphDatabase
db = GraphDatabase('..')
node_count = sum(1 for _ in db.getAllNodes().iterator())
我已经为此添加了两个问题,一个是为了增加对管理信息访问的支持(例如,支持第二种方法),另一个是为了增加对这些使用案例的支持:
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问题中添加一个工单!