Открыть сервис

VoltDB

VoltDB — это реляционная система управления базами данных (СУБД) с открытым исходным кодом, ориентированная на обработку операций в реальном времени (OLTP) и аналитику в оперативной памяти (in-memory). Относится к классу NewSQL — систем, сочетающих горизонтальную масштабируемость NoSQL-решений с гарантиями ACID (атомарность, согласованность, изоляция, долговечность) классических реляционных СУБД. Разработана профессором Массачусетского технологического института Майклом Стоунбрейкером и его коллегами на основе проекта H-Store, созданного при участии таких учёных, как Сэмюэль Мадден и Дэниел Аббади.

История

Проект H-Store, заложивший основу VoltDB, был запущен в 2007 году как исследовательская инициатива в области лаборатории CSAIL при MIT. Его целью было разработать высокопроизводительную базу данных, способную обрабатывать миллионы транзакций в секунду на кластере из недорогих серверов. В 2009 году на базе H-Store была основана компания VoltDB, Inc., которая выпустила первую коммерческую версию продукта — VoltDB 1.0. Система была открыта под лицензией GNU Affero General Public License (AGPL) для свободного использования и модификации. В 2021 году права на код и бизнес были переданы компании Voltron Data, однако проект с открытым исходным кодом продолжил существование под названием H-Store (возрождённый). Ключевым отличием от предшественников стала ориентация на кластерную архитектуру с разделением данных по партициям и параллельным выполнением транзакций на каждом узле.

Архитектура и принципы работы

VoltDB основана на полностью резидентной (in-memory) модели данных: все таблицы и индексы хранятся в оперативной памяти кластерных узлов, что устраняет задержки, связанные с дисковым вводом-выводом. Данные не сбрасываются на диск при каждой транзакции, а записываются в журнал упреждающей записи (WAL) для обеспечения долговечности. При сбое восстановление производится из контрольных точек (snapshots) и журнала.

Система использует архитектуру «разделяй и властвуй» (share-nothing): каждый узел кластера владеет определённым набором партиций (физических фрагментов таблиц). Транзакции выполняются последовательно в рамках одной партиции, что исключает блокировки и конфликты. Координация между партициями реализуется через многофазные протоколы (например, двухфазный коммит). Выполнение транзакций полностью детерминировано: планировщик решает, в каком порядке будут исполняться операции, и распределяет их по узлам.

Кластеризация и партиционирование

VoltDB горизонтально масштабируется за счёт добавления узлов в кластер. Для равномерного распределения нагрузки таблицы разбиваются на партиции по значениям ключа (чаще всего первичного или суррогатного). Коэффициент репликации может быть настроен для обеспечения отказоустойчивости: при выходе узла из строя его данные берёт на себя другой узел, содержащий реплику. Репликация синхронная или асинхронная в зависимости от конфигурации. Минимальный отказоустойчивый кластер состоит из трёх узлов.

Язык запросов и хранимые процедуры

Система поддерживает диалект SQL, совместимый с большинством стандартных запросов (SELECT, INSERT, UPDATE, DELETE, JOIN, агрегации). Основная единица работы — хранимая процедура, написанная на Java или SQL. Процедуры компилируются в байт-код JVM и выполняются в JVM-окружении на каждом узле. Это гарантирует атомарность и изоляцию: внутри одной процедуры все операции либо выполняются полностью, либо откатываются. Детерминированное выполнение достигается за счёт того, что хранимая процедура не должна зависеть от внешних данных (например, от времени, случайных чисел или состояния других баз), если они не переданы явно через параметры.

Ключевые особенности

Сферы применения

Основные области использования VoltDB — задачи, требующие высокой пропускной способности транзакций (обычно от 100 тысяч до нескольких миллионов в секунду) и низкой задержки (миллисекунды или даже микросекунды). Типичные сценарии:

Пример конфигурации кластера

Ниже приведён упрощённый сценарий развёртывания кластера VoltDB из трёх узлов:

  1. На каждом узле устанавливается программное обеспечение VoltDB (например, версия 11.x).
  2. Создаётся сетевой канал для обмена данными (обычно TCP/IP).
  3. Определяется файл конфигурации (deployment.xml), в котором указываются имена узлов, количество партиций (рекомендуется 2–4 на ядро CPU), параметры репликации и пути к журналам.
  4. Запускается кластер через команду voltdb init на ведущем узле, затем на остальных.
  5. После загрузки схемы (CREATE TABLE) и хранимых процедур (CREATE PROCEDURE) запускаются транзакции.

Пример простого создания таблицы и процедуры:

```sql CREATE TABLE accounts ( account_id INTEGER NOT NULL, balance FLOAT, PRIMARY KEY (account_id) );

CREATE PROCEDURE transfer AS DECLARE sender INTEGER, receiver INTEGER, amount FLOAT; UPDATE accounts SET balance = balance - amount WHERE account_id = sender; UPDATE accounts SET balance = balance + amount WHERE account_id = receiver; END; ```

Критика и ограничения

Несмотря на высокую производительность в OLTP-сценариях, VoltDB имеет ряд ограничений:

Связь с другими проектами

VoltDB является прямым потомком проекта H-Store. Другие коммерческие и открытые СУБД NewSQL, основанные на похожих принципах, включают NuoDB, MemSQL (теперь SingleStore) и Clustrix. В отличие от них, VoltDB подчёркивает полностью детерминированное выполнение и отсутствие блокировок. В 2020-х годах интерес к VoltDB снизился из-за распространения облачных сервисов (Amazon Aurora, Google Spanner) и NoSQL-систем с пропускной способностью, сравнимой с OLTP. Тем не менее, она остаётся популярной в нишевых приложениях с очень высокими требованиями к производительности и консистентности.

Источники

---

Примечание: Информация основана на открытых источниках и официальной документации. Компания VoltDB, Inc. не упоминается в реестрах нежелательных организаций или иноагентов на территории РФ.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →