#ruby-on-rails #ruby-on-rails-3 #neo4j #graph-databases
#ruby-on-rails #ruby-on-rails-3 #neo4j #графические базы данных
Вопрос:
Приложение Rails 3, работающее на Postgresql, должно переключиться на базу данных graph, чтобы иметь возможность расширяться. Их много, и все они предлагают разные API, в основном REST.
Меня очень вдохновили выступления Эмиля Эйфрема, генерального директора NeoTechnologies, о том, чего можно достичь с помощью Neo4j. Должен признаться, я играл с этим, и это абсолютно то, что нам нужно, но есть несколько препятствий.
- REST API не является транзакционным.
- Приложения Rails 3 работают на ruby 1.9.2, но не на JRuby 1.5.3 или 1.6 для достижения собственного API.
Некоторые базы данных также управляются Java и предлагают REST API, поэтому их использование ничего не меняет. Какие-то другие для нас не вариант из-за лицензии, стоимости или отсутствия команды, стоящей за ними.
Я предполагаю, что я что-то упускаю, поэтому был бы признателен за любой совет, проницательность или консультацию о том, какие у нас есть варианты и что может нам пригодиться. Спасибо.
Комментарии:
1. Конечно. Используя REST API, вы не можете выполнить откат набора операций одновременно. Например, вы хотите удалить 3 узла, вы выполняете первый и второй запросы, но третий почему-то завершается неудачей, и вы не можете вернуть хранилище в состояние, в котором оно было до того, как вы начали, со словом «откат». Но этого можно достичь с помощью native API.
2. Это проблема. Вы сообщали об этой ошибке ребятам из neo4j? Я уверен, что они захотят это исправить.
3. Привет, да — REST и транзакции довольно сложно объединить. Прямо сейчас продолжается обсуждение того, как это можно сделать, см. lists.neo4j.org/pipermail/user/2011-May/thread.html#8363
4. @SrdjanPejic Это не ошибка, это просто вряд ли возможно. Любая реализация будет обходным путем, а не решением. Поскольку соединение отсутствует, REST API просто отправляет команды.
5. @Comptrol JRuby1.6 Rails 3 Neo4jrb (gem, предоставляющий собственный API)
Ответ №1:
Вы можете запустить Neo4jrb с Rails 3 на jruby 1.6, так что это не должно быть проблемой.
Чтобы запустить транзакционный (REST) API поверх этого, вы можете легко написать свой собственный плагин / расширение Neo4j-Server, которое также могло бы использовать Neo4jrb внутри, но предоставляет API, соответствующий вашему домену и менее подробный / разговорчивый, чем детализированный Neo4j-Server REST API. Это также должно быть проще в использовании для ваших клиентов, поскольку оно говорит в ваших терминах, словаре и вариантах использования.
В настоящее время мы работаем над созданием универсального (j) серверного расширения ruby, которое способно использовать опубликованный код и сделать его доступным в качестве новых конечных точек REST.
Комментарии:
1. Спасибо тебе, Майкл. Использование опубликованного кода звучит очень обнадеживающе.