3月初め、Rich Hickey氏とStuart Halloway氏を中心とするRelevanceチームは、2010年から取り組んでいる新しいデータベースプラットフォームDatomicを発表した。
Datomicは最近の分散コンピューティング、特にStorage as a Service、好きなだけアプリケーションサーバが利用できること、ライトよりもリードのスケールが要求されることを利用している。そのほかDatomicの重要なポイントを以下にあげる。
- リードとライトの関心の分離
- ライトにおける強力なトランザクション保証
- イミュータブルでアペンドオンリーなデータベースという概念
- クエリ可能な値としての時間的データベーススナップショット
- コアとなるデータ構造として時刻(トランザクション)を導入。Datomは (エンティティ, 属性, 値, トランザクション) で構成される。
- 論理に基づく構造化クエリ言語としてのDatalog。暗黙のjoinを含む複雑なクエリを可能にする。
Datalog Example (shipping costs exceeding product price) [:find ?customer ?product :where [?customer :shipAddress ?addr] [?addr :zip ?zip] [?product :product/weight ?weight] [?product :product/price ?price] // function call into application code [(Shipping/estimate ?zip ?weight) ?shipCost] [(<= ?price ?shipCost)]]
Datomicアーキテクチャは以下の重要な構成要素から成っている。
- 分散した高速なストレージサービス(SSD上のAWS Dynamo DB)
- 単一のTransactorサービス。ライトを一貫性のあるデータストリームにシリアライズすることだけに責任をもつ。
- Peerライブラリ。アプリケーションの一部として、クエリやインデックス/データのフェッチを処理する。
Rich氏はInfoQのWerner Schuster氏との今度のインタビューでもDatomicについて語り、Clojure/Westのキーノートでもそれについて語った。
DatomicアーキテクチャとDatalogに関するビデオプレゼンテーションが発表されて以降、さまざまな興味深い議論があった。
Sergio Bossa氏とDaniel Spiewak氏はDatomicの設計判断についていくつか質問した。
ひとつは、ライトスループット削減と単一障害点および主たるボトルネックとして単一のTransactorを選択したことだ。
もうひとつは、ほかのアプローチ(MapReduceなど)が現在やっているようなコードをデータに移すのではなく、大量のデータをコードに移すという判断だ。
Rich Hickey氏はこうした質問について、Alexandru PopescuのブログとMichael Fogusのブログで答えた。
Transactorは高可用性コンポーネントとして構築でき、クロスクエリが可能な、複数並行共有されるDatomicデータベース群が作れる可能性があると彼は指摘した。また、Datomicのスイートスポットは極めて高いライトスループットにあるのではなく、リードのスケーリング、リッチなクエリ、一貫性のあるトランザクションシステムにあると説明した。
データをアプリケーションに移すことに対しては、クエリ処理、ライト処理、シャーディング、最適化、ロギング、モニタリングなどなど、あまりに多くのことをケアしている現在のデータベースサーバの負荷を考慮したという。Datomicではこれらの関心の分離を試みている。アプリケーションはデータベースサーバよりもずっと容易にスケールアウトでき、それぞれのクエリ特性やデータニーズ(ホットデータセット)に適したクエリ責務、ユースケース責務を扱える。
もうひとつ興味深いポイントは、Datomicがグローバルに分散したインデックスとして見えることだ。これはストレージ内で定期的にアップデートされる。さらにインデックス差分はTransactorと各アプリケーションでたえず計算され、メインインデックスに仮想的にマージされる。キャッシュされたイミュータブルなインデックスセグメントによって、クエリエンジンはデータベースの巨大な部分をクライアントに転送することなく、データベースの対象とする箇所の値を直接取得することができる。
現在、Datomicは以下を提供している。
- (開発用に)Transactorとストレージサービスのインメモリ実装も備えたPeerライブラリ
- (テストもしくは小規模アプリ用に)Transactorインスタンスと永続的データストレージサービスを含むVirtualBoxアプライアンス
- Amazon Dynamo DBを利用した無料ティア(1000時間)付きのパブリックなAWS上の商用サービス