我正在尝试使用python获取Neo4j图形数据库的节点数,但是我没有找到任何方法或属性来实现这一点。
有人能告诉我这些信息吗?
其他的python包(如networkx)有一个方法来获取这些信息。
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2])
>>> len(G)
3
最佳答案
更新:
自从我第一次写这个,答案就变了。数据库现在可以精确地统计总节点数,也可以按标签统计。与大多数数据库不同,这不是启发式的,这些计数器在事务上与数据存储的其余部分保持同步。
这意味着您可以在0(1)时间内从NEO4J获得精确的节点计数。您可以通过询问Cypher来访问它们:
MATCH (n) RETURN count(*)
原始回复:
有两种方法可以获取NEO4J数据库中的节点数。第一种方法是实际遍历所有节点,并对它们进行计数。
备选方案二是使用数据库内核提供的“正在使用的节点ID数”统计数据,这不保证是准确的,但至少是正在使用的节点数。在高负载数据库中,它将更高,因为它还包含尚未回收的已删除节点的ID。
alt one是相当精确的(取决于迭代时创建/删除的数量),但速度可能非常慢。alt two可能离我们很远,但它是一个o(1)操作。
您目前没有太多选择,因为只有alt one有效。它没有得到官方支持,所以今天这样做看起来有点脏:
from neo4j import GraphDatabase
db = GraphDatabase('..')
node_count = sum(1 for _ in db.getAllNodes().iterator())
我为此添加了两个问题,一个是添加对访问管理信息的支持(例如,支持alt two方法),另一个是添加对这些用例的支持:
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嵌入时遇到任何其他问题,请现在让我们看看,如果您发现了任何错误或想到了任何其他增强功能,请为GitHub问题添加一张罚单!