Каково различие между основанными на графике базами данных и объектно-ориентированными базами данных?

Каково различие между основанными на графике базами данных (http://neo4j.org/) и объектно-ориентированные базы данных (http://www.db4o.com/)?

49
задан Andrey Agibalov 24 August 2011 в 09:31
поделиться

6 ответов

Я бы ответил по-другому: объектные и графовые базы данных работают на двух разных уровнях абстракции.

Основные элементы данных объектной базы данных - это объекты, как мы знаем их из объектно-ориентированного языка программирования.

Основными элементами данных графовой базы данных являются узлы и ребра.

Объектная база данных не имеет понятия (двунаправленного) ребра между двумя вещами с автоматической ссылочной целостностью и т.д. В графовой базе данных нет понятия указателя, который может быть NULL. (Конечно, можно представить гибриды.)

Что касается схемы, то схема объектной базы данных - это любой набор классов в приложении. Схема базы данных графов (неявная, по соглашению о том, что означают метки строк, или явная, путем объявления в виде моделей, как мы это делаем, например, в InfoGrid) не зависит от приложения. Это значительно упрощает, например, написание нескольких приложений для работы с одними и теми же данными с использованием базы данных графов вместо базы данных объектов, поскольку схема не зависит от приложения. С другой стороны, используя графовую базу данных, вы не можете просто взять произвольный объект и сохранить его.

Разные инструменты для разных задач, я думаю.

38
ответ дан 7 November 2019 в 11:52
поделиться

Как Уилл описывает с другой стороны, graphdb будет хранить ваши данные отдельно от классов и объектов вашего приложения. У graphdb также есть больше встроенных функций для работы с графами, очевидно - например, кратчайший путь или глубокие обходы.

Еще одно важное отличие состоит в том, что в graphdb, таком как neo4j, вы можете перемещаться по графу на основе типов и направлений отношений (ребер) без загрузки полных узлов (включая свойства / атрибуты узлов). Также есть возможность использовать neo4j в качестве бэкэнда для объекта db, по-прежнему имея возможность использовать все графические материалы, см .: jo4neo Этот проект имеет другой подход, который также может считаться объектом db поверх neo4j: neo4j.rb . Новый вариант - использовать Spring Data Graph , который предоставляет поддержку graphdb через аннотации.

Тот же вопрос был задан в комментариях к этой записи блога .

8
ответ дан 7 November 2019 в 11:52
поделиться

Существует много возможных подходов для этого, но обычно они используют некоторую комбинацию из следующих:

  • IP-диапазон, который вы подключаете от
  • вашего имени хоста
  • присутствие файлов cookie на вашем компьютере, оставленных сайтом после успешной аутентификации
  • последовательность пользователя-агента

Если у вас слишком много отличий от одного из ваших существующих доверенных соединений, компьютер считается ненадежным. Где линия проводится для «слишком много» - это компромисс между безопасностью и удобством.

-121--4746310-

Вы можете сделать это с помощью следующего понимания списка:

[mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]

На вашем примере:

>>> mylist=['A','B']
>>> newelement='X'
>>> [mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]
[['X', 'A', 'B'], ['B', 'X', 'A'], ['A', 'B', 'X']]
-121--1237337-

Из быстрого обзора обоих их веб-сайтов:

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

db4o использует сопоставление объектов - создается класс Java/C #, и для его сохранения в базе данных используется отражение.

neo4j имеет API явной манипуляции.

Neo4j казалось, на мой скромный взгляд, гораздо лучше взаимодействовать.

Вы также можете рассмотреть хранилище ключевых значений - вы можете сделать точно такую же базу данных произвольной формы с одним из них.

1
ответ дан 7 November 2019 в 11:52
поделиться

Я считаю, что getters и setters лучше способ программирования и его не только о вопросе кодирования конвенции. Никто не знает будущего, поэтому мы можем написать простую последовательность фоненумбер сегодня, но завтра нам, возможно, придется поставить «-» между кодом города и числом, в этом случае, если у нас есть метод getPhonenumber () определен, мы можем сделать такие благоустройства очень легко. Так что я могу себе представить, мы всегда должны следовать этому стилю кодирования для лучшей расширяемости.

-121--4116890-

Я использовал FFmpeg из приложения службы ASP.NET/Windows (.NET). Но в итоге я использовал командную строку, не разбирая консоль. С помощью этого - у меня был простой способ управления - обновления FFmpeg и выполнение нескольких преобразований на нескольких ядрах.

-121--838627-

Базы данных графов имеют небольшое подобие вероятности того, что они основаны на математической теории графов. С объектно-ориентированными базами данных, у вас есть уверенность, что он не основан на ничего вообще (и, конечно, никакой математической теории вообще).

-2
ответ дан 7 November 2019 в 11:52
поделиться

Да, API кажется основным отличием, но на самом деле не является поверхностным. Концептуально набор объектов будет формировать граф, и вы можете подумать об API, который обрабатывает этот граф единообразно. И наоборот, теоретически вы можете найти общую структуру графа для шаблонов и сопоставить их с объектами, доступными через некоторый API. Но дизайн API реального продукта, как правило, будет иметь последствия для того, как данные фактически хранятся, как их можно запрашивать, поэтому было бы далеко не тривиально, скажем, создать оболочку и сделать ее похожей на что-то еще. Кроме того, объектно-ориентированная база данных должна предлагать некоторые гарантии целостности и структуру типизации, которые обычно не выполняет графическая база данных.На самом деле, серьезные объектно-ориентированные базы данных далеки от "свободной формы" :)

Взгляните на [HyperGraphDB] [1] - это как полная объектно-ориентированная база данных (например, db4o), так и очень продвинутая графическая база данных, как в с точки зрения репрезентативных и запрашивающих возможностей. Он способен хранить обобщенные гиперграфы (где ребра могут указывать на более чем один узел, а также на другие ребра), он имеет полностью расширяемую систему типов, встроенную в виде графа и т. Д.

В отличие от других графовых баз данных, в HyperGraphDB каждый объект становится узлом или ребром в графе с минимальным вмешательством API, и у вас есть выбор: представлять свои объекты в виде графа или обрабатывать их способом, ортогональным структуре графа (как значения "полезной нагрузки" ваших узлов или ребер). Вы можете выполнять сложные обходы, настраивать индексацию и запросы.

Объяснение того, почему HyperGraphDB на самом деле является ODMS, см. В сообщении блога. Является ли HyperGraphDB объектно-ориентированной базой данных? на сайте Kobrix.

15
ответ дан 7 November 2019 в 11:52
поделиться

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

Но самая большая разница в домене: в базах данных Graph все основано на двух типах: вершинах и ребрах, даже если обычно вы можете определять свои собственные типы как своего рода подтипы вершин или ребер.

В ODBMS у вас нет концепций вершин и ребер, если вы не пишете свои собственные.

1
ответ дан 7 November 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: