QCon New York 2013で、Rich Hickey氏が関数型データベースについて講演をした。氏はClojure プログラミング言語、そして現在開発中のDatomic, 関数型データベースのクリエータとして有名である。講演で関数型言語の有用な特徴を説明した。値としてのデータ と純粋関数は、データベースのコンテキストでも全く同様に有用である。オブジェクトを使ったプログラミングは、非常に違うと、彼は主張する。オブジェクトは、データとロジックを組み合わせて、機械のようだ。それは、順次処理を行い、常にその状態を変る。オブジェクトに対してメソッドを呼び出すと、非常に異なる結果を毎回与えるかもしれない。この状態は、予測できない方法で変わる可能性がある。例えば、別のスレッドもこのオブジェクトへの参照を持っており、それを変更しているからだ。このことによって、オブジェクトを持つプログラムを説明するのが難しくなる。今日我々が使用しているデータベースは、オブジェクトと非常によく似ている。データベース・サーバーは不変値の欠如を補うために、トランザクションの概念を用いて、常に変化する状態、クエリロジックそして変化する値を持つ単一のエンティティ(おそらく複製されている)である。
氏は観客に尋ねた:データベースがこれらすべての関数型特性を持ったら素晴らしいのではないでしょうか?そのような世界では、データベース全体が(不変)な値として表され、クエリは引数として単にデータベース、または多くのデータベースを取る関数である。データベースは安全にスレッド間で引き渡することができ、同じデータベース値に対する同じクエリは、常に同じ結果を生成する。当然、不変のデータベースは、非常に有用ではないので、transactorが変更するのに使われる。もっと正確には、 以前のものに基づいて、新しいデータベースの値を生成する。データベースの値と幾つかの変更可能な値をtransactorに与えると新しいデータベースの値を返す。プログラムは、いつでもデータベースに現在の値を尋ねることができる。 Datomicは、これらの特性を持つデータベースだ。
データベースへのこの関数型アプローチは、厳密にロジックからデータを分離する関数型プログラミングのコアなアイデアをデータベースに適用する。データは、ダムデータストアで永続化される。それはAmazonの DynamoDBのような単純なキーと値を格納するものになるだろう。transactorプロセスがトランザクションを調整し、主に役立つのは、複数の"peer"(クライアントを意味するDatomicの用語)が同時にトランザクションを実行している時だ。peerは通常、Javaライブラリとしてアプリケーション自体に統合されている。peerは、transactorへの接続を持ち、トランザクションな変更を実行する。クエリは、peer自身によって行われ、必要に応じてデータストアからデータを遅延してロードする。クエリをより簡単にするために、Datomicはクエリ言語としてDatalog をサポートするが、これはPrologのサブセットで、 宣言的な方法でデータベースをクエリするのに非常に適している。
Datomicの詳細については、そのウェブサイトにある。InfoQは以前Datomicのアーキテクチャ と データモデル についての記事を発表し、 Datomicについての以前の講演 のビデオも同様に公開している。