Rails 3 и графические базы данных

#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. Должен признаться, я играл с этим, и это абсолютно то, что нам нужно, но есть несколько препятствий.

  1. REST API не является транзакционным.
  2. Приложения 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. Спасибо тебе, Майкл. Использование опубликованного кода звучит очень обнадеживающе.