Neo4j и ORM (Hibernate) - PullRequest
       11

Neo4j и ORM (Hibernate)

15 голосов
/ 08 февраля 2012

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

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

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

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

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

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

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

Заранее спасибо!

Ответы [ 6 ]

9 голосов
/ 09 февраля 2012

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

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

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

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

Если вы предпочитаете работать напрямую с API Neo4j, их учебник по рамкам обхода должен помочь.

Правда ли, что если мой бэкэнд полностью основан на Neo4j, мне не понадобится Hibernate (который является моим обычным ORM)?

Поскольку вы новичок в Neo4j, я бы порекомендовал вам избегать ORM, пока вы сначала не поймете, что ORM должен сделать для вас. Посмотрите, сколько боли вы действительно испытываете, отображая результаты вашего запроса в свой домен. Если боль может быть уменьшена с помощью ORM, полезной может быть среда Spring-Data, упомянутая Питером.

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

7 голосов
/ 09 февраля 2012

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

5 голосов
/ 08 февраля 2012

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

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

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

РЕДАКТИРОВАТЬ:

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

3 голосов
/ 23 ноября 2013

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

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

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

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

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

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

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

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

2 голосов
/ 08 февраля 2012

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

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

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

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

0 голосов
/ 31 октября 2016

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

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

...