Основна памет DB срещу Object DB

В момента се опитвам да избера доставчик на база данни.

Просто търся някои лични мнения от колеги разработчици на бази данни.

Въпросът ми е специално насочен към хора, които:

1) са използвали база данни на основната памет (MMDB), която поддържа репликиране на диск (хибридно) преди (т.е. ExtremeDB)

or

2) са използвали Versant Object Database и/или Objectivity Database и/или Progress ObjectStore

и въпросът наистина е: ако можете да препоръчате доставчик на база данни, въз основа на вашия опит, това би подхождало на моето приложение.

Моето приложение е комерсиално приложение в реално време (да се чете: с висока производителност) обектно-ориентирано C++ GIS приложение, където трябва да извършим много търсене по ширина/дължина (т.е. дадена област, намиране на всички съвпадащи цели в зоната). ..R-дървовиден индекс).

Типовете данни, които бих искал да съхранявам в базата данни, са моделирани като обекти и използват std::list и std::vector, така че естествено, Object Database изглежда има смисъл. Прочетох достатъчно статии, за да се убедя, че традиционната RDBMS вероятно не е това, което наистина търся по отношение на

  1. производителност (съединения или множество таблици за данни с динамична дължина като списък/вектор)
  2. лекота на програмиране (несъответствие на импеданса)

Въпреки това, по отношение на производителността,

  1. Входните данни се подават в системата с около 40 MB/s.

  2. Следователно системата също така ще извършва вмъкване в базата данни със скорост от приблизително 350 вмъквания в секунда (където всеки обект варира от 64KB до 128KB),

  3. Базата данни ще бъде последователно търсена и актуализирана чрез множество нишки.

Доколкото разбирам, всички обектни бази данни, които изброих тук, използват кеш за съхраняване на обекти на база данни. ExtremeDB твърди, че тъй като е проектиран специално за памет, може да избегне претоварването на логиката за кеширане и т.н. Вижте повече чрез гугъл: Основна памет срещу RAM-диск Бази данни: Базиран на Linux тест

Така че...просто съм малко объркан. Могат ли Object DB да се използват в система в реално време? Толкова ли е "бързо" като MMDB?


person sivabudh    schedule 18.05.2009    source източник


Отговори (2)


Основната разлика между MMDB и OODB е, че MMDB има очакванията, че всички негови данни са базирани в RAM, но са останали на диска в даден момент. Докато OODB е по-конвенционален, тъй като не се очаква цялата DB да се побере в RAM.

MMDB може да се възползва от това, като се откаже от концепцията, че постоянните данни не е задължително да „съвпадат“ с данните в RAM.

Начинът, по който всичко с постоянство ще работи, е, че трябва да запише данните на диска при актуализация по някакъв начин.

Почти всички DB използват някакъв вид журнал за това. Тези регистрационни файлове са основно "сурови" страници с данни или може би отделни транзакции, добавени към файл. Когато файлът стане "твърде голям", се стартира нов файл.

След като регистрационните файлове са правилно консолидирани в основното хранилище, регистрационните файлове се изхвърлят (или се използват повторно).

Сега грубата база данни в RAM може да съществува просто чрез добавяне на транзакции към лог файл и когато се рестартира, тя просто зарежда входа в RAM. Така че, по същество, регистрационният файл Е базата данни.

Недостатъкът на тази техника е, че колкото по-дълги и повече транзакции имате, толкова по-голям е вашият журнал/DB и следователно по-дълго време за стартиране на DB. Но в идеалния случай можете също така да „снимате“ текущото състояние, което елиминира всички актуални регистрационни файлове и ефективно ги компресира.

По този начин всички рутинни операции на DB, които трябва да управлява, са добавяне на страници към регистрационни файлове, вместо актуализиране на други дискови страници, индексни страници и т.н. Тъй като в идеалния случай повечето системи не трябва да се „стартират“ толкова често, може би времето за стартиране е по-малко проблем.

Така че по този начин MMDB може да бъде по-бърз от OODB, който има различен договор с диска, поддържайки регистрационни файлове и дискови страници. По този начин OODB може да бъде по-бавен, дори ако цялата DB се побира в RAM и е правилно кеширана, просто защото извършвате дискови операции извън операциите в журнала по време на нормални операции, срещу MMDB, където тези операции се случват като "поддръжка" задача, която може да бъде планирана по време на престой и/или време на тишина.

Що се отнася до това дали някоя от тези системи може да отговори на вашите действителни нужди от производителност, не мога да кажа.

person Will Hartung    schedule 18.05.2009
comment
благодаря за много доброто обяснение за 2 различни технологии, Уил. Използвали ли сте някога OODBMS или MMBDBMS? Ако да, кои? Как ви харесаха в сравнение с традиционната RDBMS? - person sivabudh; 18.05.2009
comment
Не, не съм използвал нито едното, нито другото по никакъв законен начин и дори тогава нито един от моите проекти не е имал вашите изисквания за честотна лента, така че дори и да имах, опитът може да не е бил валиден. - person Will Hartung; 18.05.2009

Задните части на базите данни (процеси на четене и запис, кеширане, управление на заключване, txn лог файлове, ACID семантика) са еднакви, така че RDB и OODB всъщност са много сходни тук. Разликата е в интерфейса към приложния програмист. Вашият модел на данни сложен ли е, състои ли се от много класове с реални връзки на наследяване? Тогава OO е добър. Сравнително плосък и прост ли е? След това отидете на RDB. Какво е естеството на взаимоотношенията? Подобно на указател и зададено ли е? След това отидете на RDB. По-сложно ли е, като (подреден) списък, масив, карта? Тогава трябва да отидете OO. Също така, имате ли самостоятелно приложение, което не е необходимо да се интегрира с други приложения? Тогава OO е добре. Трябва ли да споделяте данни с други приложения (т.е. няколко приложения имат достъп до една и съща база данни)? Тогава това е проблем за OO и трябва да се придържате към RDB. Стабилна ли е схемата на вашата база данни или очаквате да се развива често? OODB са лоша еволюция на рекламната схема, така че ако очаквате чести промени, придържайте се към RDB.

person Carsten Kuckuk    schedule 06.11.2009
comment
Благодаря за всички въпроси. Моят проект определено се вписва в OO. Моята индустрия е цифрова обработка на сигнали в реално време + навигация. Така че структурата на данните е доста сложна. - person sivabudh; 06.11.2009
comment
OODB са много по-добри в промените на схемата от всеки RDB, който съм виждал. - person Stephan Eggermont; 11.05.2011