FoundationDB NoSQLデータベースの新たなRecord Layerは、リレーショナルデータベースのセマンティクスやスキーマ管理、セカンダリインデックス、クエリ機能をサポートする。FoundationDBチームは先月、Record Layerをオープンソースとしてリリースすると発表した。
FoundationDBは、元はAppleが開発したオープンソースの"マルチモード"NoSQLデータベースだが、オープンソースとして公開された以降は,多くの企業が開発に参加している。クラウドフレンドリな"シェアドナッシング・アーキテクチャ"設計で,"コア"となるキーバリューデータベースを中心に、追加機能が"レイヤ"として提供されており、機能やデータモデルを追加することで新たなデータアクセスパターンが可能になっている。FoundationDBを基盤として構築されたRecord Layerは、フィールドとタイプ、進化型スキーマ、プライマリとセカンダリのインデックス、宣言型クエリ実行をサポートする。レイヤは構成可能性を意図して設計されており、他のシステムを介して拡張したり、FoundationDB上に新たなレイヤクラスおよびアプリケーションを追加することが可能になっている。
Record Layerはさらに、入れ子型のデータタイプやレコードのコミット時のインデックス、異なるレコードタイプにまたがるインデックスやクエリなど、一般的なリレーショナル・データベースには見られない機能も備えている。
Record Layerは,FoundationDBのトランザクションセマンティクスをセカンダリインデックスに適用することにより、データの変更に合わせてインデックスを常に最新の状態に更新する。ステートレスであるため、データベースのインスタンス数を単純に増やすだけでスケールアップ可能だ。さらにマルチテナンシをサポートし、各テナントに属するすべてのデータを隔離する。
その他のRecord Layerの機能としては、以下のようなものがある。
- レコードはProtocol Bufferメッセージとして表現され、業界標準のシリアライゼーションとスキーマ進化を実現している。トランザクション可能なセカンダリインデックス機能は、このProtocol Bufferデータモデルに基づくものだ。
- グループカウントやフルテキストインデックス、序数順序(ordinal rank)インデックス、拡張可能な関数インデックスといった,高度なインデックスタイプをサポートする。
- クエリを具体的なデータベース操作に変換するクエリプランナ。
- 拡張ポイント: ユーザが独自のインデックスメンテなどのクエリプランニング機能を開発することにより,新たなインデックスタイプを統合できる。
- クライアント定義の暗号および圧縮アルゴリズムをサポートする,シリアライゼーションAPI。
Record LayerとFoundationDBは実際にAppleで運用されており,AppleのCloudKitなどのアプリケーションやサービスをサポートしている。
Record Layerと同じく,FoundationDBのDocument Layerもステートレスなマイクロサーバで,MongoDB APIと互換性のあるドキュメント指向データベースサービスを提供する。
FoundationDBインストレーションパッケージはmacOSの他,Ubuntu,RHEL/CentOS EL6およびEL7,Windowsオペレーティング・システムをサポートする。さらにC,Python,Ruby,Java 8以降,Go 1.1以降のプログラミング言語を対象としたAPI言語バインディングをサポートしている。開発チームは,CloudKitでRecord Layerが使用される方法について説明した論文を発表している。
FoundationDBのRecord Layer機能についてもっと詳しく知りたいならば,以下のリソースを確認するとよいだろう。
- ローカル環境でFoundationDB(FDB)を実行する方法を含む"Getting Started Guide"
- ソフトウェアのドキュメント
- ダウンロードリンク
- Github プロジェクト