VMware は先日,SQLFire 初の安定版をリリースした。SQLFire は高可用性と水平スケール性を重視した,分散 SQL データベースである。
SQLFire は外部的には,SQL クエリのサポートやJDBC ドライバ (.NET 用サポートも提供される) など,従来のリレーショナルデータベースシステムに期待される機能の大部分をサポートする。組込モード (Java プロセス内部への) ,あるいはクライアントサーバアーキテクチャで配置可能である。JDBC ドライバ,クエリエンジン,SQLFire 用ネットワークサーバなどを Apache Derby から直接取り込んでいる SQLFire は,ストレージに SQL を使用している Java アプリケーションであれば,理論上はその置き換えとして動作するはずだ。
一方で SQLFire は,単独のモノリシックデータベースサーバというパラダイムを超越した,いくつかの追加機能も提供している。その中心を成すアイデアは次のようなものだ – 現代的なアプリケーションに対応している SQL 言語は,既存ツールの利用を好む開発者に親しまれた存在だが,すべてのデータが単一の場所に存在するという集中型モデルゆえに,必ずしもスケーラブルではない。そのため SQLFire では,従来の SQL インターフェースと水平クラスタリングに基づく GemFire 技術を組み合わせて使用している。SQLFire は,次のような複数のホストで構成されるクラスタグループを配置対象とする。
- データをホストして SQL ステートメントを実行可能な データストアノード
- SQL ステートメントは実行可能だがデータは保持しない アクセスノード
- データを持たず,ステートメントも実行しない ロケータノード。これはクラスタ検索に使用されるノードである
すべてのノードは,他のノードにシングルホップでアクセスできる。クラスタアーキテクチャの詳細は,SQLFire の JDBC 経由で接続するアプリケーションコードからは完全に抽象化される。SQLFire はその背後で,以下のような機能を実行する。
- クラスタ全体にわたるテーブルのレプリケーション
- クラスタ全体にわたるテーブルのパーティショニング
- クエリの並列実行 (組込 Ma/R)
- 分散トランザクション
- ディスクへの選択的な永続化
- 外部 RDBMS (MySQL など) をストレージとして利用する機能
これらの拡張機能を有効にするために, SQLFire では独自の DDL 拡張を導入している。以下の例では,Airlines テーブルをクラスタノードにレプリケートして,Flights テーブルに特定の列に基づくパーティショニングを行う。
CREATE TABLE AIRLINES ( AIRLINE CHAR(2) NOT NULL CONSTRAINT AIRLINES_PK PRIMARY KEY, AIRLINE_FULL VARCHAR(24), ECONOMY_SEATS INTEGER, BUSINESS_SEATS INTEGER, FIRSTCLASS_SEATS INTEGER ) REPLICATE; CREATE TABLE FLIGHTS ( FLIGHT_ID CHAR(6) NOT NULL , ORIG_AIRPORT CHAR(3), DEPART_TIME TIME, DEST_AIRPORT CHAR(3), ARRIVE_TIME TIME, MILES INTEGER, AIRCRAFT VARCHAR(6), CONSTRAINT FLIGHTS_PK PRIMARY KEY ( FLIGHT_ID) ) PARTITION BY COLUMN (FLIGHT_ID);
テーブルが2つともに PERSISTENT キーワードを使用していないので,デフォルトではいずれもメモリ上のみに存在することに注意してほしい。これ以外にもテーブルのコロケーション,サーバのグルーピング,並列プロシージャなどの拡張機能がある。SQLFire の機能の組み合わせを選択することで,次のような展開が可能である。
- スタンドアロンの SQL インメモリデータベース
- スタンドアロンの SQL 永続化データベース
- 混合形式 (テーブルが部分的にインメモリ/レプリケーション/パーティション化される) の分散データベース
- メモリキャッシュ (複数のエビクションポリシーをサポートする)
- 既存 RDBMS のキャッシュ
上で最後に挙げたシナリオは,RDBMS のデータを2つの別々のカテゴリに分割するという意味で,興味深いものだ。つまり,参照のみの目的で使用されてアクセス速度をそれほど必要としない蓄積的データ( RDBMS によってアクセスされることができる) と,SQLFile を中間キャッシュとしてアクセスされるトランザクション的あるいは状態保持的なデータ,この2つである。
さらに詳しい情報が リファレンスガイド や ブログ で紹介されている。使用しているコンポーネントの多くはオープンソースだが,SQLFire 自体は 商用ソリューション として提供される,プロプライエタリな製品だ。評価目的の試用版が 公開されている。