Обновление:
С тех пор как я впервые написал это, ответ изменился.В базе данных теперь хранится точное количество всех узлов, а также количество по меткам.В отличие от большинства баз данных, это не эвристика, эти счетчики синхронизируются с остальной частью хранилища данных.
Это означает, что вы можете получить точное количество узлов за 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, если вы обнаружите какие-либо ошибки или подумаете о других улучшениях!