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-окружении на каждом узле. Это гарантирует атомарность и изоляцию: внутри одной процедуры все операции либо выполняются полностью, либо откатываются. Детерминированное выполнение достигается за счёт того, что хранимая процедура не должна зависеть от внешних данных (например, от времени, случайных чисел или состояния других баз), если они не переданы явно через параметры.
Ключевые особенности
- Полностью in-memory хранение — все данные находятся в ОЗУ, что снижает задержки до микросекунд.
- Горизонтальное масштабирование — добавление узлов линейно увеличивает пропускную способность.
- Гарантии ACID — поддержка атомарности, согласованности, изоляции (уровень Serializable) и долговечности (через репликацию и контрольные точки).
- Детерминированное выполнение — отсутствие блокировок благодаря последовательному исполнению транзакций на партициях.
- Поддержка доступа через JDBC/ODBC — возможность подключения стандартных клиентов и инструментов Business Intelligence (BI).
- Встроенная аналитика — можно выполнять сложные аналитические запросы (например, агрегации с GROUP BY) параллельно на всех узлах.
- Управление через консоль администратора — веб-интерфейс для мониторинга производительности, настройки кластера и просмотра планов запросов.
Сферы применения
Основные области использования VoltDB — задачи, требующие высокой пропускной способности транзакций (обычно от 100 тысяч до нескольких миллионов в секунду) и низкой задержки (миллисекунды или даже микросекунды). Типичные сценарии:
- Финансовые транзакции — биржевые торги, обработка платежей, антифрод-системы, где важны согласованность данных и малая задержка.
- Телекоммуникации — управление абонентами, тарификация звонков, биллинг в реальном времени, мониторинг качества связи.
- IoT и сенсоры — сбор и обработка потоков данных от миллионов датчиков (например, в промышленной автоматизации или умных сетях).
- Игры и геймификация — обработка игровых действий, рейтинги, магазины игровых предметов с сохранением консистентности.
- Рекламные и маркетинговые системы — таргетинг, подсчёт конверсий, управление профилями пользователей в реальном времени.
Пример конфигурации кластера
Ниже приведён упрощённый сценарий развёртывания кластера VoltDB из трёх узлов:
- На каждом узле устанавливается программное обеспечение VoltDB (например, версия 11.x).
- Создаётся сетевой канал для обмена данными (обычно TCP/IP).
- Определяется файл конфигурации (deployment.xml), в котором указываются имена узлов, количество партиций (рекомендуется 2–4 на ядро CPU), параметры репликации и пути к журналам.
- Запускается кластер через команду
voltdb initна ведущем узле, затем на остальных. - После загрузки схемы (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 имеет ряд ограничений:
- Ограниченная поддержка сложных аналитических запросов — из-за in-memory хранения сложные агрегации с большими объёмами данных могут потребовать переноса данных во внешние системы (например, в Apache Spark или Hadoop).
- Жёсткие требования к детерминизму — любые недетерминированные операции (чтение текущего времени, генерация случайных чисел вне параметров процедуры) запрещены, что усложняет разработку.
- Объём оперативной памяти — стоимость оперативной памяти для хранения всех данных может быть высокой для таблиц с миллиардами строк.
- Отсутствие полноценного поддержки индексов — поддерживаются только индексы B-дерево и хеш, нет полнотекстового поиска.
- Необходимость ручного перестроения кластера — при изменении количества партиций узлов требуется перезагрузка базы.
Связь с другими проектами
VoltDB является прямым потомком проекта H-Store. Другие коммерческие и открытые СУБД NewSQL, основанные на похожих принципах, включают NuoDB, MemSQL (теперь SingleStore) и Clustrix. В отличие от них, VoltDB подчёркивает полностью детерминированное выполнение и отсутствие блокировок. В 2020-х годах интерес к VoltDB снизился из-за распространения облачных сервисов (Amazon Aurora, Google Spanner) и NoSQL-систем с пропускной способностью, сравнимой с OLTP. Тем не менее, она остаётся популярной в нишевых приложениях с очень высокими требованиями к производительности и консистентности.
Источники
- Фундаментальная статья H-Store: "The End of an Architectural Era: It's Time for a Complete Rewrite" (по материалам доклада на VLDB 2007).
- Документация VoltDB версии 11.x (архив сайта voltdb.com).
- Книга "NewSQL Databases" by Guy Harrison (2016).
- Технический отчёт MIT CSAIL о проекте H-Store.
---
Примечание: Информация основана на открытых источниках и официальной документации. Компания VoltDB, Inc. не упоминается в реестрах нежелательных организаций или иноагентов на территории РФ.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →