簡體   English   中英

如何從Python獲取Neo4j圖形數據庫的節點數?

[英]How can I get the number of nodes of a Neo4j graph database from Python?

我正在嘗試使用Python獲取Neo4j圖形數據庫的節點數,但我沒有找到任何方法或屬性來做到這一點。

有人如何獲得這些信息?

像NetworkX這樣的其他Python軟件包有一種獲取此信息的方法。

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

更新:

自從我第一次寫這篇文章以來,答案已經改變。 數據庫現在保留總節點的精確計數,以及按標簽計數。 與大多數數據庫不同,這不是啟發式算法,這些計數器在事務上與數據存儲的其余部分保持同步。

這意味着您可以從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問題添加一張票!

或者(可能能夠以某種方式從Python執行此查詢),您可以

計算節點總數

並通過默認的neo4j瀏覽器界面@ http://localhost:7474/browser/執行CYPHER查詢返回它。 精確的命令如下:

MATCH (`n: *`) RETURN count(*)+" nodes" as total;

希望這可以幫助。

如果您願意進行REST API查詢,那么這個答案將為您提供粗略的“使用中的節點ID數量”值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM