БД основной памяти и БД объектов

В настоящее время я пытаюсь выбрать поставщика базы данных.

Я просто ищу некоторые личные мнения от других разработчиков баз данных.

Мой вопрос особенно адресован людям, которые:

1) раньше использовали базу данных основной памяти (MMDB), поддерживающую репликацию на диск (гибридную) (например, ExtremeDB)

or

2) использовали базу данных Versant Object и/или база данных Objectivity и/или Хранилище объектов прогресса

и вопрос на самом деле: если бы вы могли порекомендовать поставщика базы данных, основываясь на своем опыте, который подойдет для моего приложения.

Мое приложение представляет собой коммерческое в режиме реального времени (читай: высокопроизводительное) объектно-ориентированное ГИС-приложение C++, в котором нам нужно выполнять много поиска по широте и долготе (т. е., учитывая область, найти все соответствующие цели в пределах области. ..R-Tree индекс).

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

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

Однако с точки зрения производительности,

  1. Входные данные подаются в систему со скоростью около 40 МБ/с.

  2. Следовательно, система также будет выполнять вставку в базу данных со скоростью примерно 350 вставок в секунду (где размер каждого объекта варьируется от 64 КБ до 128 КБ).

  3. База данных будет последовательно искаться и обновляться через несколько потоков.

Насколько я понимаю, все перечисленные здесь БД объектов используют кеш для хранения объектов БД. ExtremeDB утверждает, что, поскольку он разработан специально для памяти, он может избежать накладных расходов на логику кэширования и т. д. См. больше, погуглив: Базы данных основной памяти и RAM-диска: тест на основе Linux.

Итак.. Я просто немного смущен. Можно ли использовать объектные БД в системе реального времени? Это так же «быстро», как MMDB?


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


Ответы (2)


По сути, разница между MMDB и OODB заключается в том, что MMDB предполагает, что все ее данные хранятся в оперативной памяти, но в какой-то момент сохраняются на диске. Принимая во внимание, что OODB более традиционна в том смысле, что не ожидается, что вся БД будет помещаться в ОЗУ.

MMDB может использовать это, отказавшись от концепции, согласно которой сохраняемые данные не обязательно должны «соответствовать» данным в оперативной памяти.

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

Почти все БД используют для этого какой-то журнал. Эти журналы в основном представляют собой «сырые» страницы данных или, возможно, отдельные транзакции, добавленные в файл. Когда файл становится «слишком большим», запускается новый файл.

Как только журналы должным образом объединены в основное хранилище, журналы удаляются (или используются повторно).

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

Недостатком этого метода является то, что чем длиннее и больше у вас транзакций, тем больше ваш журнал/БД и, следовательно, тем дольше время запуска БД. Но, в идеале, вы также можете сделать «моментальный снимок» текущего состояния, что исключает все актуальные журналы и эффективно их сжимает.

Таким образом, все рутинные операции БД должны управлять добавлением страниц в журналы, а не обновлением других страниц диска, страниц индекса и т. д. Поскольку в идеале большинству систем не нужно «запускаться» так часто, возможно, время запуска не так важно.

Таким образом, MMDB может быть быстрее, чем OODB, которая имеет другой контракт с диском, поддерживая журналы и страницы диска. Таким образом, OODB может работать медленнее, даже если вся БД помещается в ОЗУ и правильно кэшируется, просто потому, что вы выполняете дисковые операции вне операций журнала во время обычных операций, по сравнению с MMDB, где эти операции выполняются как «обслуживание». задача, которую можно запланировать на время простоя и/или тихое время.

Что касается того, может ли какая-либо из этих систем удовлетворить ваши фактические потребности в производительности, я не могу сказать.

person Will Hartung    schedule 18.05.2009
comment
спасибо за очень хорошее объяснение двух разных технологий, Уилл. Вы когда-нибудь использовали ООСУБД или MMBDBMS? Если да, то какие? Насколько они вам понравились по сравнению с традиционной СУБД? - person sivabudh; 18.05.2009
comment
Нет, я не использовал ни один из них законным образом, и даже тогда ни один из моих проектов не имел ваших требований к пропускной способности, поэтому, даже если бы у меня были, опыт мог быть недействительным. - person Will Hartung; 18.05.2009

Внутренние части баз данных (процессы чтения и записи, кэширование, управление блокировками, файлы журнала txn, семантика ACID) одинаковы, поэтому RDB и OODB на самом деле очень похожи здесь. Отличие заключается в интерфейсе для прикладного программиста. Ваша модель данных сложна, состоит из множества классов с реальными отношениями наследования? Тогда ОО хорошо. Он относительно плоский и простой? Тогда иди РДБ. Каков характер отношений? Это похоже на указатель и установлено? Тогда иди РДБ. Является ли это более сложным, например (упорядоченный) список, массив, карта? Тогда вы должны пойти ОО. Кроме того, есть ли у вас отдельное приложение без необходимости интеграции с другими приложениями? Тогда ОО в порядке. Приходится ли вам обмениваться данными с другими приложениями (т. е. несколько приложений имеют доступ к одной и той же базе данных)? Тогда это мешает ООП, и вам следует придерживаться RDB. Является ли схема вашей базы данных стабильной или вы ожидаете, что она будет часто меняться? OODB — плохая эволюция схемы рекламы, поэтому, если вы ожидаете частых изменений, придерживайтесь RDB.

person Carsten Kuckuk    schedule 06.11.2009
comment
Спасибо за все вопросы. Мой проект точно подходит под ОО. Моя отрасль связана с цифровой обработкой сигналов в реальном времени и навигацией. Таким образом, структура данных довольно сложна. - person sivabudh; 06.11.2009
comment
ООБД намного лучше справляются с изменениями схемы, чем любая РБД, которую я видел. - person Stephan Eggermont; 11.05.2011