Самый подходящий способ использования Neo4j из Python в 2015 году

Я использую последнюю версию сообщества Neo4j (2.2.0-M03) для хранения своих графиков. Я заинтересован в доступе к нему из Python. Согласно официальной документации Neo4j, существует несколько альтернатив.

Из того, что я понял, проверив документы, немного поигравшись и проверив python">этот пост, py2neo — единственный, кто поддерживает Neo4j 2 (и ярлыки). Однако, если я хочу написать и запустить определенные алгоритмы на Neo4j, я должен использовать Gremlin через Bulbs, который, однако, не поддерживает Neo4j 2.

Теперь я хотел бы использовать некоторые пользовательские алгоритмы, которых в настоящее время нет в Neo4j, например активацию распространения. Является ли написание алгоритмов непосредственно в Neo4j на Java и запуск их из Python с использованием шифровальных команд через py2neo единственной альтернативой? Я что-то пропустил?

Ваше здоровье

PS. Я хотел опубликовать ссылки на все программное обеспечение, которое я привел, но, к сожалению, мне нужно как минимум 10 репутации, чтобы опубликовать более 2 ссылок...


person redsk    schedule 30.01.2015    source источник
comment
Можете ли вы описать, что вы подразумеваете под алгоритмами записи? Какой вид? Да, в общем, py2neo — это то, что нужно, но будет сложно дать вам совет, если вы не укажете, что вы пытаетесь сделать.   -  person FrobberOfBits    schedule 30.01.2015
comment
Спасибо @FrobberOfBits, я отредактировал вопрос. Я хотел бы использовать собственные алгоритмы, например активацию распространения.   -  person redsk    schedule 30.01.2015
comment
Это было бы так. Является ли написание алгоритмов непосредственно в Neo4j на Java и запуск их из Python через http единственной альтернативой?   -  person Michael Hunger    schedule 01.02.2015
comment
@MichaelHunger, если ваша формулировка - настоящий вопрос, то ответ прост - нет. :)   -  person FrobberOfBits    schedule 02.02.2015
comment
Может быть, @redsk предлагает использовать пакет python, например, с networkx?   -  person user305883    schedule 27.11.2015


Ответы (1)


Это очень сложный вопрос, кажется, вам нужно руководство по дизайну, а не быстрый вопрос neo4j. В зависимости от того, как вы используете активацию распространения, может быть лучше не изменять сервер, но я не могу сказать, потому что, вероятно, задействован ваш вариант использования. Имейте в виду, что вы всегда можете использовать neo4j в качестве хранилища графов, а затем поместить концепции более высокого уровня, такие как распространение активации, в код вашего приложения, а не на сервер.

Вопрос предполагает, что я думаю, что вы хотите поместить его на сервер. Итак, какие есть варианты? В целом, вы можете написать серверный плагин и расширить RESTful API (что не поможет вам с py2neo). С другой стороны, я не думаю, что определение вашей собственной функции шифрования поддерживается прямо сейчас, поэтому вы не обязательно можете изменить сам язык шифрования, а затем использовать привязки py2neo для использования новой причудливой функции шифрования. Совет, данный в другом месте, предполагает, что вы, возможно, захотите рассмотреть неуправляемое расширение для реализации активации распространения. Если бы вы сделали это, еще раз, я не вижу, как py2neo поможет вам.

В краткосрочной перспективе, я думаю, вам следует подумать о том, чтобы НЕ модифицировать сам neo4j, а вместо этого добавить активацию распространения в код Python, который, возможно, использует py2neo. В долгосрочной перспективе, если neo4j придумает способ выполнения зашифрованных пользовательских функций (UDF), которые, как я понимаю, находятся в дорожной карте разработки (возможно?), то это может быть лучшим вариантом, но я бы не рекомендовал его без многих больше требований и деталей.

person FrobberOfBits    schedule 30.01.2015
comment
Спасибо @FrobberOfBits. На самом деле я пытался выяснить, какую альтернативу я могу принять во внимание при разработке хорошего дизайна для своего приложения. Неуправляемые расширения Neo4j — действительно хорошее предложение. - person redsk; 03.02.2015
comment
Возможной альтернативой может быть использование графического языка Gremlin (вероятно, через tinkerpop3 (на самом деле не готов для Neo4j 2.2). В этом случае p2neo поддерживает вызов скрипта Gremlin через конкретное расширение. - person redsk; 03.02.2015
comment
Наконец, как вы предложили, активация распространения (или другие алгоритмы графа) может быть реализована непосредственно в Python (хотя, возможно, py2neo). Однако в этом случае я, вероятно, ожидал бы, что производительность немного ухудшится, поскольку каждый шаг алгоритма будет подразумевать передачу данных туда и обратно из Neo4j в приложение Python. - person redsk; 03.02.2015
comment
Я не знаком с вашим приложением, поэтому не могу сказать наверняка, но в целом не рекомендую преждевременную оптимизацию. Выполнение действий вне БД также изолирует вас от изменений API БД. В любом случае вы будете писать дополнительный python, поскольку, если вы пойдете по маршруту неуправляемого расширения (поместив свой алгоритм в БД), вам все равно придется каким-то образом взаимодействовать с этим новым алгоритмом, что означает больше python, чем py2neo дает вам из коробки. - person FrobberOfBits; 04.02.2015