Datomic&datalog紹介

1,765 views

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,765
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
13
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Datomic&datalog紹介

  1. 1. Copyright © Infoscience Corporation. All rights reserved. Datomic と Datalog インフォサイエンス株式会社 永江 哲朗
  2. 2. Copyright © Infoscience Corporation. All rights Datomic, Datalog Datomic はオープンソースではありませんが、技術的に面白そうでしたので今回取 り上げました。 また、 Datomic で使われている Datalog は Prolog の流れをくむクエリ言語です。
  3. 3. Copyright © Infoscience Corporation. All rights Datomic とは ● Datomic の目標 ・堅牢な情報モデルの提供。 ・冗長でスケーラブルなストレージシステムの利用 ・ ACID トランザクションと一貫性の提供 ・アプリケーションでの宣言的なデータプログラミング 【比較】 従来の RDBMS (MySQL, PostgreSQL 等 ) → 関係モデルにある種の更新のセマンティックを組み合わせたモデルをサポー トする。 NoSQL (HBase, Amazon Dynamo DB, Cassandra 等 ) → 自らが扱う情報についてほとんど何も知らず、キーによって BLOB を保持す るだけで、結果の一貫性を保証する。
  4. 4. Copyright © Infoscience Corporation. All rights Datomic とは 設計者: Rich Hickey さん Clojure(JVM 上で動く Lisp 系言語) の作者
  5. 5. Copyright © Infoscience Corporation. All rights 設計のコンセプト ● Datomic の設計のコンセプト (1) 単純さと合成。   システムはひとつのことを行うサービスを複数組み合わせて構成するべきであり、サービスは 互いを知っているべきでない。ストレージやキャッシュのような領域には良く考えられたシンプ ルなコンポーネントがすでにあり、統合可能である。 (2) ストレージと問い合わせのスケーラビリティと弾力性。   事前の構成なしで動的にマシンを追加したり削除したりすることでストレージや問い合わせの能 力を大きくしたり小さくしたりできるべき。 (3) 配置場所の柔軟性。   あるコンポーネントは別のコンポーネントのある場所を気にしない。 (4) 全般的な不変性。   プログラミングで更新をするというのは時間が経過したということを表す。ほとんどのプログラ ミングは不変値を使って行われるべき。 (5) インターフェイスとしてのデータ。   システムはプログラミング可能であるべき。そのためには主要なインターフェイスはデータ駆動 であるべきで、複雑な構文であってはならない。
  6. 6. Copyright © Infoscience Corporation. All rights Datomic の論理モデル ・ Datomic の論理モデル ・ストレージ ・トランザクション   コーディネータはトランザクションをシリ アライズして、 ACID 特性を保証し、情報を ストレージに書き込みます。 ・インデキシング ・アプリケーションデータモデルと問い合わせ   アプリケーションサーバ層から見ると Datomic はメモリ内の値のように見えます。 データベースはエンティティとその属性が形 成するグラフのように見えます。 ・キャッシュ    Datomic 自体がキャッシュを管理してイン デックスセグメントをキャッシュして、イン デックスセグメントをストレージからメモリ やアプリケーションのプロセスに展開します。  
  7. 7. Copyright © Infoscience Corporation. All rights Datomic のアーキテクチャー ・ Datomic のアーキテクチャー ・ピア REST サーバー ・ピアライブラリ ・トランザクター ・ memchache (optional) ・ストレージサービス ストレージとトランザクション を分けているところ、インデッ クスとキャッシュをピアにもた せていることが面白いと思いま す。
  8. 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. 9. Copyright © Infoscience Corporation. All rights ピアライブラリ ● ピアライブラリ データベースの値を表すコードや接続のコード、メモリインデックスや問い合 ‘ ’わせエンジンは ピア と呼ばれる JVM のライブラリで提供されます。このライ ブラリが動作するアプリケーションサーバはデータベースサーバーと同等の機 能を持つようになるので、ピアと名付られました。 このライブラリは Java 、 Clojure 、 Scala 、 JRuby 、 Groovy など JVM 言語 で利用できる Java API を持ちます。ピアは直接 ( 読み取り専用で ) ストレージ にアクセスします。 また、インデックスセグメントのキャッシュを持ちます。このキャッシュの中 でインデックスセグメントは JVM オブジェクトに展開されています。
  10. 10. Copyright © Infoscience Corporation. All rights トランザクター ● トランザクター トランザクターはトランザクションのコーディネーション専用のプロセスです。 アプリケーションサーバのピアから接続を受け付けます。 これらの接続からトランザクションを受け付け、シリアライズして、ストレー ジにログセグメントをコミットし、接続しているすべてのピアに新情報をブロ ードキャストします。
  11. 11. Copyright © Infoscience Corporation. All rights 構造と表現 ・データベースは、リレーション、列とドキュメント等、そのモデルの下部に ある基本ユニットを持ちます。 Datomic のユニットは、 Datom と呼ばれます 。   Datom は以下のコンポーネントを持ちます。 ・ Entity ( エンティティ ; データの単位 ) ・ Attribute ( 属性 ) ・ Value ( 値 ) ・ Transaction ( データベース時間 ) ・ Add/Retract ( 追加 / 取り消し ) ※ RDF(Resource Description Framework ( リソース・ディスクリプション・ フレームワーク ) ステートメントの Subject/Predicate/Object データモデルと 明らかに似ています。ただし、時間の経過を表す概念や取り消しの表現が Datomic では追加になっています。
  12. 12. Copyright © Infoscience Corporation. All rights エンティティと属性 Datomic ではエンティティに対して以下のような属性を与えます。 ・名前 ・値のデータ型 ・カーディナリティ ( 属性が 1 個 or 複数個の値を持つ ) ・一意性 ・インデックスプロパティ ・ドキュメンテーション   など。。。
  13. 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. 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 < イメージ >
  15. 15. Copyright © Infoscience Corporation. All rights Datalog Datomic ピアライブラリには Datalog に基づくクエリエンジンが付属していま す。 ● Datalog の特徴  ・宣言的なクエリ言語  ・再帰的なクエリ  ・暗黙的なジョイン
  16. 16. Copyright © Infoscience Corporation. All rights Datalog の歴史 1977 年に考案されてから、 2000 年代になるまでほとんど日の目を見ることは ありませんでしたが、現在では以下のような分野で使えそうということで注目 を集めているようです。 ・ Data Integration ( データ統合 ) ・ Program Analysis ( プログラム解析 ) BDDBDDB, Semmle, Doop ・ Declarative Networking ( 宣言的ネットワーク )
  17. 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. 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. 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. 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. 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. 22. Copyright © Infoscience Corporation. All rights まとめ ・ RDB, KVS, データグリッドから選択可能なストレージ ・トランザクターによるトランザクション。 ・ピアライブラリ ・過去のデータの履歴をすべて残していく。 ・ Datalog ・時間の入ったクエリー。 ・ RDB の関係性と、 KVS のストレージの柔軟性のいいとこどり ?
  23. 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)

×