2013-08-17 17 views
0

Я столкнулся с db4o базой данных OODB и задаюсь вопросом, как она сравнивается с традиционным стеком с RDBMS или ORM, например Hibernate/EclipseLink. Приложение представляет собой систему документооборота и со временем расширяется. Не уверен, что OODB, как db4o, подходит хорошо. Я никогда не работал над OODB, поэтому не могу сказать. Любые предложения?Использование объектно-ориентированной базы данных (db4o) для приложения среднего масштаба

ответ

2

Hi! Вот некоторая информация, основанная на моем собственном опыте с DB4O.

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

Вы можете прочитать довольно хорошее сравнение некоторых из наиболее часто используемых систем более в Википедии: Comparison of OODB's

Если вы используете ORM упорную methology с помощью инструмента, как NHibernate, вы даете себе легкое время, когда он приходит к запросам и обновлению базы данных за сохраненными объектами. Вы можете придумать такой инструмент, как NHibernate, как «гибридное» решение, в то время как с чистыми объектно-ориентированными базами данных, такими как вы упомянули (один из которых я сделал с собой) DB4O от Versant/Actian, вы можете работать напрямую с файл в файловой системе или выбрать подходящее решение Client/Server. DB4O поддерживает оба.

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

DB4O теперь существует как бесплатный для некоммерческого использования продукт и имеет как Java, так и версию .Net. Они оба работают одинаково, и из моего личного опыта они работают очень хорошо для чего угодно: от простых 2-10 мегабайтных баз данных до файлов весом около 10-12 ГБ.

Как правило, по мнению разработчиков DB4O, если вы ожидаете, что база данных вашего приложения должна быть больше, чем около 15-16 GigaBytes, вы должны рассмотреть другие подходы.

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

DB4O легко расширять и должен охватывать большинство потребностей в объектно-ориентированной базе данных.

Вот небольшой пример, который показывает, насколько легко для подключения и написать ряд пользовательских объектов в БД, взятые из одного из моих собственных проектов: (DBPATH это строковая константа)

public static void StoreObjectsToDb(IEnumerable<SyncObject> syncObjects) 
    { 
    using (IObjectContainer container = Db4oEmbedded.OpenFile(DbPath)) 
    { 
     try 
     { 
      foreach (var hdSyncObject in syncObjects) 
      { 
       container.Store(hdSyncObject); 
       Console.WriteLine("Stored Object with HdID {0}\t<-->\tTfsID {1} to database.",hdSyncObject.HdId,hdSyncObject.HdTfsNo); 
      } 
      container.Commit(); 
      LogUtility.WriteToLog("Successfully wrote all objects to database."); 
     } 
     catch (Exception ex) 
     { 
      container.Rollback(); 
      LogUtility.WriteToLog("Could not save objects to database. Rolling back changes...\nError: {0}",ex.Message); 
     } 
     finally 
     { 
      container.Close(); 
     } 
    } 
    } 

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

Поддержка многих традиционных функций RDBMS во многих OODB и в некоторых сценариях накладные расходы на реализацию обычной базы данных SQL намного больше, чем просто встраивание базы данных непосредственно в исходный код.

Надеюсь, что это немного облегчит ситуацию.

Chris

+0

Спасибо за быстрый обзор. Щедрость ваша! Также вы порекомендовали бы db4o для приложения среднего масштаба? – user6123723

+0

Ну, термин «Среднее приложение шкалы» очень расплывчато. Но, как я сказал в ответ, что-то до 10 - 12 ГБ данных должно быть ОК для DB4O. Но это действительно зависит от того, КАК ВЫ ИСПОЛЬЗУЕТЕ сохраненные данные. Делает ли он много чтений или в основном пишет (обновления) и т. Д. Но, как правило, я бы сказал «Иди за ним! – cseder

+0

Кроме того, поскольку вы дали мне щедрость, я считаю, что ее также следует обозначать как «ответ»? Возможно, я ошибаюсь, я новичок в SO. – cseder