SlideShare a Scribd company logo
データフォーマットいろいろ
Seiya Mizuno @ Saint1991
おしながき
 Protocol Buffers vs Apache Avro vs Apache Thrift
パフォーマンス比較 (Protocol Buffers vs Avro vs Thrift vs JSON vs CSV)
何が違うの?
結局どっちをつかえばいいの?
 Avroのデータ管理術
 データのSchema互換性
データ取り込みのアーキテクチャ例
 GCPならこんな感じ
2
Protocol Buffers, Avro, Thrift
 システム間で効率よくデータのやりとりをするためのシステム
3
Data
user_name Martin
favorite_number 1337
interests daydreaming
syntax = "proto3";
message Person {
string user_name = 1;
int64 favourite_number = 2;
repeated string interests = 3;
}
Schema
0a 06 4d 61 72 74 69 6e ….
Schemaに基づいた
データのEncode/Decode
効率のよいバイナリフォーマット
多言語間でのデータ交換
Protocol Buffers, Avro, Thrift

省リソース: 速い、通信路の帯域も節約できる.

boilerplate削減: 各言語で別個にmodelクラスを書く必要がなくなる.
( Protocol Buffers & Thrift )

破損安全性: 受信した時にデータが壊れている、というようなケースが減る.
4
Schemaに基づいたデータの Encode / Decode
効率のよいバイナリフォーマット
多言語間でのデータ交換
ベンチマーク

5
message Nobid {
int32 adnw_id = 1;
string app_name = 2;
string auction_id = 3;
string host = 4;
string logged_at = 5;
int32 m_id = 6;
int32 nbr = 7;
string page = 8;
int32 res_time = 9;
samples.Spot spot = 10;
repeated string history = 11;
map<string, string> tags = 12;
}
ベンチマーク (Processing time)
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
JSON Avro Protocol Buffers
(proto3)
Thrift (compact
protocol)
CSV
Encoding time (sec) Decoding time (sec)
6
速すぎる…
※独自調べ
ベンチマーク (データサイズ) 7
0
0.5
1
1.5
2
2.5
3
3.5
JSON Avro Protocol Buffers
(proto3)
Thrift (compact
protocol)
CSV
※独自調べ
JSON以外はまぁ優秀
ベンチマーク総評
 JSONより圧倒的に速い
 データサイズもJSONの半分ぐらい
サイズが一番小さくなるのは Avro
 ※ Protocol Buffersだけ異常に速いのは多分実装の問題
 逆に言うと下手に書きようがないくらい簡単に使えるということでもある.
8
ベンチマーク総評
 CSVは小さいし速いがそもそもフォーマットとしての表現力が乏しい
 ネストした構造が取れない
 破損レコードも多いし紛れもないゴミフォーマット
9
何故効率が良くなるのか (Protocol Buffers)
 フィールドのkeyがとるスペースの分効率がよくなる.
 整数値が可変長エンコードになる.
10
message Person {
string user_name = 1;
int64 favourite_number = 2;
…
}
Schema
0 0 0 0 1 0 1 0
wire type
string
field index
1
文字列長 文字列のUTF8
0 0 0 1 0 0 0 0
2 varint
整数の可変長表記
小さい数ほど少ない
バイト数で表せるエンコード
フィールド名でなく
indexの値でエンコード
各フィールドに
indexを振る
Stringだとあまり
効率は上がらない…
何故効率が良くなるのか (Avro)
 Avroはさらに型, indexの値も排除しデータの内容のみ
11
0 0 0 0 1 0 1 0
wire type
string
field index
1
文字列長 文字列のUTF8
0 0 0 1 0 0 0 0
2 varint
整数の可変長表記
フィールド名でなく
indexの値でエンコード
{
"name": "Person", "type": "record”,
"fields": [
{"name":"userName","type":"string"},
{"name":"favouriteNumber","type":"long"}
]
}
SchemaSchema
Avroはindexも型も
データには入ってない
つまり…?
 小さい値をとる整数値のフィールドが多いほど、ご利益が大きい.
 JSONだと名前が長いフィールド数が多いほど損をしている…
12
やめよう、CSV, JSON
Protocol BuffersとAvro
どちらを選ぶべき…?
Protocol Buffers vs Avro
 Schemaからモデルクラスを
事前に生成
14
 事前のコード生成不要
 Schemaに基づくEncode/Decode
Schema
case class Person(
userName: String, favroriteNumber
) {
def toByteArray(): Array[Byte]
}
type Person struct {
…
}
person := &pb.Person{}
proto.unmarshall(person)
Encode
Decode
生成
val person = Person(“martin”, 23)
…
new SpecificDatumWriter[Person](Schema)
.write(person, encoder)
codec := goavro.NewCodec(schema)
…
person, _ := codec.Decode(reader)
Schema
Schema
Encode
Decode
生成したモデルクラスにByte配列との変換が
ストレートに定義されていてかなり簡単に使える
Protocol Buffers vs Avro
 Schemaからモデルクラスを
事前に生成
15
 事前のコード生成不要
 Schemaに基づくEncode/Decode
Schema
case class Person(
userName: String, favroriteNumber
) {
def toByteArray(): Array[Byte]
}
type Person struct {
…
}
person := &pb.Person{}
proto.unmarshall(person)
Encode
Decode
生成
val person = Person(“martin”, 23)
…
new SpecificDatumWriter[Person](Schema)
.write(person, encoder)
codec := goavro.NewCodec(schema)
…
person, _ := codec.Decode(reader)
Schema
Schema
Encode
Decode
Schemaを渡してエンコード/デコードを行う
クラスインスタンスを生成して使う
使い方が簡単!!
遅くなりようがないほどにシンプル
カラムの追加にリビルドが必要
16
使い方はやや難しい
何をするにもSchemaが付きまとう
カラムを追加してもリビルド不要
データ生成元 データ利用
Martin
1337
Martin
1337
daydreaming
カラム追加
Martin
1337
リビルド前
Martin
1337
daydreaming
リビルド後
受信側で新しいフィールドを
デコードするにはサーバを一旦止める必要がある
Protocol Buffers vs Avro
データ生成元 データ利用
Schema管理の仕組みを整えればサーバを
止めなくても新しいフィールドをデコード可能
Martin
1337
Schema
Martin
1337
Schema
Schema
Martin
1337
daydreaming
Schema
Martin
1337
daydreaming
使い方が簡単!!
遅くなりようがないほどにシンプル
カラムの追加にリビルドが必要
17
使い方はやや難しい
何をするにもSchemaが付きまとう
カラムを追加してもリビルド不要
データ生成元 データ利用
Martin
1337
Martin
1337
daydreaming
カラム追加
Martin
1337
リビルド前
Martin
1337
daydreaming
リビルド後
受信側で新しいフィールドを
デコードするにはサーバを一旦止める必要がある
Protocol Buffers vs Avro
データ生成元 データ利用
Schemaさえあればサーバを止めなくても
新しいフィールドをデコード可能
Martin
1337
Schema
Martin
1337
Schema
Schema
Martin
1337
daydreaming
Schema
Martin
1337
daydreaming
結論 (あくまで個人の見解です
 Avroがオススメなケース
とにかくデータを軽くしたい
データ生成元のシステムとデータを使うシステムの開発の
ライフサイクルが違う
 BigQueryで使いたい
 その他の場合はProtocol Buffers
圧倒的に書くのが楽なので…
18
※後で軽くふれます
おしながき
 Protocol Buffers vs Apache Avro vs Apache Thrift
パフォーマンス比較 (Protocol Buffers vs Avro vs Thrift vs JSON vs CSV)
何が違うの?
結局どっちをつかえばいいの?
 Avroのデータ管理術
 データのSchema互換性
 データ取り込みのアーキテクチャ例
 GCPならこんな感じ
19
Dive into Apache Avro
 Avroではデータにフィールドの情報が一切入っていないため、
デコードに必ずそのデータのエンコードに使用したSchemaが必要
20
データ生成元 データ利用
Martin
1337
Schema
0a 06 4d 61 72 74 69 6e ….
Schema
こいつらだけを頼りに
デコードする
Jordan
23
BULLS
Schema Schema
生成側と受信側で
全く同じSchemaが必要
Dive into Apache Avro
 Avroではデータにフィールドの情報が一切入っていないため、
デコードに必ずそのデータのエンコードに使用したSchemaが必要
21
データ生成元 データ利用
Martin
1337Schema
0a 06 4d 61 72 74 69 6e ….
Schema
Jordan
23
BULLS
Schema
Schema
どうやって受信側はSchemaを取得するの?
Schemaが違うデータが一緒に流れてるけど
一緒に保存して大丈夫だっけ…?
こいつらだけを頼りに
デコードする
一緒に保存して良いデータとは…?
 データは分析に利用するもの、分析環境で一緒に使える
データ同士をまとめて保存すべき!!
22
hdfs://topic1/v1/parquet/…
hdfs://topic1/v2/parquet/…
Big Query
互換性のあるデータ同士のみが
一緒に読み出せる
GCS
互換性のあるデータ同士を
同じパスに配置して管理するとよい
互換性 (Avroの場合)
 ※Avroの場合バイナリ配置に関する互換性ですが、
分析環境におけるデータの互換性にも通じるところがあります.
 というわけで、少しAvroのSchema互換性の話をします.
23
AvroのSchema互換性
 AvroではSchemaに定義されている全てのフィールドが
データから取り出せないと互換性がなくなってしまいます.
24
{
"name": "Person", "type": "record”,
"fields": [
{"name":"userName","type":"string"},
{"name":"favouriteNumber","type":"long"}
]
}
{
"name": "Person", "type": "record”,
"fields": [
{"name":"userName","type":"string"},
{"name":"favouriteNumber","type":"long"},
{"name":”age","type":”int"}
]
}
Martin
1337
フィールド追加
エンコード
user_name Martin
favorite_number 1337
age
値が決まらない!!
デコード
後方互換性なし
データを一緒に読み出せるように保つには…?
 後方互換性を維持したSchema変更をすることが重要
25
どうすれば互換性を保てたのか…?
 Avroでは各フィールドにデフォルト値を規定できる.
適切なデフォルト値とともにフィールドを追加することで互換性を維持できる.
26
{
"name": "Person", "type": "record”,
"fields": [
{"name":"userName","type":"string"},
{"name":"favouriteNumber","type":"long"}
]
}
{
"name": "Person", "type": "record”,
"fields": [
{"name":"userName","type":"string"},
{"name":"favouriteNumber","type":"long"},
{"name":”age","type":”int”,”default”: 0}
]
}
Martin
1337
フィールド追加
エンコード
user_name Martin
favorite_number 1337
age 0
値が決まる!!
デコード
後方互換性あり
Dive into Apache Avro
 Avroではデータにフィールドの情報が一切入っていないため、
デコードに必ずそのデータのエンコードに使用したSchemaが必要
27
データ生成元 データ利用
Martin
1337Schema
0a 06 4d 61 72 74 69 6e ….
Schema
Jordan
23
BULLS
Schema
Schema
どうやって受信側はSchemaを取得するの?
Schemaが違うデータが一緒に流れてるけど
一緒に保存して大丈夫だっけ…?
こいつらだけを頼りに
デコードする
TypeBook
 Schema Registryサーバ
 Schemaの中央管理
 RESTful APIで登録や、検索ができる.
 互換性ベースでSchemaをSemantic Versioning
28
v1 . 7 . 2
前方/後方互換が
維持された変更
後方互換のみが
維持された変更
後方互換が
崩れる変更
major versionが同じSchemaから生成されたデータは
最新のSchemaで読み出せることが保証される
GaneshaのAvro取り込み 29
TypeBook
Schema
hdfs://topic1/v1/parquet/…
hdfs://topic1/v2/parquet/…
schema_id: 1
Martin
1337
schema_id: 2
Jordan
23
18
1. データの前にSchema IDを
付与して送信
2. IDをもとにTypeBookから
Schema(とそのversion)を
取得してデコード
Schema
データ生成元
3. versionから互換性が分かるので
それに応じて適切なパスに配置
GCPでも… 30
TypeBook on GKE
Schema
Schema
データ生成元
Pub/Sub Dataproc
or
Dataflow GCS
Big Query
gs://topic1/v1/parquet/…
gs://topic1/v2/parquet/…
手軽にほぼ同じ構成が作れます!
BigQuery with Avro
 BigQueryはAvroを公式にサポートしている.
 Avroファイルの先頭にSchemaを書いておくと、自動でカラム名、型などを
抽出してくれます!
 後方互換をもつファイルなら一括ロード可能なのは検証済み!
31
まとめ
 CSV, JSONで許されるのは個人開発まで!
Protocol Buffers Avroを使いましょう!!!
 BigQueryを使うならAvroオススメです.
 TypeBookでSchemaの管理は楽できるのでぜひ!!
32
リファレンス
 ベンチマークなどなどに使ったサンプルコード
 Scalaから使うシンプルな例になってます.
• Protocol Buffers >>>> Avro >> Thriftのシンプルさの違いが垣間見えるのでぜひ!
 ベンチマークへの不服はPRしていただけると嬉しいです.
 TypeBook (そのうちOSSにします)
 公式以外の良リファレンス
もはやこれのパクリ発表だったといっても過言ではない
33
https://github.com/Saint1991/samples/tree/master/scala/serialization
https://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html
https://github.com/CyberAgent/ganesha-schema-registry
Ad

More Related Content

What's hot (20)

Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門
Yahoo!デベロッパーネットワーク
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
Toru Makabe
 
最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り
Sotaro Kimura
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
Tetsutaro Watanabe
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
Toru Makabe
 
最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り
Sotaro Kimura
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
Tetsutaro Watanabe
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
 

Viewers also liked (6)

Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
Seiya Mizuno
 
Google Protocol Buffers
Google Protocol BuffersGoogle Protocol Buffers
Google Protocol Buffers
Sergey Podolsky
 
Introduction to Finch
Introduction to FinchIntroduction to Finch
Introduction to Finch
Seiya Mizuno
 
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう
Hiroshi Nakagawa
 
差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方
Hiroshi Nakagawa
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
Seiya Mizuno
 
Introduction to Finch
Introduction to FinchIntroduction to Finch
Introduction to Finch
Seiya Mizuno
 
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう
Hiroshi Nakagawa
 
差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方
Hiroshi Nakagawa
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
 
Ad

Similar to Apache Avro vs Protocol Buffers (20)

RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
Shinichiro Isago
 
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
SORACOM, INC
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)
Akio Katayama
 
20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation
Amazon Web Services Japan
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
Yuto Takei
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
Noboru Irieda
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 
Css2014 ruo ando_2014-10-23-01
Css2014 ruo ando_2014-10-23-01Css2014 ruo ando_2014-10-23-01
Css2014 ruo ando_2014-10-23-01
Ruo Ando
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
Atsuhiro Kubo
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
Shinichiro Isago
 
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
SORACOM, INC
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)
Akio Katayama
 
20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation
Amazon Web Services Japan
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
Yuto Takei
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
Noboru Irieda
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 
Css2014 ruo ando_2014-10-23-01
Css2014 ruo ando_2014-10-23-01Css2014 ruo ando_2014-10-23-01
Css2014 ruo ando_2014-10-23-01
Ruo Ando
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
Atsuhiro Kubo
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
 
Ad

More from Seiya Mizuno (7)

Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
Seiya Mizuno
 
SysML meetup
SysML meetupSysML meetup
SysML meetup
Seiya Mizuno
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka StreamsConnect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
Seiya Mizuno
 
Prometheus
PrometheusPrometheus
Prometheus
Seiya Mizuno
 
The future of Apache Hadoop YARN
The future of Apache Hadoop YARNThe future of Apache Hadoop YARN
The future of Apache Hadoop YARN
Seiya Mizuno
 
Yarn application-master
Yarn application-masterYarn application-master
Yarn application-master
Seiya Mizuno
 
Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-manager
Seiya Mizuno
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
Seiya Mizuno
 
Connect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka StreamsConnect S3 with Kafka using Akka Streams
Connect S3 with Kafka using Akka Streams
Seiya Mizuno
 
The future of Apache Hadoop YARN
The future of Apache Hadoop YARNThe future of Apache Hadoop YARN
The future of Apache Hadoop YARN
Seiya Mizuno
 
Yarn application-master
Yarn application-masterYarn application-master
Yarn application-master
Seiya Mizuno
 
Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-manager
Seiya Mizuno
 

Apache Avro vs Protocol Buffers