More Related Content Similar to Datomic&datalog紹介
Similar to Datomic&datalog紹介 (20) More from あしたのオープンソース研究所 (12) Datomic&datalog紹介3. Copyright © Infoscience
Corporation. All rights
Datomic とは
● Datomic の目標
・堅牢な情報モデルの提供。
・冗長でスケーラブルなストレージシステムの利用
・ ACID トランザクションと一貫性の提供
・アプリケーションでの宣言的なデータプログラミング
【比較】
従来の RDBMS (MySQL, PostgreSQL 等 )
→ 関係モデルにある種の更新のセマンティックを組み合わせたモデルをサポー
トする。
NoSQL (HBase, Amazon Dynamo DB, Cassandra 等 )
→ 自らが扱う情報についてほとんど何も知らず、キーによって BLOB を保持す
るだけで、結果の一貫性を保証する。
5. Copyright © Infoscience
Corporation. All rights
設計のコンセプト
● Datomic の設計のコンセプト
(1) 単純さと合成。
システムはひとつのことを行うサービスを複数組み合わせて構成するべきであり、サービスは
互いを知っているべきでない。ストレージやキャッシュのような領域には良く考えられたシンプ
ルなコンポーネントがすでにあり、統合可能である。
(2) ストレージと問い合わせのスケーラビリティと弾力性。
事前の構成なしで動的にマシンを追加したり削除したりすることでストレージや問い合わせの能
力を大きくしたり小さくしたりできるべき。
(3) 配置場所の柔軟性。
あるコンポーネントは別のコンポーネントのある場所を気にしない。
(4) 全般的な不変性。
プログラミングで更新をするというのは時間が経過したということを表す。ほとんどのプログラ
ミングは不変値を使って行われるべき。
(5) インターフェイスとしてのデータ。
システムはプログラミング可能であるべき。そのためには主要なインターフェイスはデータ駆動
であるべきで、複雑な構文であってはならない。
6. Copyright © Infoscience
Corporation. All rights
Datomic の論理モデル
・ Datomic の論理モデル ・ストレージ
・トランザクション
コーディネータはトランザクションをシリ
アライズして、 ACID 特性を保証し、情報を
ストレージに書き込みます。
・インデキシング
・アプリケーションデータモデルと問い合わせ
アプリケーションサーバ層から見ると
Datomic はメモリ内の値のように見えます。
データベースはエンティティとその属性が形
成するグラフのように見えます。
・キャッシュ
Datomic 自体がキャッシュを管理してイン
デックスセグメントをキャッシュして、イン
デックスセグメントをストレージからメモリ
やアプリケーションのプロセスに展開します。
7. Copyright © Infoscience
Corporation. All rights
Datomic のアーキテクチャー
・ Datomic のアーキテクチャー
・ピア REST サーバー
・ピアライブラリ
・トランザクター
・ memchache (optional)
・ストレージサービス
ストレージとトランザクション
を分けているところ、インデッ
クスとキャッシュをピアにもた
せていることが面白いと思いま
す。
8. Copyright © Infoscience
Corporation. All rights
ストレージ
● Datomic で使えるストレージサービス
(1) インプロセスのメモリ ( ストレージではない ) 。 Datomic は完全にメモリ
内で動かすことができます。 free 版はこれしか使えないので、 Datomic を
実質的に商用で使えるのは有料の Pro 版のみとなります。
(2) SQL 。 JDBC が使える SQL データベースであればストレージとして利用
できます。 ( Pro edition)※
PostgreSQL, MySQL, Oracle
(3) キー / バリューストア。 DynamoDB のような次世代分散キー / バリュース
トアは Datomic に向いています。 ( Pro edition)※
DynamoDB, Riak, couchbase
(4) メモリグリッド。冗長メモリが十分丈夫であれば Infinispan のような分散
データグリッドで利用できます。 ( Pro edition)※
( データグリッド : 複数サーバにまたがって存在するデータ・オブジェク
トを単一物理メモリ上で効率的に処理するためのミドルウェア ( はてな
キーワードより ) 。
Infinispan: JbossAS の内部で使用されるデータグリッドプラットフォー
ムです )
9. Copyright © Infoscience
Corporation. All rights
ピアライブラリ
● ピアライブラリ
データベースの値を表すコードや接続のコード、メモリインデックスや問い合
‘ ’わせエンジンは ピア と呼ばれる JVM のライブラリで提供されます。このライ
ブラリが動作するアプリケーションサーバはデータベースサーバーと同等の機
能を持つようになるので、ピアと名付られました。
このライブラリは Java 、 Clojure 、 Scala 、 JRuby 、 Groovy など JVM 言語
で利用できる Java API を持ちます。ピアは直接 ( 読み取り専用で ) ストレージ
にアクセスします。
また、インデックスセグメントのキャッシュを持ちます。このキャッシュの中
でインデックスセグメントは JVM オブジェクトに展開されています。
10. Copyright © Infoscience
Corporation. All rights
トランザクター
● トランザクター
トランザクターはトランザクションのコーディネーション専用のプロセスです。
アプリケーションサーバのピアから接続を受け付けます。
これらの接続からトランザクションを受け付け、シリアライズして、ストレー
ジにログセグメントをコミットし、接続しているすべてのピアに新情報をブロ
ードキャストします。
11. Copyright © Infoscience
Corporation. All rights
構造と表現
・データベースは、リレーション、列とドキュメント等、そのモデルの下部に
ある基本ユニットを持ちます。 Datomic のユニットは、 Datom と呼ばれます
。
Datom は以下のコンポーネントを持ちます。
・ Entity ( エンティティ ; データの単位 )
・ Attribute ( 属性 )
・ Value ( 値 )
・ Transaction ( データベース時間 )
・ Add/Retract ( 追加 / 取り消し )
※ RDF(Resource Description Framework ( リソース・ディスクリプション・
フレームワーク ) ステートメントの Subject/Predicate/Object データモデルと
明らかに似ています。ただし、時間の経過を表す概念や取り消しの表現が
Datomic では追加になっています。
13. Copyright © Infoscience
Corporation. All rights
・エンティティ
:person/name
・属性 :
{:db/ident :person/name,
:db/valueType :db.type/string,
:db/cardinality :db.cardinality/one,
:db/doc "A person's name"}
エンティティと属性の例
エンティティの ID
値の型
カーディナリティ ( この場合は1 )
ドキュメンテーション
14. Copyright © Infoscience
Corporation. All rights
スキーマの例
以下の 2 つの定義で neighborhood を定義します。
{:db/id #db/id[:db.part/db]
:db/ident :neighborhood/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/unique :db.unique/identity
:db/doc "A unique neighborhood name (upsertable)"
:db.install/_attribute :db.part/db}
{:db/id #db/id[:db.part/db]
:db/ident :neighborhood/district
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "A neighborhood's district"
:db.install/_attribute :db.part/db}
パーティション名
neiborhood
Name District
Taro Shinjuku
< イメージ >
16. Copyright © Infoscience
Corporation. All rights
Datalog の歴史
1977 年に考案されてから、 2000 年代になるまでほとんど日の目を見ることは
ありませんでしたが、現在では以下のような分野で使えそうということで注目
を集めているようです。
・ Data Integration ( データ統合 )
・ Program Analysis ( プログラム解析 )
BDDBDDB, Semmle, Doop
・ Declarative Networking ( 宣言的ネットワーク )
17. Copyright © Infoscience
Corporation. All rights
;;who is 42? (42 歳の人は誰 ?)
[:find ?e :where [?e :age 42]]
;;which 42-year-olds like what? (42 歳の人で、その人は何が好き ?)
[:find ?e ?x
:where [?e :age 42]
[?e :likes ?x]
:find → 値を返すことを指示します。
:where → 制約を示します。
:age, :likes → 属性を示します。
?e, ?x → 変数を表します。
Datalog のクエリーの例
AND 条件になります。
18. Copyright © Infoscience
Corporation. All rights
ルール
[[(lang-anchor ?name ?url)
[?language :lang/website ?url]
[?language :lang/name ?name]]]
[:find ?name ?url
:where [lang-anchor ?name ?url]]
ルールの head
ルールの body
ここに上で定義された lang-anchor のルールが入ります
19. Copyright © Infoscience
Corporation. All rights
再帰的なルール
[[(direct-influence ?old ?new)
[?old :influenced ?new]]
[(remote-influence ?old ?new)
(direct-influence ?old ?new)]
[(remote-influence ?old ?new)
(direct-influence ?old ?intermediate)
(remote-influence ?intermediate ?new)]]
20. Copyright © Infoscience
Corporation. All rights
再帰的なクエリー
[:find ?influence
:where
[?new :lang "Dart"]
(remote-influence ?old ?new)
[?old :lang ?influence]]
⇒ {["LISP"] ["Smalltalk"] ["Simula"]}
Simula LISP
Smalltalk
Dart
ルールが再帰的に適用されます
[[(direct-influence ?old ?new)
[?old :influenced ?new]]
[(remote-influence ?old ?new)
(direct-influence ?old ?new)]
[(remote-influence ?old ?new)
(direct-influence ?old ?intermediate)
(remote-influence ?intermediate ?new)]]
21. Copyright © Infoscience
Corporation. All rights
時間の入ったクエリー (Datomic 拡張 )
・ Datomic の Datalog では過去のある時点のデータに対してクエリーできます
。
例 . ( 以下の例はモデルです。 )
[john :favorite/food :pizza <last week>] ("2013-09-09T00:00:00.000-00:00“)
[john :favorite/food :pho <now>] ("2013-09-16T00:00:00.000-00:00“)
クエリ (q ‘[:find ?food
:where [?person :person/name “John”]
[?person :favorite/food ?food]]
(d/as-of database #inst “2013-09-09T00:00:00.000-00:00“))
⇒ [[:pizza]] を返します。 d/as-of はその時点を指します。
22. Copyright © Infoscience
Corporation. All rights
まとめ
・ RDB, KVS, データグリッドから選択可能なストレージ
・トランザクターによるトランザクション。
・ピアライブラリ
・過去のデータの履歴をすべて残していく。
・ Datalog
・時間の入ったクエリー。
・ RDB の関係性と、 KVS のストレージの柔軟性のいいとこどり ?
23. Copyright © Infoscience
Corporation. All rights
参考文献
”・ The Reemergence of Datalog” by Michael Fogus, InfoQ
(http://www.infoq.com/presentations/Datalog)
”・ Datomic ”情報モデル by Rich Hickey,InfoQ
(http://www.infoq.com/jp/articles/Datomic-Information-Model)
”・ Datomic ”のアーキテクチャ by Rich Hickey,InfoQ
(http://www.infoq.com/jp/articles/Architecture-Datomic)
・ Datomic Tutorial (http://docs.datomic.com/tutorial.html)
”・ Datalog and Emerging Applications: an Interactive Tutorial” by Shan Shan Huan, et al.
(http://www.cs.ucdavis.edu/~green/papers/sigmod906t-huang-slides.pdf)
・ "Datomic" by Takahiro Hozumi (https://speakerdeck.com/t_hozumi/datomicnituite)