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

Mais conteúdo relacionado

Mais procurados

新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみたShuntaro Saiba
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04
「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04
「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04Makoto Nonaka
 
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違いなぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違いYoichi Tamamaki
 
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)Developers Summit
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022Rui Hirokawa
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発Fujio Kojima
 
クラウドを取り巻くリニア配信技術
クラウドを取り巻くリニア配信技術クラウドを取り巻くリニア配信技術
クラウドを取り巻くリニア配信技術Masashi Ito
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Masaki Yamamoto
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
アジャイル開発を支えるアーキテクチャ設計とは
アジャイル開発を支えるアーキテクチャ設計とはアジャイル開発を支えるアーキテクチャ設計とは
アジャイル開発を支えるアーキテクチャ設計とはYusuke Suzuki
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜infinite_loop
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
Jenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命があるJenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命があるJumpei Miyata
 

Mais procurados (20)

新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04
「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04
「事実にもとづく管理」によるソフトウェア品質の改善 ー ヒンシツ大学 Evening Talk #04
 
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違いなぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
 
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)
【14-E-3】セキュリティ・テストの自動化によるDevSecOpsの実現 (デモ有)
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発
 
クラウドを取り巻くリニア配信技術
クラウドを取り巻くリニア配信技術クラウドを取り巻くリニア配信技術
クラウドを取り巻くリニア配信技術
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
アジャイル開発を支えるアーキテクチャ設計とは
アジャイル開発を支えるアーキテクチャ設計とはアジャイル開発を支えるアーキテクチャ設計とは
アジャイル開発を支えるアーキテクチャ設計とは
 
RancherとGitOps的な話
RancherとGitOps的な話RancherとGitOps的な話
RancherとGitOps的な話
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
大規模負荷テストの負荷かけ手法とトラブルシュート 〜JMeterとうまく付き合う方法〜
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
Jenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命があるJenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命がある
 

Destaque

Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Michael Nguyen
 
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...Insight Technology, Inc.
 
MongoDB インサイド SaaS型業務アプリケーション
MongoDB インサイド  SaaS型業務アプリケーションMongoDB インサイド  SaaS型業務アプリケーション
MongoDB インサイド SaaS型業務アプリケーションYuki Ishikawa
 
OpenStack Congress Deep Dive
OpenStack Congress Deep DiveOpenStack Congress Deep Dive
OpenStack Congress Deep Divemasahito12
 
Kadecot概要
Kadecot概要Kadecot概要
Kadecot概要sonycsl
 
MongoDB very basic (Japanese) / MongoDB基礎の基礎
MongoDB very basic (Japanese) / MongoDB基礎の基礎MongoDB very basic (Japanese) / MongoDB基礎の基礎
MongoDB very basic (Japanese) / MongoDB基礎の基礎Naruhiko Ogasawara
 
業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法Yoshitaka Mori
 
業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法Co-graph Inc.
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会Yu Shibatsuji
 
解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由Kentaro Inomata
 
ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」AdvancedTechNight
 
Redis at Moovit
Redis at MoovitRedis at Moovit
Redis at MoovitRedis Labs
 
KeyNote Connecting Up Conference
KeyNote Connecting Up ConferenceKeyNote Connecting Up Conference
KeyNote Connecting Up ConferenceBeth Kanter
 
Integrating Social Media into Your Communications Strategy
Integrating Social Media into Your Communications StrategyIntegrating Social Media into Your Communications Strategy
Integrating Social Media into Your Communications StrategyBeth Kanter
 
The Case for React.js and ClojureScript
The Case for React.js and ClojureScriptThe Case for React.js and ClojureScript
The Case for React.js and ClojureScriptMurilo Pereira
 

Destaque (20)

Red5
Red5Red5
Red5
 
Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)
 
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
 
MongoDB インサイド SaaS型業務アプリケーション
MongoDB インサイド  SaaS型業務アプリケーションMongoDB インサイド  SaaS型業務アプリケーション
MongoDB インサイド SaaS型業務アプリケーション
 
OpenStack Congress Deep Dive
OpenStack Congress Deep DiveOpenStack Congress Deep Dive
OpenStack Congress Deep Dive
 
Kadecot概要
Kadecot概要Kadecot概要
Kadecot概要
 
MongoDB very basic (Japanese) / MongoDB基礎の基礎
MongoDB very basic (Japanese) / MongoDB基礎の基礎MongoDB very basic (Japanese) / MongoDB基礎の基礎
MongoDB very basic (Japanese) / MongoDB基礎の基礎
 
業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法
 
業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
 
解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由
 
Apache Hive 紹介
Apache Hive 紹介Apache Hive 紹介
Apache Hive 紹介
 
ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」
 
Meteor js
Meteor jsMeteor js
Meteor js
 
Redis at Moovit
Redis at MoovitRedis at Moovit
Redis at Moovit
 
ReactJS Mixins
ReactJS MixinsReactJS Mixins
ReactJS Mixins
 
KeyNote Connecting Up Conference
KeyNote Connecting Up ConferenceKeyNote Connecting Up Conference
KeyNote Connecting Up Conference
 
NHS presentation
NHS presentationNHS presentation
NHS presentation
 
Integrating Social Media into Your Communications Strategy
Integrating Social Media into Your Communications StrategyIntegrating Social Media into Your Communications Strategy
Integrating Social Media into Your Communications Strategy
 
The Case for React.js and ClojureScript
The Case for React.js and ClojureScriptThe Case for React.js and ClojureScript
The Case for React.js and ClojureScript
 

Semelhante a Datomic&datalog紹介

Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかChihiro Ito
 
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムオラクルエンジニア通信
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTterurou
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門sairoutine
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]David Buck
 
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji ShinkuboD22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji ShinkuboInsight Technology, Inc.
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎Insight Technology, Inc.
 
Japan it week_アプリケーション開発に最適なクラウド
Japan it week_アプリケーション開発に最適なクラウドJapan it week_アプリケーション開発に最適なクラウド
Japan it week_アプリケーション開発に最適なクラウドオラクルエンジニア通信
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶShumpei Shiraishi
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介NilOne Ltd.
 
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報dstn
 
[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...
[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...
[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...Insight Technology, Inc.
 

Semelhante a Datomic&datalog紹介 (20)

Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
 
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LT
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門
 
Lithium Labo #1
Lithium Labo #1Lithium Labo #1
Lithium Labo #1
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
 
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji ShinkuboD22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
Nginx
NginxNginx
Nginx
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
Japan it week_アプリケーション開発に最適なクラウド
Japan it week_アプリケーション開発に最適なクラウドJapan it week_アプリケーション開発に最適なクラウド
Japan it week_アプリケーション開発に最適なクラウド
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
 
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報20120822_dstn技術交流会_dstnのご紹介と最新技術情報
20120822_dstn技術交流会_dstnのご紹介と最新技術情報
 
[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...
[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...
[db tech showcase Tokyo 2017] E23: クラウド異種データベース(AWS)へのデータベース移行時の注意点 ~レプリケーション...
 

Mais de あしたのオープンソース研究所   (12)

Friendica_28th_AshitanoKen
Friendica_28th_AshitanoKenFriendica_28th_AshitanoKen
Friendica_28th_AshitanoKen
 
Apache UIMA
Apache UIMAApache UIMA
Apache UIMA
 
Flume
FlumeFlume
Flume
 
Gephi Quick Start (Japanese)
Gephi Quick Start (Japanese)Gephi Quick Start (Japanese)
Gephi Quick Start (Japanese)
 
Gephi Tutorial Visualization (Japanese)
Gephi Tutorial Visualization (Japanese)Gephi Tutorial Visualization (Japanese)
Gephi Tutorial Visualization (Japanese)
 
Cassandra v0.6-siryou
Cassandra v0.6-siryouCassandra v0.6-siryou
Cassandra v0.6-siryou
 
MongoDB
MongoDBMongoDB
MongoDB
 
Rails.20110405
Rails.20110405Rails.20110405
Rails.20110405
 
S4
S4S4
S4
 
machine learning & apache mahout
machine learning & apache mahoutmachine learning & apache mahout
machine learning & apache mahout
 
20100831.あしたの研第14回座談会moses.スライド
20100831.あしたの研第14回座談会moses.スライド20100831.あしたの研第14回座談会moses.スライド
20100831.あしたの研第14回座談会moses.スライド
 
Cassandra 分散データベース
Cassandra 分散データベースCassandra 分散データベース
Cassandra 分散データベース
 

Datomic&datalog紹介

  • 1. Copyright © Infoscience Corporation. All rights reserved. Datomic と Datalog インフォサイエンス株式会社 永江 哲朗
  • 2. Copyright © Infoscience Corporation. All rights Datomic, Datalog Datomic はオープンソースではありませんが、技術的に面白そうでしたので今回取 り上げました。 また、 Datomic で使われている Datalog は Prolog の流れをくむクエリ言語です。
  • 3. Copyright © Infoscience Corporation. All rights Datomic とは ● Datomic の目標 ・堅牢な情報モデルの提供。 ・冗長でスケーラブルなストレージシステムの利用 ・ ACID トランザクションと一貫性の提供 ・アプリケーションでの宣言的なデータプログラミング 【比較】 従来の RDBMS (MySQL, PostgreSQL 等 ) → 関係モデルにある種の更新のセマンティックを組み合わせたモデルをサポー トする。 NoSQL (HBase, Amazon Dynamo DB, Cassandra 等 ) → 自らが扱う情報についてほとんど何も知らず、キーによって BLOB を保持す るだけで、結果の一貫性を保証する。
  • 4. Copyright © Infoscience Corporation. All rights Datomic とは 設計者: Rich Hickey さん Clojure(JVM 上で動く Lisp 系言語) の作者
  • 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 では追加になっています。
  • 12. Copyright © Infoscience Corporation. All rights エンティティと属性 Datomic ではエンティティに対して以下のような属性を与えます。 ・名前 ・値のデータ型 ・カーディナリティ ( 属性が 1 個 or 複数個の値を持つ ) ・一意性 ・インデックスプロパティ ・ドキュメンテーション   など。。。
  • 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 < イメージ >
  • 15. Copyright © Infoscience Corporation. All rights Datalog Datomic ピアライブラリには Datalog に基づくクエリエンジンが付属していま す。 ● Datalog の特徴  ・宣言的なクエリ言語  ・再帰的なクエリ  ・暗黙的なジョイン
  • 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)