Bulbflow: разница между neo4jserver Graph и neo4jserver Neo4jclient

Теперь я пытаюсь узнать, как подключиться к серверу Neo4j и запускать запросы Cypher, используя Bulbflow from Python. И то, что я не понимаю, – это разница между двумя возможностями подключения к серверу neo4j:

1) График

from bulbs.neo4jserver import Graph g = Graph() 

2) Neo4jClient

 from bulbs.neo4jserver import Neo4jClient client = Neo4jClient() 

Может ли кто-нибудь объяснить концептуальную разницу здесь? И каким образом лучше выбрать, хочу ли я выполнить (довольно много) запросов Cypher к серверу и, в конечном счете, параллельно?

PS: У меня недостаточно репутации, чтобы создать тег «bulbflow» для этого вопроса 🙂

One Solution collect form web for “Bulbflow: разница между neo4jserver Graph и neo4jserver Neo4jclient”

Bulbs поддерживает три разных сервера баз данных графа – Neo4j Server , Rexster , а теперь и Titan .

Код, специфичный для каждого серверного сервера, содержится в его собственном пакете Python (каталог). Вы должны увидеть каталоги для: neo4jserver, rexster, titan:

Neo4jClient – это низкоуровневый адаптер для Neo4j Server – вам обычно не нужно использовать это напрямую, если вы не делаете пользовательские вещи – вместо этого используйте класс высокого уровня Graph.

См. Документы Bulbs для …

В руководстве Bulst Quickstart приведены примеры использования интерфейса Graph :

Тем не менее, ваши объекты Bulbs всегда имеют доступ к клиенту низкого уровня, когда вам это нужно с помощью _client var.

Lightbulb – это пример приложения, которое я создал, чтобы показать, как использовать и настраивать модели Bulbs – это движок блога Python, который использует Git для управления версиями и базу данных графа для сохранения.

Lightbulb изначально был предназначен для использования со свободным Neo4j Heroku Add On , но оба луковицы и лампочка часто используют Gremlin , а Neo4j Heroko Add On больше не предлагает Гремлин в бесплатной версии.

Файл модели Lightbulb содержит сильно настраиваемую модель Entry и собственный класс Graph В модели Entry используется клиент низкого уровня:

Как вы можете видеть в модели ввода, у меня есть доступ к клиенту низкого уровня с помощью _client var, и я использую его для получения скрипта Gremlin из библиотеки scripts а затем снова для выполнения сценария Gremlin.

Вот код save_blog_entry Gremlin, используемого моделью Entry:

ПРИМЕЧАНИЕ. В файле есть только один скрипт Гремлина, но он большой, содержит несколько операций, и все транзакция завершена. Помещение всех операций в один скрипт Гремлина позволяет делать все в одном транзакционном запросе, вместо того чтобы иметь накладные расходы на отправку нескольких запросов на сервер.

Если вы не делаете что-то вроде настройки модели, вы обычно должны использовать объект scripts объект gremlin хранящийся в объекте graph :

 >>> from bulbs.neo4jserver import Graph >>> g = Graph() >>> script = g.scripts.get('some_script') >>> params = dict(name="James", city="Dallas") >>> g.gremlin.execute(script, params) 

См. Лампочки Neo4j Gremlin docs …

Аналогично, когда вы хотите выполнить запрос Neo4j Cypher, используйте объект cypher хранящийся на объекте graph .

Существует три метода Cypher (к сожалению, они еще не зарегистрированы на веб-сайте):

  1. g.cypher.query() : используется при возврате списка узлов / отношений – он будет инициализировать их для объектов.
  2. g.cypher.table() : используется при возврате данных таблицы Cypher.
  3. g.cypher.exectue() : используется при возврате произвольных данных – он возвращает общий объект Response .

Вы можете посмотреть исходный код, чтобы узнать, как они работают …

Вот несколько примеров использования метода Cypher query () (запрос просто возвращает отношение):

 >>> from bulbs.neo4jserver import Graph >>> g = Graph() >>> query = "start a = relationship({eid}) return a" >>> params = dict(eid=123) >>> edges = g.cypher.query(query, params) 

Метод запроса автоматически инициализирует элементы для их типа. Если вы создали элемент как настраиваемую модель, Bulbs попытается инициализировать его определенным типом, в противном случае по умолчанию будет использоваться общий Vertex или Edge .

Обратите внимание, что метод Bulbs Cypher query () возвращает итератор.

Вы можете перебрать итератор …

 >>> from bulbs.neo4jserver import Graph >>> g = Graph() >>> query = "start a = relationship({eid}) return a" >>> params = dict(eid=123) >>> edges = g.cypher.query(query, params) >>> for edge in edges: print edge 

… или конвертировать его в список …

 >>> from bulbs.neo4jserver import Graph >>> g = Graph() >>> query = "start a = relationship({eid}) return a" >>> params = dict(eid=123) >>> edges = g.cypher.query(query, params) >>> list(edges) 

… или получить следующий пункт …

 >>> from bulbs.neo4jserver import Graph >>> g = Graph() >>> query = "start a = relationship({eid}) return a" >>> params = dict(eid=123) >>> edges = g.cypher.query(query, params) >>> edges.next() 

Пожалуйста, дайте мне знать, если у вас есть еще вопросы.

  • Neo4j ImpermanentDatabase в python unittests
  • Как преобразовать типы возвратов neo4j в типы python
  • Самый быстрый способ выполнить массовое добавление / вставку в Neo4j с помощью Python?
  • Как установить JPype на OS X Lion для использования с Neo4j?
  • Python networkx и настойчивость (возможно, в neo4j)
  • Простой учебник для Neo4J и его использование с помощью django + python
  • AttributeError: объект «Graph» не имеет атрибута «cypher» при миграции данных из Postgress в Neo4j (база данных графиков)
  • Neo4J / py2neo - запрос на основе курсора?
  • Python - лучший язык программирования в мире.