# VoltDB
## 概要
VoltDB は [[H-Store]] の設計を商用化したオープンソースのメインメモリ分散 OLTP データベースである。2009 年に VoltDB Inc. が設立され、[[Michael Stonebraker]] が共同創業者。[[H-Store]] の設計原則(主記憶常駐・シェアードナッシング・パーティション単位逐次実行・ストアドプロシージャ・コマンドロギング)を継承しつつ、本番運用向けの機能(監視・ローリングアップグレード等)を追加している。
## アーキテクチャ
- **分散メインメモリ DB**: テーブルを主キーで水平パーティショニングし、各パーティションをクラスタノードのメインメモリに常駐させる。インデックスもメインメモリに保持
- **実行サイト**: 各 CPU コアに 1 つの実行サイトを設け、各パーティションを 1 サイトに割り当てる。トランザクションはサイト内で逐次実行(ロック不要)
- **ストアドプロシージャ**: 全トランザクションはストアドプロシージャとして事前登録・コンパイルされる。実行時の SQL パースオーバーヘッドを排除
- **グローバルトランザクション順序**: イニシエーターがタイムスタンプベースのトランザクション ID を生成し、NTP で大まかに同期。優先度キューでグローバル順序を保証
- **ノンブロッキングチェックポイント**: コピーオンライト機構によりトランザクション整合性のあるスナップショットを非同期に取得。スナップショット中もトランザクションは継続実行される
## 復旧機構
VoltDB は [[コマンドロギング]]と非ブロッキングチェックポイントを組み合わせて耐久性を保証する([[@2014__ICDE__Rethinking Main Memory OLTP Recovery]])。コマンドロギングは ARIES 生理ロギングより実行時オーバーヘッドが低く(TPC-C で 1.5× のスループット向上)、VoltDB の高スループット特性に適合する。
## H-Store との違い
[[H-Store]] と比較して VoltDB は以下の機能を追加:
- 監視・運用機能
- ローリングアップグレード
- バッテリーバックキャッシュを活用したディスク書き込み最適化
- グローバルトランザクション順序付けの仕組みが異なる(VoltDB の最新版は異なる方式を採用)
## 関連
- [[H-Store]] — 前身の研究システム
- [[メインメモリデータベース]] — アーキテクチャカテゴリ
- [[コマンドロギング]] — 採用している復旧方式
- [[OLTPシステムアーキテクチャ]] — 設計思想の背景
- [[Michael Stonebraker]]・[[Samuel Madden]] — 共同創業者
- [[Ariel Weisberg]] — VoltDB Inc. エンジニア・研究者
## 出典
- [[@2014__ICDE__Rethinking Main Memory OLTP Recovery]](本 wiki での初出)