Datomicは素晴らしいデータベースであり、私はそれを強くお勧めします。他のデータベースシステムとは一線を画す多くの機能があります。
- Clojureのデータ構造と同様に、永続的です。つまり、デフォルトでは、データベースに新しいファクトを追加しても古いファクトは削除されないため、以前の時点でのデータベースの状態を照会できるため、監査機能とデバッグの支援が強化されます。 。
- 基盤となるエンティティ属性値(EAV /トリプル)データモデル(少なくとも部分的にRDFとセマンティックWebに触発された)は非常に柔軟性があり、任意のグラフ構造を表現し、ポリモーフィズムを簡単に処理できます。
- クエリ言語はDatalogの一種であり、SQLなどよりも厳密に表現力のあるパターンマッチングベースのクエリ言語であり、再帰クエリを実行できるため、グラフデータ/クエリの処理に特に適しています。
- Datalogクエリに加えて
pull
、データベースから引き出したいドキュメントのような構造の形状を指定するGraphQLのような式を使用して、データベースからデータをより簡単に引き出すことができるapiがあります。:find
これらのクエリは、Datalogクエリの句内からでも使用できます。
- クエリ内からClojure関数を使用できます。
- インデックス作成システムは非常にスマートで、多かれ少なかれ自動化されており、パフォーマンスのためにSQLデータベースを調整する作業とはまったく対照的です。
- トランザクションはクエリとは異なるAPI/関数呼び出しを通過します。つまり、OWASP(SQLインジェクション)によって識別される最大のセキュリティリスクは、Datomicでは文字通り不可能です。
- トランザクター/リードレプリカの設計により、トランザクターに圧力をかけずに、読み取り/クエリのスケーリングが非常に簡単になります。
- 地獄のように楽しいです。
ここで指摘する価値のあることの1つは、EAVデータモデルとデータログ/プルクエリを採用することで、Datomicは、基本的にリレーショナルでありながら、リレーショナルクエリでさらに表現力豊かでありながら、NoSQLデータベースに近い構造上の柔軟性を持つことになります。 SQLより。
それは素晴らしいです、そしてあなたは絶対にそれを試してみるべきです。それはあなたの脳を少し溶かします。良い意味で。
また、その人気が多くの成功したオープンソースプロジェクトに影響を与えていることも注目に値します。そのため、基礎となるアプローチはすぐにはどこにも行きません。
- DataScript:メモリ内clj/cljs部分実装
- Datahike:ディスクインデックスをクエリするDataScriptのフォーク。つまり、クエリを実行するためにすべてをメモリに保持する必要はありません。
- Mentat:MozillaプロジェクトでDatomicに似たものを作ろうとしているMozillaプロジェクト