SlideShare a Scribd company logo
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)

More Related Content

What's hot

DDDを実践できるエンジニアを育成するための取り組みについて
DDDを実践できるエンジニアを育成するための取り組みについてDDDを実践できるエンジニアを育成するための取り組みについて
DDDを実践できるエンジニアを育成するための取り組みについて
BIGLOBE Inc.
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Google Cloud Platform - Japan
 
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
 
Helidon 概要
Helidon 概要Helidon 概要
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
 
DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!
Drecom Co., Ltd.
 
「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」
富士通クラウドテクノロジーズ株式会社
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
Mikiya Okuno
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
Hidenori Ishii
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
オラクルエンジニア通信
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
Kuniyasu Suzaki
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 

What's hot (20)

DDDを実践できるエンジニアを育成するための取り組みについて
DDDを実践できるエンジニアを育成するための取り組みについてDDDを実践できるエンジニアを育成するための取り組みについて
DDDを実践できるエンジニアを育成するための取り組みについて
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
 
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!
 
「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
 
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 

Viewers also liked

Red5
Red5Red5
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 Dive
masahito12
 
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
 
Apache Hive 紹介
Apache Hive 紹介Apache Hive 紹介
ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」
AdvancedTechNight
 
Meteor js
Meteor jsMeteor js
Meteor js
VinayRamappa
 
Redis at Moovit
Redis at MoovitRedis at Moovit
Redis at Moovit
Redis Labs
 
ReactJS Mixins
ReactJS MixinsReactJS Mixins
ReactJS Mixins
Bradley Gore
 
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 Strategy
Beth 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 ClojureScript
Murilo Pereira
 

Viewers also liked (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
 

Similar to 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 LT
terurou
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム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 Tokyo
Treasure Data, Inc.
 
Nginx
NginxNginx
[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.
 

Similar to 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)へのデータベース移行時の注意点 ~レプリケーション...
 

More from あしたのオープンソース研究所  

Apache UIMA
Apache UIMAApache UIMA
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
MongoDB
MongoDBMongoDB
Rails.20110405
Rails.20110405Rails.20110405
machine learning & apache mahout
machine learning & apache mahoutmachine learning & apache mahout
machine learning & apache mahout
あしたのオープンソース研究所  
 
Cassandra 分散データベース
Cassandra 分散データベースCassandra 分散データベース
Cassandra 分散データベース
あしたのオープンソース研究所  
 

More from あしたのオープンソース研究所   (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)