Проект ОrioleDB развивает альтернативный движок хранения для PostgreSQL, разработанный с целью преодоления ограничений стандартного механизма хранения и повышения общей эффективности системы. Например,
ОrioleDB позволяет обойтись без периодического выполнения операции VACUUM для сборки мусора, благодаря реализации механизма MVCC (Multi-Version Concurrency Control) на базе логов отката (undo logs), работающих на уровне отдельных блоков и строк, а также системы автоматического слияния страниц, содержащих данные. ОrioleDB также использует 64-разрядные идентификаторы транзакций, что решает проблему с переполнением счётчиков.
Для упрощения использования в распределённых системах и распараллеливания операций в OrioleDB организовано ведение
WAL-лога транзакций на уровне строк. При выполнении операции UPDATE поддерживается замена данных по месту (без освобождения текущей записи и создания новой), что положительно сказывается на производительности. В OrioleDB также реализованы такие возможности, как чтение страниц с данными без использования блокировок, прямое связывание страниц в оперативной памяти со страницами в постоянном хранилище, применение механизма CoW (copy-on-write) при фиксации контрольных точек для создания непротиворечивых снапшотов в любой момент времени, режим хранения данных в сжатом виде с использованием алгоритма ZSTD.
Из присутствующих в седьмой бета-версии OrioleDB ограничений отмечается возможность использования только индексов в формате B-tree (в будущем появится поддержка всех типов индексов PostgerSQL), а также отсутствие поддержки предварительно подготовленных транзакций (PREPARE TRANSACTION) и команды «REINDEX» в режиме «CONCURRENTLY». OrioleDB реализован в форме подключаемого расширения, требующего внесения изменений в основную кодовую базу PostgreSQL.
В тестах производительности TPC-C, которые моделируют нагрузку транзакционной обработки в реальных условиях, седьмая бета-версия OrioleDB показала значительное превосходство над штатным движком PostgreSQL. Тестирование проводилось с различным количеством одновременно работающих клиентов, чтобы оценить масштабируемость и производительность системы при увеличении нагрузки.
В тестах, оценивающих пропускную способность транзакций, движок OrioleDB достиг более высокой пропускной способности, измеряемой в транзакциях в минуту (tpmC). При увеличении числа клиентов производительность OrioleDB продолжала расти линейно, тогда как у движка Heap в PostgreSQL наблюдалась тенденция к стагнации и даже снижению после определенного порога.
В тестах на время отклика среднее время отклика транзакций в OrioleDB было заметно ниже по сравнению с PostgreSQL. Таким образом, системы на базе OrioleDB могут обрабатывать больше транзакций за тот же промежуток времени, обеспечивая при этом более быстрое обслуживание запросов. При измерении использования ресурсов движок OrioleDB продемонстрировал более эффективное использование CPU и памяти, благодаря оптимизированному управлению ресурсами.
Источник: http://www.opennet.ru/opennews/art.shtml?num=62327