SlideShare ist ein Scribd-Unternehmen logo
1 von 33
データフォーマットいろいろ
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

Weitere ähnliche Inhalte

Was ist angesagt?

Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座Samir Hammoudi
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜Takahiro Inoue
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 

Was ist angesagt? (20)

NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 

Andere mochten auch

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 FinchSeiya Mizuno
 
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おうHiroshi Nakagawa
 
差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方Hiroshi Nakagawa
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門Yuichi Ito
 

Andere mochten auch (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
 
Google Protocol Buffers
Google Protocol BuffersGoogle Protocol Buffers
Google Protocol Buffers
 
Introduction to Finch
Introduction to FinchIntroduction to Finch
Introduction to Finch
 
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう
 
差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方差分プライバシーによる時系列データの扱い方
差分プライバシーによる時系列データの扱い方
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 

Ähnlich wie Apache Avro vs Protocol Buffers

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_arrowKohei 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
 
20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formationAmazon Web Services Japan
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)Akio Katayama
 
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 physicalcomputingNoboru 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-01Ruo Ando
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 

Ähnlich wie Apache Avro vs Protocol Buffers (20)

20010901
2001090120010901
20010901
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
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. ~
 
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. ~
 
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
 
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回-
 
20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation20120402 aws meister-reloaded-cloud-formation
20120402 aws meister-reloaded-cloud-formation
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)AWSマイスターシリーズReloaded(AWS Cloudformation)
AWSマイスターシリーズReloaded(AWS Cloudformation)
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
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
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 

Mehr von Seiya Mizuno

Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitSeiya 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 StreamsSeiya Mizuno
 
The future of Apache Hadoop YARN
The future of Apache Hadoop YARNThe future of Apache Hadoop YARN
The future of Apache Hadoop YARNSeiya Mizuno
 
Yarn application-master
Yarn application-masterYarn application-master
Yarn application-masterSeiya Mizuno
 
Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-managerSeiya Mizuno
 

Mehr von Seiya Mizuno (7)

Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
 
SysML meetup
SysML meetupSysML meetup
SysML meetup
 
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
 
Prometheus
PrometheusPrometheus
Prometheus
 
The future of Apache Hadoop YARN
The future of Apache Hadoop YARNThe future of Apache Hadoop YARN
The future of Apache Hadoop YARN
 
Yarn application-master
Yarn application-masterYarn application-master
Yarn application-master
 
Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-manager
 

Apache Avro vs Protocol Buffers