SlideShare a Scribd company logo
1 of 15
JSON CRDT
安田裕介
@TanUkkii007
共同編集アプリケーション
において
• 自分の編集が拒絶されるのはいやだ
• →書き込み時のロックやチェックではなく、読み
込み時のコンフリクト解決
• 自分の編集が上書きされるのはいやだ
• →システムサイドのコンフリクト解決ではなく、
アプリケーションサイドのコンフリクト解決
CRDT
• Conflict Free Replicated Data Types
• コンフリクトの自動解決が可能なデータ型
• コンフリクトを起こしても情報を欠落させない
• Counter, Set, Map, Registerなどがある
A comprehensive study of convergent and commutative
replicated data types
JSON CRDT
• M. Kleppmann & A R. Beresfordが考案
• A Conflict-Free Replicated JSON Datatype
• http://arxiv.org/abs/1608.03960
• CRDTを任意のネストが可能なデータ構造である
JSONに適用
実装
• https://github.com/fthomas/crjdt
• Scala & Scala.js
• Kleppmann & Beresfordの論文の擬似コードをDSL
として表現
• ScalaCheckを使ったプロパティーベーステストで
すべての法則を証明
使ってみる
Mapの同一キーへの代入
A Conflict-Free Replicated JSON Datatype
import crdt.json.playground.CRDTNodeToJson._
import eu.timepit.crjdt.core._
import eu.timepit.crjdt.core.syntax._
val initCmd = doc.downField("key") := "A"
val p0 = Replica.empty("p").applyCmd(initCmd)
p0.document.toJson
//{
// "key" : "A"
//}
def merge(r1: Replica, r2: Replica): Replica = {
r1.applyRemoteOps(r2.generatedOps)
}
val q0 = merge(Replica.empty("q"), p0)
q0.document.toJson
//{
// "key" : "A"
//}
val p1 = p0.applyCmd(doc.downField("key") :=
"B")
p1.document.toJson
//{
// "key" : "B"
//}
val q1 = q0.applyCmd(doc.downField("key") :=
"C")
q1.document.toJson
//{
// "key" : "C"
//}
val p2 = merge(p1, q1)
p2.document.toJson
//{
// "key" : "B",
// "key" : "C"
//}
val q2 = merge(q1, p1)
p2.document.toJson
//{
// "key" : "B",
// "key" : "C"
//}
{}で上書きされたMapの編集
A Conflict-Free Replicated JSON Datatype
import
crdt.json.playground.CRDTNodeToJson._
import eu.timepit.crjdt.core.Replica
import eu.timepit.crjdt.core.syntax._
def merge(r1: Replica, r2: Replica): Replica = {
r1.applyRemoteOps(r2.generatedOps)
}
val colors = doc.downField("colors")
val initCmd = colors.downField("blue") :=
"#0000ff"
val p0 = Replica.empty("p").applyCmd(initCmd)
p0.document.toJson
//{
// "colors" : {
// "blue" : "#0000ff"
// }
//}
val q0 = merge(Replica.empty("q"), p0)
q0.document.toJson
//{
// "colors" : {
// "blue" : "#0000ff"
// }
//}
val p1 = p0.applyCmd(colors.downField("red") := "#ff0000")
p1.document.toJson
//{
// "colors" : {
// "blue" : "#0000ff",
// "red" : "#ff0000"
// }
//}
val q1 = q0
.applyCmd(colors := `{}`)
.applyCmd(colors.downField("green") := "#00ff00")
q1.document.toJson
//{
// "colors" : {
// "green" : "#00ff00"
// }
//}
val p2 = merge(p1, q1)
p2.document.toJson
//{
// "colors" : {
// "red" : "#ff0000",
// "green" : "#00ff00"
// }
//}
val q2 = merge(q1, p1)
q2.document.toJson
//{
// "colors" : {
// "green" : "#00ff00",
// "red" : "#ff0000"
// }
//}
しくみ
レプリカ
• クライアントに相当
• レプリカ間で独立なJSONドキュメントの状態をもつ
• コマンドを適用してオペレーションを生成する
• yieldコマンドでオペレーションを他のレプリカに同期する
• オペレーションは因果関係を満たしつつドキュメントの状
態を更新する
コマンド
• ローカル変数の宣言:let x = EXPR
• 代入:x := v
• 挿入:EXPR.insert(v)
• 削除:EXPR.delete
• レプリカ間のオペレーションの同期とドキュメント
の更新:yield
オペレーション
• Id:Lamport タイムスタンプ(レプリカIDとオペレーションIDのペア)
• deps: 因果の依存。つまりどのオペレーションが適用されたドキュメン
トを編集しようとしてるのか。
• cur: カーソル。ドキュメントの位置
• mut: insert/delete/assign
case class Operation(id: Id, deps: Set[Id], cur: Cursor, mut: Mutation)
オペレーションの性質
• 結果整合性:レプリカにすべてのオペレーションを適
用すると、すべてのレプリカは必ず同じ状態になる
• 結合性(バッチに依存しない):a + (b + c) = (a + b) +
c
• 可換性(順番に依存しない): a + b = b + a
• 冪等性: a + a = a

More Related Content

What's hot

プログラマ目線から見たRDMAのメリットと その応用例について
プログラマ目線から見たRDMAのメリットとその応用例についてプログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットと その応用例についてMasanori Itoh
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Scott Wlaschin
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)NTT DATA Technology & Innovation
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす Akihiro Suda
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014Shigeru Hanada
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編Rakuten Group, Inc.
 
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜VirtualTech Japan Inc.
 
Githubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようGithubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようShingo Omura
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化についてSoudai Sone
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
Autonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションAutonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションオラクルエンジニア通信
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 

What's hot (20)

プログラマ目線から見たRDMAのメリットと その応用例について
プログラマ目線から見たRDMAのメリットとその応用例についてプログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットと その応用例について
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
Oracle GoldenGate入門
Oracle GoldenGate入門Oracle GoldenGate入門
Oracle GoldenGate入門
 
楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編楽天プロジェクトX:基幹DB移設 編
楽天プロジェクトX:基幹DB移設 編
 
Spark SQL - The internal -
Spark SQL - The internal -Spark SQL - The internal -
Spark SQL - The internal -
 
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
 
Githubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようGithubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみよう
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化について
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
Autonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションAutonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーション
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 

Viewers also liked

Architecture of Falcon, a new chat messaging backend system build on Scala
Architecture of Falcon,  a new chat messaging backend system  build on ScalaArchitecture of Falcon,  a new chat messaging backend system  build on Scala
Architecture of Falcon, a new chat messaging backend system build on ScalaTanUkkii
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc賢太郎 前多
 
Eventually-Consistent Data Structures
Eventually-Consistent Data StructuresEventually-Consistent Data Structures
Eventually-Consistent Data StructuresSean Cribbs
 
The ska meerkat project
The ska meerkat projectThe ska meerkat project
The ska meerkat projecthanamanjra
 
Cody Cours resume 2015
Cody Cours resume 2015Cody Cours resume 2015
Cody Cours resume 2015Cody Cours
 
Inspire DGT 創意部案例分享 20160509
Inspire DGT 創意部案例分享 20160509Inspire DGT 創意部案例分享 20160509
Inspire DGT 創意部案例分享 20160509inspire digital
 
Workshop: Best practices for undergraduate research experiences
Workshop: Best practices for undergraduate research experiencesWorkshop: Best practices for undergraduate research experiences
Workshop: Best practices for undergraduate research experiencesKirsten Zimbardi
 
Momondo Group - NOAH16 Berlin
Momondo Group - NOAH16 BerlinMomondo Group - NOAH16 Berlin
Momondo Group - NOAH16 BerlinNOAH Advisors
 
Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...
Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...
Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...ADR Nord
 
Ceramicas 141120210405-conversion-gate02
Ceramicas 141120210405-conversion-gate02Ceramicas 141120210405-conversion-gate02
Ceramicas 141120210405-conversion-gate02GAMA FILHO
 
CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...
CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...
CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...ADR Nord
 
タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発HIDEKAZU MATSUURA
 
А. Илларионов - Предчувствие катастрофы
А. Илларионов - Предчувствие катастрофыА. Илларионов - Предчувствие катастрофы
А. Илларионов - Предчувствие катастрофыguest743108
 
Jani voert drastische boekhoudkundige wijziging door bij firma
Jani voert drastische boekhoudkundige wijziging door bij firmaJani voert drastische boekhoudkundige wijziging door bij firma
Jani voert drastische boekhoudkundige wijziging door bij firmaThierry Debels
 

Viewers also liked (20)

Architecture of Falcon, a new chat messaging backend system build on Scala
Architecture of Falcon,  a new chat messaging backend system  build on ScalaArchitecture of Falcon,  a new chat messaging backend system  build on Scala
Architecture of Falcon, a new chat messaging backend system build on Scala
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
 
2016年9月Facebookページ投稿クリック数ランキング20
2016年9月Facebookページ投稿クリック数ランキング202016年9月Facebookページ投稿クリック数ランキング20
2016年9月Facebookページ投稿クリック数ランキング20
 
Eventually-Consistent Data Structures
Eventually-Consistent Data StructuresEventually-Consistent Data Structures
Eventually-Consistent Data Structures
 
The ska meerkat project
The ska meerkat projectThe ska meerkat project
The ska meerkat project
 
AD.RESUME
AD.RESUMEAD.RESUME
AD.RESUME
 
Cody Cours resume 2015
Cody Cours resume 2015Cody Cours resume 2015
Cody Cours resume 2015
 
Inspire DGT 創意部案例分享 20160509
Inspire DGT 創意部案例分享 20160509Inspire DGT 創意部案例分享 20160509
Inspire DGT 創意部案例分享 20160509
 
Workshop: Best practices for undergraduate research experiences
Workshop: Best practices for undergraduate research experiencesWorkshop: Best practices for undergraduate research experiences
Workshop: Best practices for undergraduate research experiences
 
Momondo Group - NOAH16 Berlin
Momondo Group - NOAH16 BerlinMomondo Group - NOAH16 Berlin
Momondo Group - NOAH16 Berlin
 
Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...
Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...
Unitatea de Implementare a Grantului Acordat de Agenția Austriacă pentru Dezv...
 
портфоліо грубляк л. г
портфоліо грубляк л. гпортфоліо грубляк л. г
портфоліо грубляк л. г
 
Дистанционные обучение в школе
Дистанционные обучение в школеДистанционные обучение в школе
Дистанционные обучение в школе
 
Тяжелые металлы и их влияние на растения
Тяжелые металлы и их влияние на растенияТяжелые металлы и их влияние на растения
Тяжелые металлы и их влияние на растения
 
El ayuno y la moda
El ayuno y la modaEl ayuno y la moda
El ayuno y la moda
 
Ceramicas 141120210405-conversion-gate02
Ceramicas 141120210405-conversion-gate02Ceramicas 141120210405-conversion-gate02
Ceramicas 141120210405-conversion-gate02
 
CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...
CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...
CADRUL LEGISLATIV, INSTITUŢIONAL ȘI STRATEGIC al politicii dezvoltării region...
 
タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発タイムボックス制約付きインクリメンタル開発
タイムボックス制約付きインクリメンタル開発
 
А. Илларионов - Предчувствие катастрофы
А. Илларионов - Предчувствие катастрофыА. Илларионов - Предчувствие катастрофы
А. Илларионов - Предчувствие катастрофы
 
Jani voert drastische boekhoudkundige wijziging door bij firma
Jani voert drastische boekhoudkundige wijziging door bij firmaJani voert drastische boekhoudkundige wijziging door bij firma
Jani voert drastische boekhoudkundige wijziging door bij firma
 

Similar to JSON CRDT

Data processing at spotify using scio
Data processing at spotify using scioData processing at spotify using scio
Data processing at spotify using scioJulien Tournay
 
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Masafumi Okada
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるShintaro Fukushima
 
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringRedis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringMakoto Ohnami
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTterurou
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 
Guide for Swift and Viewer app
Guide for Swift and Viewer appGuide for Swift and Viewer app
Guide for Swift and Viewer appShintaro Kaneko
 

Similar to JSON CRDT (10)

Data processing at spotify using scio
Data processing at spotify using scioData processing at spotify using scio
Data processing at spotify using scio
 
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみる
 
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringRedis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
 
第5回LinkedData勉強会@yayamamo
第5回LinkedData勉強会@yayamamo第5回LinkedData勉強会@yayamamo
第5回LinkedData勉強会@yayamamo
 
RとCDISC
RとCDISCRとCDISC
RとCDISC
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LT
 
Azure DataLake 大全
Azure DataLake 大全Azure DataLake 大全
Azure DataLake 大全
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
Guide for Swift and Viewer app
Guide for Swift and Viewer appGuide for Swift and Viewer app
Guide for Swift and Viewer app
 

More from TanUkkii

Distributed ID generator in ChatWork
Distributed ID generator in ChatWorkDistributed ID generator in ChatWork
Distributed ID generator in ChatWorkTanUkkii
 
Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...
Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...
Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...TanUkkii
 
Akka Clusterの耐障害設計
Akka Clusterの耐障害設計Akka Clusterの耐障害設計
Akka Clusterの耐障害設計TanUkkii
 
スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成TanUkkii
 
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
すべてのアクター プログラマーが知るべき 単一責務原則とは何かすべてのアクター プログラマーが知るべき 単一責務原則とは何か
すべてのアクター プログラマーが知るべき 単一責務原則とは何かTanUkkii
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門TanUkkii
 
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
Scalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングScalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングTanUkkii
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語ScalaTanUkkii
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6TanUkkii
 

More from TanUkkii (15)

Distributed ID generator in ChatWork
Distributed ID generator in ChatWorkDistributed ID generator in ChatWork
Distributed ID generator in ChatWork
 
Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...
Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...
Non-blocking IO to tame distributed systems ー How and why ChatWork uses async...
 
Akka Clusterの耐障害設計
Akka Clusterの耐障害設計Akka Clusterの耐障害設計
Akka Clusterの耐障害設計
 
WaveNet
WaveNetWaveNet
WaveNet
 
スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成スケールするシステムにおけるエンティティの扱いと 分散ID生成
スケールするシステムにおけるエンティティの扱いと 分散ID生成
 
Akka HTTP
Akka HTTPAkka HTTP
Akka HTTP
 
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
すべてのアクター プログラマーが知るべき 単一責務原則とは何かすべてのアクター プログラマーが知るべき 単一責務原則とは何か
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門
 
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
Scalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングScalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリング
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 

JSON CRDT