Как я могу получить количество узлов графовой базы данных Neo4j от Python? - PullRequest
14 голосов
/ 17 ноября 2011

Я пытаюсь получить число узлов графовой базы данных Neo4j, использующей Python, но я не нахожу никакого метода или свойства, чтобы сделать это.

Кто-нибудь, как я могу получить эту информацию?

Другие пакеты Python, такие как NetworkX, имеют метод для получения этой информации.

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

Ответы [ 3 ]

21 голосов
/ 17 ноября 2011

Обновление:

С тех пор как я впервые написал это, ответ изменился.В базе данных теперь хранится точное количество всех узлов, а также количество по меткам.В отличие от большинства баз данных, это не эвристика, эти счетчики синхронизируются с остальной частью хранилища данных.

Это означает, что вы можете получить точное количество узлов за O (1) времени из Neo4j.Вы получаете доступ к ним, спрашивая Сайфера:

MATCH (n) RETURN count(*)

Исходный ответ:

Существует два способа получить количество узлов в базе данных neo4j.Первый - это итерация по всем узлам и их подсчет.

Альтернатива два - использовать статистику «количество используемых идентификаторов узлов», предоставляемую ядром db, которая не гарантирует точности, но будет по крайней мере количество узловв использовании.В высоконагруженной базе данных она будет выше, поскольку она также содержит идентификаторы удаленных узлов, которые еще не были восстановлены.

Один из них достаточно точен (в зависимости от того, сколько было создано / удалено во время итерации), но может быть очень медленным.Alt два потенциально не подходит, но это операция 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-Embedded, добавьте заявку на проблемы с GitHub, если вы обнаружите какие-либо ошибки или подумаете о других улучшениях!

3 голосов
/ 19 декабря 2013

В качестве альтернативы (может быть в состоянии выполнить этот запрос из Python), вы можете

общее количество узлов

и вернуть его, выполнив запрос CYPHER через интерфейс браузера по умолчанию neo4j @ http://localhost:7474/browser/. Точная команда следует:

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

Надеюсь, это поможет.

0 голосов
/ 29 декабря 2013

Если вы хотите сделать запрос REST API, этот ответ даст вам приблизительное значение числа используемых идентификаторов узлов.

...