Есть ли такая база данных? - PullRequest
0 голосов
/ 26 июня 2009

Справочная информация: Хорошо, поэтому я ищу, как мне кажется, объектную базу данных. Однако (по общему признанию несколько) объектные базы данных, на которые я смотрел, были простыми уровнями персистентности, а не полноценными СУБД. Я не знаю, считается ли то, что я ищу, объектной базой данных, поэтому любая помощь в указании меня в правильном направлении была бы очень признательна.


Я не хочу давать вам две страницы с описанием того, что я ищу, поэтому я буду использовать пример, чтобы проиллюстрировать мою точку зрения. Допустим, у меня есть объект BlogPost, который мне нужно сохранить. Примерно так, в псевдокоде:

class BlogPost
    title:String
    body:String
    author:User
    tags:List<String>
    comments:List<Comment>

(Предположим, Comment - это его собственный класс.)

Теперь в реляционной базе данных author будет храниться как внешний ключ, указывающий на User.id, а tags и comments будут храниться как один ко многим или многие ко многим многие отношения используют отдельную таблицу для хранения отношений. То, что я хотел бы, является механизмом базы данных, который делает следующее:

  • Хранит связанные объекты (author, tags и т. Д.) С прямой ссылкой вместо использования внешних ключей, которые требуют дополнительного поиска; другими словами, объекты друг над другом должны изначально поддерживаться базой данных
  • Позволяет добавить комментарий или тег к сообщению в блоге, не извлекая весь объект, не обновляя его, а затем помещая обратно в базу данных (например, в документ-ориентированную базу данных - например, CouchDB)

Я думаю, что я ищу навигационную базу данных, но я не знаю. Есть ли хоть что-то похожее на то, о чем я думаю? Если так, то как это называется? (Или еще лучше, дайте мне настоящую рабочую базу данных.) Или я слишком разборчив?


Edit:

Просто чтобы уточнить, Я НЕ ищу ORM или уровень абстракции или что-то в этом роде. Я ищу фактическую базу данных, которая делает это внутренне. Извините, если мне трудно, но я искал и ничего не смог найти.


Edit:

Кроме того, что-то для JVM было бы превосходно, но на данный момент мне действительно все равно, на какой платформе он работает.

Ответы [ 11 ]

7 голосов
/ 27 июня 2009

Я думаю, что то, что вы описываете, может быть легко смоделировано в графической базе данных . Затем вы получаете преимущество перехода к узлам / ребрам, где вы хотите вносить изменения без необходимости извлекать что-либо еще. Для JVM есть база данных с открытым исходным кодом Neo4j (где я являюсь частью команды). Вы можете прочитать об этом в High Scalability , как часть обзора в thinkvitamin или в этом потоке стекопотока . Что касается тегов, я думаю, хранение их в графической базе данных может дать вам некоторые дополнительные преимущества, если вы хотите найти связанные теги и тому подобное. Просто добавьте строку в список рассылки , и я уверен, что сообщество поможет вам.

5 голосов
/ 26 июня 2009

Вы можете попробовать db4o , который доступен в C # и Java.

2 голосов
/ 26 июня 2009

Я думаю, что мы ищем это: http://www.odbms.org/. На этом сайте есть полезная информация о объектных базах данных, включая Объективность , которая является довольно хорошей объектной базой данных.

1 голос
/ 27 июня 2009
1 голос
/ 26 июня 2009

Именно то, что вы описали, может быть сделано с (N) Hibernate, работающим на обычной СУБД.

Преимущество использования такого уровня постоянства с обычной базой данных состоит в том, что у вас есть стандартная система баз данных в сочетании с удобным программированием. Вы объявляете свои классы очень естественным образом, и (N) Hibernate предоставляет способ перевода между ссылками / списками и связями внешних ключей.

Учебник по Java: http://docs.jboss.org/hibernate/stable/core/reference/en/html/tutorial-firstapp.html

.NET учебник: https://web.archive.org/web/20081212181310/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx

Если вы настаиваете, что не хотите использовать хорошо поддерживаемую стандартную СУБД и предпочитаете доверять свои данные чему-то более экзотическому и менее проверенному, вы ищете Object Relational Database .

Однако такой продукт, вероятно, лучше всего реализовать, если в любом случае он превратится в слой над стандартной СУБД. Вероятно, именно поэтому ORM, такие как (N) Hibernate, являются наиболее популярным решением - они позволяют применять стандартное программное обеспечение СУБД (и широко доступные навыки управления / пользователя), а опыт программирования на 99% основан на объектах.

0 голосов
/ 17 июня 2010

Вы можете попробовать STSdb ​​, DB4O, Perst ... который доступен в C # и Java.

0 голосов
/ 26 июня 2009

ZODB возможно? хорошее введение найти здесь: http://www.ibm.com/developerworks/aix/library/au-zodb/

0 голосов
/ 26 июня 2009

Полагаю, вы ищете ORM с подходом " EntityFirst ".

В подходе EntityFirst разработчик меньше всего заинтересован в работе с базой данных. Вы просто должны построить свои объекты или объекты. Затем ORM заботится о сохранении сущностей в базе данных и извлечении их по вашему желанию.

Единственный EntityFirst ORM с моими знаниями " Signum ". Это замечательный фреймворк, построенный поверх .net. Я рекомендую вам посмотреть некоторые видео на сайте SignumFramework , и я уверен, что вы найдете его полезным.

Текст ссылки: http://www.signumframework.com

Спасибо.

0 голосов
/ 26 июня 2009

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

0 голосов
/ 26 июня 2009

Существует множество терминов, связанных с объектно-реляционным отображением , или ORM, который, вероятно, будет наиболее полезным для поиска. Библиотеки ORM существуют для многих языков программирования.

...