Подтвердить что ты не робот

Neo4j и ORM (Hibernate)

Я использую RDBMSes со времен колледжа и действительно борюсь с базовыми концепциями баз данных NoSQL... но я думаю, что их концепция действительно классная.

Я считаю, что понимаю следующее (пожалуйста, поправьте меня, если я ошибаюсь, потому что они играют в мой вопрос здесь!):

  • NoSQL не является официальной спецификацией; это концепция, лежащая в основе новой "породы" баз данных, которые не являются реляционными и не используют SQL
  • Таким образом, каждая система NoSQL отличается (например, MongoDB является JSON-ориентированной)

Если это так, вернем наше внимание к базе данных Neo4j, основанной на графике.

После просмотра сайта и PDF кажется, что Neo4j - это не только база данных, но также предоставляет Java API, который существенно заменяет необходимость в традиционных инструментах ORM, таких как Hibernate.

Итак, мой последний вопрос - это фактически запрос на разъяснение/подтверждение этого последнего утверждения, в частности:

  • Правда ли, что если мой бэкэнд полностью основан на Neo4j, мне не нужно было бы спящий режим (который является моим обычным ORM)? Являются ли эти два API взаимоисключающими, или есть какой-то способ получить выгоду от использования обоих из них?

Спасибо заранее!

4b9b3361

Ответ 1

AFAIK, Hibernate - это структура объектно-реляционного сопоставления, которая поддерживает только SQL-подобные базы данных. Таким образом, вам не понадобится/не сможет использовать его, если вы используете Neo4j, вместо этого вы бы использовали API Neo4j.

Но ничто не мешает вам использовать как Neo4j, так и базу данных SQL, поэтому смешивает Hibernate и API neo4j (скорее всего, будет хранить/запрашивать разные объекты в вашем проекте).

Вы проверили основные примеры, приведенные на веб-сайте Neo4j, такие как http://docs.neo4j.org/chunked/snapshot/tutorials-java-embedded-hello-world.html?

EDIT:

Вы правы, NoSql не определяет определенный стандарт. Вы можете взглянуть на это (короткое) введение: http://martinfowler.com/articles/nosql-intro.pdf

Ответ 2

Я использую RDBMSes со времен колледжа и действительно борюсь с базовыми концепциями баз данных NoSQL... но я думаю, что их концепция действительно классная.

База данных графов, например Neo4j, выражает домен в терминах вершин, связанных с другими вершинами с ребрами. Ребро содержит начальную и конечную вершины. Каждая вершина и ребро могут иметь карту свойств, пары ключ-значение, которые могут использоваться для хранения дополнительной информации о вершинах и ребрах. Конечно, вы можете расширить это с помощью своего собственного домена, но все просто начать.

Чтобы увидеть эти концепции в действии, я рекомендую Руководство по началу работы для Gremlin. Gremlin является языком, специфичным для домена, для перемещения графов, которые работают с Neo4j и несколькими другими базами графов. Gremlin - это база данных графов, с которой SQL является реляционной базой данных.

Я не могу рекомендовать Гремлин достаточно сильно, пока вы узнаете о графиках. Всего за несколько минут вы можете работать и работать над учебниками Gremlin. Gremlin предоставит вам REPL, который позволит вам экспериментировать с небольшими графиками и получать немедленную обратную связь. Даже если вы не используете Gremlin в своей производственной системе, знания, полученные в REPL, помогут вам проверить ваши проекты и могут служить предвестником более строгих модульных испытаний и разработки.

Если вы предпочитаете работать непосредственно с API-интерфейсом Neo4j, их

Ответ 3

Вместо Hibernate я бы посмотрел http://www.springsource.org/spring-data/neo4j, который поддерживается аннотацией, поддерживается Spring и работает очень хорошо. С этим будет работать?

Ответ 4

Как сказал @assylias, вы не сможете использовать Hibernate в качестве ORM для графического DB, такого как Neo4J, но есть и другие решения.

В первую очередь вы можете использовать Neo4J api, чтобы пересечь график и получить Вершины и Края, считайте, что это не ORM, поэтому он не будет отображать вершины и/или ребра, которые вы получаете, в свои пользовательские объекты, такие как Hibernate.

Это может быть решение, но в итоге вы получите код, написанный специально для Neo4J, который имеет свой собственный api, отличный от других графических баз данных (например, OrientDB) и продолжения разработки, вам, вероятно, понадобится больше гибкий способ извлечения данных и сопоставление результатов с вашими объектами, поэтому я предлагаю взглянуть на стек Tinkerpop (http://tinkerpop.com/), который в основном серия java apis и абстракции для работы с базами данных графов.

Начните искать Blueprint (http://blueprints.tinkerpop.com), который является абстракционным слоем над основными концепциями графа DB, поэтому вы можете писать код, который не зависит от конкретного поставщика БД, а затем взять посмотрите на Frames (http://frames.tinkerpop.com/) ORM как фреймворк, чтобы сопоставлять объекты с вершинами и ребрами, а Gremlin (http://gremlin.tinkerpop.com/) - язык, который легко запрашивает граф.

Ответ 5

Начиная с версии 4 бета, Hibernate OGM добавил поддержку Neo4j:

Hibernate OGM теперь может работать с Neo4j, полностью транзакционным свойством графической базы данных.

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

Hibernate OGM отображает объект как node, где атрибуты объект становится свойством node. На данный момент мы добавляем некоторые дополнительные свойства для преобразования node в объект но мы планируем заменить их, используя механизм ярлыков, добавленный в последние версии Neo4j.

Связь между двумя узлами представляет собой связь между двух сущностей. В настоящее время двунаправленная ассоциация требует двух но мы собираемся изменить это, так как Neo4j может перемещаться отношения в обоих направлениях.

Интеграция с Neo4j является экспериментальной, но мы планируем улучшив его в ближайшее время. Пожалуйста, сообщите нам, что вы думаете или поможете нам улучшая его.

http://planet.jboss.org/post/hibernate_ogm_4_0_0_beta4_is_out

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

Ответ 6

Считаете ли вы использование Ferma? Это ORM, специфичный для баз данных Graph. Он поддерживает все основные бренды, включая Neo4J. Вот описание из проекта.

Ferma - это надежная структура, которая принимает роль, подобную Библиотека объектно-реляционной модели (ORM) для традиционных баз данных. Ferma часто упоминается как библиотека объектной модели (OGM) и карты Java-объекты к элементам в графе, например Vertex или Edge. В short это позволяет определять схему с использованием интерфейсов java и классы, которые обеспечивают уровень абстракции для взаимодействия с лежащий в основе граф.