SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Binlog Events で
ストリーム処理してみた
ヤフー株式会社
三谷 智史
自己紹介
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
2
• 三谷 智史(@mita2)
• 所属
ヤフー(株)
DBMS技術
• RDB専門部隊 13名
• DB Administration 黒帯
本日の流れ
1. Yahoo JAPAN! のMySQL 利用状況
2. ストリーム処理の利点
3. Binlog Events を検証してみた
1. サンプルコード解説
2. 更新内容を取り出す方法
3. ありそうで、なかった機能
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
3
本日の流れ
1. Yahoo JAPAN! のMySQL 利用状況
2. ストリーム処理の利点
3. Binlog Events を検証してみた
1. サンプルコード解説
2. 更新内容を取り出す方法
3. ありそうで、なかった機能
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
4
Yahoo! JAPANのMySQL環境
• Yahoo!ニュース、Yahoo!ショッピン
グ、Yahoo!ブログ、Yahoo!路線 etc
ほぼ全サービスで利用
• 約550DB
構成
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
6
サーバ台数
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
7
• 約220台
• オンプレです
• 容量18TB
• ※ マスターのみカウント
マスター
サーバ
スレーブ
サーバ
バックアップ用
スレーブ
サーバ構成比率
共有ストレージのHAです
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
8
• 複数MySQLを集約
• 商用ストレージ
• 詳細:
「レプリケーションを使わない」
でWEB検索
共有ストレージのHAです
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
9
• 複数MySQLを集約
• 商用ストレージ
• 詳細:
「レプリケーションを使わない」
でWEB検索
Oracle Clusterware
使ってます
Oracle Clusterware
使ってます
世間で実績の少なそうな?機能の実績
• 5.6 + GTID
• 100DB以上で動かしてますが問題ないです
• パーティション
• 20DB以上で採用
• DROP PARITTIONによる高速データ削除
• ALTERに問題あり、使うなら5.6から… (Bug 77318)
• InnoDBテーブル 圧縮
• 20DB以上で採用。READ IO減ってかなりGOOD。
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
10
We love MySQL
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
11
0
100
200
300
400
500
600
We Love
本日の流れ
1. Yahoo JAPAN! のMySQL 利用状況
2. ストリーム処理の利点
3. Binlog Events を検証してみた
1. サンプルコード解説
2. 更新内容を取り出す方法
3. ありそうで、なかった機能
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
12
Yahoo! におけるストリーム処理
13
• 設立初期からストリーム処理を活用
• fluentd的なミドルウェア
決済システム
購入処理購入処理
Log
Reader
Log
Reader
Log
Consumer
Log
Consumer
Log
Consumer
Log
Consumer
トランザク
ションログ
トランザク
ションログ
ECサービス
システム
ストレージサービス
システム
キャンペーン
フラグON
容量増量
フラグON
プレミアム
会員購入 非同期転送
処理イメージ、実際とは異なります
ストリーム処理の3つの利点
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
14
1.スケールアウト
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
15
スケールアウトしやすいスケールアウトしやすい
決済システム
購入処理購入処理
Log
Reader1
Log
Reader1
Log
Consumer2
Log
Consumer2
Log
Consumer1
Log
Consumer1
トランザク
ションログ
トランザク
ションログ
ECサービス
システム
キャンペーン
フラグON
Log
Reader2
Log
Reader2
ユーザIDで
分散
ユーザIDで
分散
2.連携先の影響を受けにくい
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
16
連携先の影響を受けにくい連携先の影響を受けにくい
決済システム
購入処理購入処理
Log
Reader
Log
Reader
Log
Consumer
Log
Consumer
Log
Consumer
Log
Consumer
トランザク
ションログ
トランザク
ションログ
ECサービス
システム
ストレージサービス
システム
キャンペーン
フラグON
容量増量
フラグON
非同期転送
DOWNDOWN
3.リアルタイム
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
17
リアルタイムリアルタイム
☆ チン マチクタビレタ~
マチクタビレタ~
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < MySQLでストリーム処理まだ~
\_/⊂ ⊂_ ) \_____________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
18
(社内の声)
本日の流れ
1. Yahoo JAPAN! のMySQL 利用事例
2. ストリーム処理の利点
3. Binlog Events を検証してみた
1. サンプルコード解説
2. 更新内容を取り出す方法
3. ありそうで、なかった機能
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
19
MySQL Binlog Events
• バイナリログを用いたストリーム処理ができる
• MySQL Labs で公開中(2015/12現在)
• 昔はBinlog APIっていうやつがあったらしい
• C++ libraries
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
20
利用イメージ
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
21
決済システム
購入処理購入処理
BinlogEvents
を使ったプログラム
BinlogEvents
を使ったプログラム
バイナリログバイナリログ
ECサービス
システム
ストレージサービス
システム
キャンペーン
フラグON
容量増量
フラグON
非同期転送
処理イメージ
• さっきの例だとこう
BinlogEvents
を使ったプログラム
BinlogEvents
を使ったプログラム
まずはサンプルコード
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
22
Binlog Eventsのビルド
• Labs から mysql-binlog-events-1.0.1-src.tar.gz をDL
• サンプルが同梱されてます
• mysql-devel パッケージだけではビルド不可
• MySQL5.7 のソースもダウンロードしましょう
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
23
$ cmake -DMYSQLCLIENT_STATIC_LINKING:BOOL=TRUE ¥
-DMYSQL_DIR=/usr/bin ¥
-DMYSQL_SOURCE_INCLUDE_DIR=<ソース置いた場所>/include ¥
-DENABLE_DOWNLOADS=1 .
$ make
$ cd example
$ make
接続先はどのバージョンでも大丈夫
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
24
MySQL 5.5
MySQL 5.6
MySQL 5.7
CHANGE LOG
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
25
############################
ChangeLog for Binary Log API
############################
Release 0.1.0 (released April 20, 2013)
---------------------------------------
* BAPI-1: In the binlog-replication-listener library,
mysql::Binary_log::connect function does not abort when
non-existent file name or server is provided
付属のサンプルは3つ
• basic-1
• basic-2
• binlog-browser
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
26
付属のサンプルは3つ
• basic-1
• basic-2
• binlog-browser
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
27
basic-1
• URI の書き方
mysql://user:password@localhost:3306
file:///var/lib/mysql/mysql-bin.000002
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
28
$ ./basic-1 mysql://root:Password123_@localhost:3306
basic-1 のソース - 接続方法
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
29
Binary_log_driver *drv= create_transport(argv[1]);
if (drv == NULL)
return 1;
Binary_log binlog(drv);
if (binlog.connect() != ERR_OK)
{
delete drv;
return 1;
}
URIを渡して接続URIを渡して接続
basic-1 を動かしてみる
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
30
$ ./basic-1 mysql://root:Password123_@localhost:3306
Found event of type 2
Found event of type 19
Found event of type 30
mysql> CREATE TABLE `mytable` ~
mysql> INSERT INTO mytable (v1) VALUES('abc');
イベントとは
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
31
QueryQuery BEGINBEGIN
Table_MapTable_Map 処理する対象テーブルの指定処理する対象テーブルの指定
Write_rowsWrite_rows INSERT INTO ~INSERT INTO ~
Update_rowsUpdate_rows UPDATE ~UPDATE ~
• 1つのトランザクションは複数イベントで構成
• 「Table_Map」や「Rotate」など特殊なイベン
トもある
イベントタイプ イベント内容(イメージ)
トランザクション
POS
POS
POS
POS
EVENT_TYPE 一覧
Unknown
Start_v3
Query
Stop
Rotate
Intvar
Load
Slave
Create_file
Append_block
Exec_load
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
32
Delete_file
New_load
RAND
User var
Format_desc
Xid
Begin_load_query
Execute_load_query
Table_map
Write_rows_event_old
Update_rows_event_old
Delete_rows_event_old
Write_rows_v1
Update_rows_v1
Delete_rows_v1
Incident
Heartbeat
Ignorable
Rows_query
Write_rows
Update_rows
Delete_rows
Gtid
Anonymous_Gtid
Previous_gtids
User Defined
付属のサンプルは3つ
• basic-1
• basic-2
• binlog-browser
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
33
basic-2 を動かしてみる
• SQLが表示される・・・?
• basic-2 はバグってます
• 本当は 変数 を値に置換してSQLを表示する
プログラムです
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
34
$ ./basic-2 mysql://root:Password123_@localhost:3306
create table mytable (pk serial, v1 varchar(255))
BEGIN
insert into mytable (v1) values(@myvar) 置換されてない置換されてない
なおしました
パッチ
https://gist.github.com/anonymous/02593d4981ac826f9837
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
35
basic-2 を動かしてみる(修正ver)
• binlog_format=STATEMENTで動かしましょう
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
36
$ ./basic-2 mysql://root:Password123_@localhost:3306
create database hogex
create table mytable (pk serial, v1 varchar(255))
insert into mytable (v1) values(123) @myvarが置換される@myvarが置換される
mysql> CREATE TABLE mytable (pk SERIAL, v1 VARCHAR(5));
mysql> SET @myvar=“123”;
mysql> INSERT INTO mytable (v1) VALUES(@myvar);
basic-2 のソース
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
37
basic-2 のソース - main
Map variables;
Save_variables<Map> save_variables(variables);
Content_stream_handler handler;
handler.add_listener(save_variables);
Replace_variables<Map> replace_variables(variables);
handler.add_listener(replace_variables);
<snip>
while (true)
{
int error_number;
error_number= drv->get_next_event(&buf_and_len);
<snip>
handler.handle_event(&event);
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
38
ハンドラーを生成ハンドラーを生成
ハンドラーを登録ハンドラーを登録
バイナリログから
イベントを読み取る
バイナリログから
イベントを読み取る
登録したハンドラーに
イベントを渡してを処理
登録したハンドラーに
イベントを渡してを処理
ループループ
Binlog Events の設計思想
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
39
Get_next_eventGet_next_event
ループループ
ループ
コンテンツハンドラ
(クラス)
コンテンツハンドラ
(クラス)
- process_event(Delete_rows)
- process_event(Write_rows)
- process_event(Delete_rows)
- process_event(Write_rows)
コンテンツハンドラコンテンツハンドラ
コンテンツハンドラコンテンツハンドラ
• 1イベントごとにハンドラで定義し
たprocess_eventが呼び出される
• イベントタイプごとに処理したい内
容をコーディングする
• コンテンツハンドラは複数設定可能
INSERTされたとき
に実施したい処理を
書く
INSERTされたとき
に実施したい処理を
書く
Save_variablesコンテンツハンドラ
template <class AssociativeContainer>
class Save_variables : public Content_handler {
Binary_log_event *process_event(User_var_event *event) {
std::string a(event->val, 0, event->val_len);
m_var[event->name] = a;
return event;
}
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
40
変数のSETイベント
を受け入れる
例)SET @abc = 123
変数のSETイベント
を受け入れる
例)SET @abc = 123
val には値(123)が
入ってる
val には値(123)が
入ってる
グローバル変数のハッシュに
登録しておく
例)m_var[abc] = 123
グローバル変数のハッシュに
登録しておく
例)m_var[abc] = 123
Replace_variablesコンテンツハンドラ
Binary_log_event *process_event(Query_event *event) {
std::string query = event->query;
size_t start, end = 0;
while (true) {
start = query.find_first_of("@", end);
if (start == std::string::npos)
break;
end = query.find_first_not_of("abcdefghijklmnopqrstuvwxyz", start+1);
std::string key = query.substr(start + 1, end - start - 1);
query.replace(start, end - start, "'" + m_var[key] + "'");
}
event->query= query.c_str();
return event;
}
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
41
クエリから@を探すクエリから@を探す
@に続く英字の位置を検索@に続く英字の位置を検索
@~ を置換@~ を置換
クエリに対する
イベントのみ処理する
クエリに対する
イベントのみ処理する
Save_variablesで
保存しておいたもの
Save_variablesで
保存しておいたもの
付属のサンプルは3つ
• basic-1
• basic-2
• binlog-browser
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
42
binlog-browser
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
43
$ ./binlog-browser mysql://root:Password123_@localhost:3306
Start Position End Position Event Length Event Type
219 344 125 Query[2]
Event Info: use `hoge`; create table mytable (pk serial, v1 varchar(255))
344 409 65 Anonymous_Gtid[34]
Event Info:
409 482 73 Query[2]
Event Info: BEGIN
482 536 54 Table_map[19]
Event Info: table id: 109 (hogex.mytable)
536 584 48 Write_rows[30]
Event Info: table id: 109 flags: Last event of the statement
584 615 31 Xid[16]
Event Info: Xid ID=26
binlog-browser のソース
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
44
Binary_log_driver *drv= create_transport(uri.c_str());
Binary_log binlog(drv);
int error_number= binlog.connect();
if (const char* msg= str_error(error_number))
cerr << msg << endl;
<snip>
if (binlog.set_position(opt_start_pos) != ERR_OK)
{
cerr << "The specified position "
<< opt_start_pos
<< " cannot be set"
<< endl;
return 1;
}
引数で指定したポジション
にジャンプ
引数で指定したポジション
にジャンプ
バイナリログから更新内容
を取り出すには?
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
45
サンプルコードにはない
• tests/replaybinlog.cpp が参考になります
• ・・・これも動かなかった orz
• Binlog API のテストコードっぽい
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
46
値を取り出すサンプル
https://gist.github.com/anonymous/
4f9e59a6e22593fdcaf0
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
47
カラムの値をとるコード
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
48
Binary_log_event *process_event(binary_log::Rows_event *event) {
Int2event_map::iterator ti_it= m_table_index.find(event->get_table_id());
binary_log::Row_event_set rows(event, ti_it->second);
binary_log::Row_of_fields fields= *row_it;
if (event->get_event_type() == binary_log::WRITE_ROWS_EVENT ||
event->get_event_type() == binary_log::WRITE_ROWS_EVENT_V1) {
std::cout << event_start_pos << "¥tINSERT¥t" <<
ti_it->second->m_dbnam << "." << ti_it->second->m_tblnam << "¥t";
binary_log::Row_of_fields::iterator field_it= fields.begin();
binary_log::Converter converter;
if (field_it != fields.end()) {
do {
std::string str;
converter.to(str, *field_it);
std::cout << str << "¥t";
} while (++field_it != fields.end());
ROWモードの
イベントを受け取る
ROWモードの
イベントを受け取る
INSERTの場合INSERTの場合
バイナリをデコードバイナリをデコード
直前のTable_Map
イベントからテーブル情報を
取得
直前のTable_Map
イベントからテーブル情報を
取得
実行例
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
49
$ ./decode mysql://root:Password123_@localhost:3306
1401 INSERT t.mytable 1 123
1664 UPDATE t.mytable 1 123 1 456
1941 DELETE t.mytable 1 456
mysql> INSERT INTO mytable VALUES(1, "123");
mysql> UPDATE mytable SET c1 = "456";
mysql> DELETE mytable WHERE pk = 1;
バイナリログ関連の
設定について
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
50
サーバのbinlog_formatはROWで
• binlog_format=ROW
• タイプ Rows_event で記録
• 変更内容がバイナリで記録されている
• バイナリから実際の値にデコードする関数がある
• binlog eventsを使うにはこちらが前提
• binlog_format=STATEMENT
• タイプ Query_event で記録
• SQLがそのままバイナリログに記載される
• SQLから変更内容を特定するのは困難、Binlog
Events を使う場合は使わない想定
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
51
binlog_image にも注意
• binlog_image=full
• デフォルト
• 変更された行のPKと、その行の内容を記録
• binlog_image=minimal
• 更新を再現するのに最小限の情報のみを記録
• バイナリログのサイズが小さくて済む
• 例)DELETEだとPKのみ
• Binlog Events でPKしか拾えなくなるので注意
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
52
ありそうで、なかった機能
x2
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
53
ありそうで、なかった機能 その1
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
54
分散、ルーティングの仕組み分散、ルーティングの仕組み
Binlog
Events
Binlog
Events
バイナリログバイナリログ
ユーザID: 1-1000を担当
するサーバ
Binlog
Events
Binlog
Events
ユーザID: 1000-2000を担当
するサーバ
関係ないログは
読み飛ばす実装
が必要
関係ないログは
読み飛ばす実装
が必要
ありそうで、なかった機能 その2
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
55
「どこまで処理したか」を記録しておく仕組み「どこまで処理したか」を記録しておく仕組み
• 「BEGIN」イベントが来たら、それまでのバイ
ナリログ、ログポジションをファイルに書く
• 再開時、ファイルを読んで、そこまで読み飛ばす
まとめ
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
56
まとめ
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
57
C++つらいC++つらい
なんとかストリーム処理できそうですなんとかストリーム処理できそうです
LLラッパーを一緒に書いてくれる人募集LLラッパーを一緒に書いてくれる人募集
Enjoy MySQL
Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
58

Mais conteúdo relacionado

Mais procurados

トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2Takashi Hoshino
 
Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...
Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...
Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...Amazon Web Services
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)Amazon Web Services Japan
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
Isolation Level について
Isolation Level についてIsolation Level について
Isolation Level についてTakashi Hoshino
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: BigdamPlanet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: BigdamSATOSHI TAGOMORI
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニックHidekatsu Izuno
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 

Mais procurados (20)

トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
 
Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...
Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...
Using Performance Insights to Optimize Database Performance (DAT402) - AWS re...
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
Isolation Level について
Isolation Level についてIsolation Level について
Isolation Level について
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: BigdamPlanet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニック
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 

Destaque

VCSクエスト
VCSクエストVCSクエスト
VCSクエストjoker1007
 
Why MySQL High Availability Matters
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability MattersMatt Lord
 
Multi thread slave_performance_on_opc
Multi thread slave_performance_on_opcMulti thread slave_performance_on_opc
Multi thread slave_performance_on_opcShinya Sugiyama
 
CloudSQL v2は デキる子なのか?
CloudSQL v2は デキる子なのか?CloudSQL v2は デキる子なのか?
CloudSQL v2は デキる子なのか?Kumano Ryo
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMatt Lord
 
Random Forest による分類
Random Forest による分類Random Forest による分類
Random Forest による分類Ken'ichi Matsui
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderSadayuki Furuhashi
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016Tokoroten Nakayama
 
The ninja elephant, scaling the analytics database in Transwerwise
The ninja elephant, scaling the analytics database in TranswerwiseThe ninja elephant, scaling the analytics database in Transwerwise
The ninja elephant, scaling the analytics database in TranswerwiseFederico Campoli
 

Destaque (9)

VCSクエスト
VCSクエストVCSクエスト
VCSクエスト
 
Why MySQL High Availability Matters
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability Matters
 
Multi thread slave_performance_on_opc
Multi thread slave_performance_on_opcMulti thread slave_performance_on_opc
Multi thread slave_performance_on_opc
 
CloudSQL v2は デキる子なのか?
CloudSQL v2は デキる子なのか?CloudSQL v2は デキる子なのか?
CloudSQL v2は デキる子なのか?
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB Clusters
 
Random Forest による分類
Random Forest による分類Random Forest による分類
Random Forest による分類
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
 
The ninja elephant, scaling the analytics database in Transwerwise
The ninja elephant, scaling the analytics database in TranswerwiseThe ninja elephant, scaling the analytics database in Transwerwise
The ninja elephant, scaling the analytics database in Transwerwise
 

Semelhante a MySQL Binlog Events でストリーム処理してみた #MySQLUC15

ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略bitbank, Inc. Tokyo, Japan
 
第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介
第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介
第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介Daisuke Ikeda
 
Logにまつわるエトセトラ
LogにまつわるエトセトラLogにまつわるエトセトラ
Logにまつわるエトセトラleverages_event
 
Office365最新動向と運用管理tips
Office365最新動向と運用管理tipsOffice365最新動向と運用管理tips
Office365最新動向と運用管理tipsMari Miyakawa
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)Tomoaki Imai
 
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo!デベロッパーネットワーク
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Yahoo!デベロッパーネットワーク
 
パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPAN
パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPANパーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPAN
パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPANYahoo!デベロッパーネットワーク
 
700億件のリアルタイム分析の実現と運用の実態
700億件のリアルタイム分析の実現と運用の実態700億件のリアルタイム分析の実現と運用の実態
700億件のリアルタイム分析の実現と運用の実態Eiji Yamamoto
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 
IBM Cloud Community Summit JIMUC 活動のご紹介
IBM Cloud Community Summit JIMUC 活動のご紹介IBM Cloud Community Summit JIMUC 活動のご紹介
IBM Cloud Community Summit JIMUC 活動のご紹介kazuki masuda
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。Akihiro Kuwano
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)shojiro-tanaka
 
第1回関西ソーシャルゲーム勉強会 kpi発表
第1回関西ソーシャルゲーム勉強会 kpi発表第1回関西ソーシャルゲーム勉強会 kpi発表
第1回関西ソーシャルゲーム勉強会 kpi発表OCHI Shuji
 
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話ShunyoKawamoto
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.nextyoshikawa_t
 
Ansible勉強会資料
Ansible勉強会資料Ansible勉強会資料
Ansible勉強会資料Makoto Oya
 

Semelhante a MySQL Binlog Events でストリーム処理してみた #MySQLUC15 (20)

ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略
 
ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
 ぼく(たち)のかんがえた最新のJS開発環境 #scripty04 ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
 
第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介
第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介
第8回oss運用管理勉強会 Zabbix入門&Zabbix3.0先取り紹介
 
Logにまつわるエトセトラ
LogにまつわるエトセトラLogにまつわるエトセトラ
Logにまつわるエトセトラ
 
Office365最新動向と運用管理tips
Office365最新動向と運用管理tipsOffice365最新動向と運用管理tips
Office365最新動向と運用管理tips
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
 
Jenkinsはじめました - Yahoo! JAPANのCI+CD -
Jenkinsはじめました - Yahoo! JAPANのCI+CD -Jenkinsはじめました - Yahoo! JAPANのCI+CD -
Jenkinsはじめました - Yahoo! JAPANのCI+CD -
 
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPAN
パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPANパーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPAN
パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPAN
 
700億件のリアルタイム分析の実現と運用の実態
700億件のリアルタイム分析の実現と運用の実態700億件のリアルタイム分析の実現と運用の実態
700億件のリアルタイム分析の実現と運用の実態
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
IBM Cloud Community Summit JIMUC 活動のご紹介
IBM Cloud Community Summit JIMUC 活動のご紹介IBM Cloud Community Summit JIMUC 活動のご紹介
IBM Cloud Community Summit JIMUC 活動のご紹介
 
Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)
 
第1回関西ソーシャルゲーム勉強会 kpi発表
第1回関西ソーシャルゲーム勉強会 kpi発表第1回関西ソーシャルゲーム勉強会 kpi発表
第1回関西ソーシャルゲーム勉強会 kpi発表
 
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
 
Ansible勉強会資料
Ansible勉強会資料Ansible勉強会資料
Ansible勉強会資料
 

Mais de Yahoo!デベロッパーネットワーク

ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcYahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcYahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtcYahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcYahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcYahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcYahoo!デベロッパーネットワーク
 

Mais de Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

MySQL Binlog Events でストリーム処理してみた #MySQLUC15

  • 2. 自己紹介 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 • 三谷 智史(@mita2) • 所属 ヤフー(株) DBMS技術 • RDB専門部隊 13名 • DB Administration 黒帯
  • 3. 本日の流れ 1. Yahoo JAPAN! のMySQL 利用状況 2. ストリーム処理の利点 3. Binlog Events を検証してみた 1. サンプルコード解説 2. 更新内容を取り出す方法 3. ありそうで、なかった機能 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3
  • 4. 本日の流れ 1. Yahoo JAPAN! のMySQL 利用状況 2. ストリーム処理の利点 3. Binlog Events を検証してみた 1. サンプルコード解説 2. 更新内容を取り出す方法 3. ありそうで、なかった機能 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4
  • 6. 構成 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6
  • 7. サーバ台数 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7 • 約220台 • オンプレです • 容量18TB • ※ マスターのみカウント マスター サーバ スレーブ サーバ バックアップ用 スレーブ サーバ構成比率
  • 8. 共有ストレージのHAです Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8 • 複数MySQLを集約 • 商用ストレージ • 詳細: 「レプリケーションを使わない」 でWEB検索
  • 9. 共有ストレージのHAです Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9 • 複数MySQLを集約 • 商用ストレージ • 詳細: 「レプリケーションを使わない」 でWEB検索 Oracle Clusterware 使ってます Oracle Clusterware 使ってます
  • 10. 世間で実績の少なそうな?機能の実績 • 5.6 + GTID • 100DB以上で動かしてますが問題ないです • パーティション • 20DB以上で採用 • DROP PARITTIONによる高速データ削除 • ALTERに問題あり、使うなら5.6から… (Bug 77318) • InnoDBテーブル 圧縮 • 20DB以上で採用。READ IO減ってかなりGOOD。 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10
  • 11. We love MySQL Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11 0 100 200 300 400 500 600 We Love
  • 12. 本日の流れ 1. Yahoo JAPAN! のMySQL 利用状況 2. ストリーム処理の利点 3. Binlog Events を検証してみた 1. サンプルコード解説 2. 更新内容を取り出す方法 3. ありそうで、なかった機能 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12
  • 13. Yahoo! におけるストリーム処理 13 • 設立初期からストリーム処理を活用 • fluentd的なミドルウェア 決済システム 購入処理購入処理 Log Reader Log Reader Log Consumer Log Consumer Log Consumer Log Consumer トランザク ションログ トランザク ションログ ECサービス システム ストレージサービス システム キャンペーン フラグON 容量増量 フラグON プレミアム 会員購入 非同期転送 処理イメージ、実際とは異なります
  • 14. ストリーム処理の3つの利点 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14
  • 15. 1.スケールアウト Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15 スケールアウトしやすいスケールアウトしやすい 決済システム 購入処理購入処理 Log Reader1 Log Reader1 Log Consumer2 Log Consumer2 Log Consumer1 Log Consumer1 トランザク ションログ トランザク ションログ ECサービス システム キャンペーン フラグON Log Reader2 Log Reader2 ユーザIDで 分散 ユーザIDで 分散
  • 16. 2.連携先の影響を受けにくい Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16 連携先の影響を受けにくい連携先の影響を受けにくい 決済システム 購入処理購入処理 Log Reader Log Reader Log Consumer Log Consumer Log Consumer Log Consumer トランザク ションログ トランザク ションログ ECサービス システム ストレージサービス システム キャンペーン フラグON 容量増量 フラグON 非同期転送 DOWNDOWN
  • 17. 3.リアルタイム Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17 リアルタイムリアルタイム
  • 18. ☆ チン マチクタビレタ~ マチクタビレタ~ ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < MySQLでストリーム処理まだ~ \_/⊂ ⊂_ ) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | 愛媛みかん |/ Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18 (社内の声)
  • 19. 本日の流れ 1. Yahoo JAPAN! のMySQL 利用事例 2. ストリーム処理の利点 3. Binlog Events を検証してみた 1. サンプルコード解説 2. 更新内容を取り出す方法 3. ありそうで、なかった機能 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19
  • 20. MySQL Binlog Events • バイナリログを用いたストリーム処理ができる • MySQL Labs で公開中(2015/12現在) • 昔はBinlog APIっていうやつがあったらしい • C++ libraries Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20
  • 21. 利用イメージ Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21 決済システム 購入処理購入処理 BinlogEvents を使ったプログラム BinlogEvents を使ったプログラム バイナリログバイナリログ ECサービス システム ストレージサービス システム キャンペーン フラグON 容量増量 フラグON 非同期転送 処理イメージ • さっきの例だとこう BinlogEvents を使ったプログラム BinlogEvents を使ったプログラム
  • 22. まずはサンプルコード Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22
  • 23. Binlog Eventsのビルド • Labs から mysql-binlog-events-1.0.1-src.tar.gz をDL • サンプルが同梱されてます • mysql-devel パッケージだけではビルド不可 • MySQL5.7 のソースもダウンロードしましょう Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23 $ cmake -DMYSQLCLIENT_STATIC_LINKING:BOOL=TRUE ¥ -DMYSQL_DIR=/usr/bin ¥ -DMYSQL_SOURCE_INCLUDE_DIR=<ソース置いた場所>/include ¥ -DENABLE_DOWNLOADS=1 . $ make $ cd example $ make
  • 24. 接続先はどのバージョンでも大丈夫 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24 MySQL 5.5 MySQL 5.6 MySQL 5.7
  • 25. CHANGE LOG Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25 ############################ ChangeLog for Binary Log API ############################ Release 0.1.0 (released April 20, 2013) --------------------------------------- * BAPI-1: In the binlog-replication-listener library, mysql::Binary_log::connect function does not abort when non-existent file name or server is provided
  • 26. 付属のサンプルは3つ • basic-1 • basic-2 • binlog-browser Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26
  • 27. 付属のサンプルは3つ • basic-1 • basic-2 • binlog-browser Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27
  • 28. basic-1 • URI の書き方 mysql://user:password@localhost:3306 file:///var/lib/mysql/mysql-bin.000002 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28 $ ./basic-1 mysql://root:Password123_@localhost:3306
  • 29. basic-1 のソース - 接続方法 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29 Binary_log_driver *drv= create_transport(argv[1]); if (drv == NULL) return 1; Binary_log binlog(drv); if (binlog.connect() != ERR_OK) { delete drv; return 1; } URIを渡して接続URIを渡して接続
  • 30. basic-1 を動かしてみる Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30 $ ./basic-1 mysql://root:Password123_@localhost:3306 Found event of type 2 Found event of type 19 Found event of type 30 mysql> CREATE TABLE `mytable` ~ mysql> INSERT INTO mytable (v1) VALUES('abc');
  • 31. イベントとは Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31 QueryQuery BEGINBEGIN Table_MapTable_Map 処理する対象テーブルの指定処理する対象テーブルの指定 Write_rowsWrite_rows INSERT INTO ~INSERT INTO ~ Update_rowsUpdate_rows UPDATE ~UPDATE ~ • 1つのトランザクションは複数イベントで構成 • 「Table_Map」や「Rotate」など特殊なイベン トもある イベントタイプ イベント内容(イメージ) トランザクション POS POS POS POS
  • 32. EVENT_TYPE 一覧 Unknown Start_v3 Query Stop Rotate Intvar Load Slave Create_file Append_block Exec_load Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32 Delete_file New_load RAND User var Format_desc Xid Begin_load_query Execute_load_query Table_map Write_rows_event_old Update_rows_event_old Delete_rows_event_old Write_rows_v1 Update_rows_v1 Delete_rows_v1 Incident Heartbeat Ignorable Rows_query Write_rows Update_rows Delete_rows Gtid Anonymous_Gtid Previous_gtids User Defined
  • 33. 付属のサンプルは3つ • basic-1 • basic-2 • binlog-browser Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33
  • 34. basic-2 を動かしてみる • SQLが表示される・・・? • basic-2 はバグってます • 本当は 変数 を値に置換してSQLを表示する プログラムです Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34 $ ./basic-2 mysql://root:Password123_@localhost:3306 create table mytable (pk serial, v1 varchar(255)) BEGIN insert into mytable (v1) values(@myvar) 置換されてない置換されてない
  • 35. なおしました パッチ https://gist.github.com/anonymous/02593d4981ac826f9837 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35
  • 36. basic-2 を動かしてみる(修正ver) • binlog_format=STATEMENTで動かしましょう Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36 $ ./basic-2 mysql://root:Password123_@localhost:3306 create database hogex create table mytable (pk serial, v1 varchar(255)) insert into mytable (v1) values(123) @myvarが置換される@myvarが置換される mysql> CREATE TABLE mytable (pk SERIAL, v1 VARCHAR(5)); mysql> SET @myvar=“123”; mysql> INSERT INTO mytable (v1) VALUES(@myvar);
  • 37. basic-2 のソース Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37
  • 38. basic-2 のソース - main Map variables; Save_variables<Map> save_variables(variables); Content_stream_handler handler; handler.add_listener(save_variables); Replace_variables<Map> replace_variables(variables); handler.add_listener(replace_variables); <snip> while (true) { int error_number; error_number= drv->get_next_event(&buf_and_len); <snip> handler.handle_event(&event); Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38 ハンドラーを生成ハンドラーを生成 ハンドラーを登録ハンドラーを登録 バイナリログから イベントを読み取る バイナリログから イベントを読み取る 登録したハンドラーに イベントを渡してを処理 登録したハンドラーに イベントを渡してを処理 ループループ
  • 39. Binlog Events の設計思想 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39 Get_next_eventGet_next_event ループループ ループ コンテンツハンドラ (クラス) コンテンツハンドラ (クラス) - process_event(Delete_rows) - process_event(Write_rows) - process_event(Delete_rows) - process_event(Write_rows) コンテンツハンドラコンテンツハンドラ コンテンツハンドラコンテンツハンドラ • 1イベントごとにハンドラで定義し たprocess_eventが呼び出される • イベントタイプごとに処理したい内 容をコーディングする • コンテンツハンドラは複数設定可能 INSERTされたとき に実施したい処理を 書く INSERTされたとき に実施したい処理を 書く
  • 40. Save_variablesコンテンツハンドラ template <class AssociativeContainer> class Save_variables : public Content_handler { Binary_log_event *process_event(User_var_event *event) { std::string a(event->val, 0, event->val_len); m_var[event->name] = a; return event; } Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40 変数のSETイベント を受け入れる 例)SET @abc = 123 変数のSETイベント を受け入れる 例)SET @abc = 123 val には値(123)が 入ってる val には値(123)が 入ってる グローバル変数のハッシュに 登録しておく 例)m_var[abc] = 123 グローバル変数のハッシュに 登録しておく 例)m_var[abc] = 123
  • 41. Replace_variablesコンテンツハンドラ Binary_log_event *process_event(Query_event *event) { std::string query = event->query; size_t start, end = 0; while (true) { start = query.find_first_of("@", end); if (start == std::string::npos) break; end = query.find_first_not_of("abcdefghijklmnopqrstuvwxyz", start+1); std::string key = query.substr(start + 1, end - start - 1); query.replace(start, end - start, "'" + m_var[key] + "'"); } event->query= query.c_str(); return event; } Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41 クエリから@を探すクエリから@を探す @に続く英字の位置を検索@に続く英字の位置を検索 @~ を置換@~ を置換 クエリに対する イベントのみ処理する クエリに対する イベントのみ処理する Save_variablesで 保存しておいたもの Save_variablesで 保存しておいたもの
  • 42. 付属のサンプルは3つ • basic-1 • basic-2 • binlog-browser Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42
  • 43. binlog-browser Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 43 $ ./binlog-browser mysql://root:Password123_@localhost:3306 Start Position End Position Event Length Event Type 219 344 125 Query[2] Event Info: use `hoge`; create table mytable (pk serial, v1 varchar(255)) 344 409 65 Anonymous_Gtid[34] Event Info: 409 482 73 Query[2] Event Info: BEGIN 482 536 54 Table_map[19] Event Info: table id: 109 (hogex.mytable) 536 584 48 Write_rows[30] Event Info: table id: 109 flags: Last event of the statement 584 615 31 Xid[16] Event Info: Xid ID=26
  • 44. binlog-browser のソース Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 44 Binary_log_driver *drv= create_transport(uri.c_str()); Binary_log binlog(drv); int error_number= binlog.connect(); if (const char* msg= str_error(error_number)) cerr << msg << endl; <snip> if (binlog.set_position(opt_start_pos) != ERR_OK) { cerr << "The specified position " << opt_start_pos << " cannot be set" << endl; return 1; } 引数で指定したポジション にジャンプ 引数で指定したポジション にジャンプ
  • 45. バイナリログから更新内容 を取り出すには? Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 45
  • 46. サンプルコードにはない • tests/replaybinlog.cpp が参考になります • ・・・これも動かなかった orz • Binlog API のテストコードっぽい Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 46
  • 47. 値を取り出すサンプル https://gist.github.com/anonymous/ 4f9e59a6e22593fdcaf0 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 47
  • 48. カラムの値をとるコード Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48 Binary_log_event *process_event(binary_log::Rows_event *event) { Int2event_map::iterator ti_it= m_table_index.find(event->get_table_id()); binary_log::Row_event_set rows(event, ti_it->second); binary_log::Row_of_fields fields= *row_it; if (event->get_event_type() == binary_log::WRITE_ROWS_EVENT || event->get_event_type() == binary_log::WRITE_ROWS_EVENT_V1) { std::cout << event_start_pos << "¥tINSERT¥t" << ti_it->second->m_dbnam << "." << ti_it->second->m_tblnam << "¥t"; binary_log::Row_of_fields::iterator field_it= fields.begin(); binary_log::Converter converter; if (field_it != fields.end()) { do { std::string str; converter.to(str, *field_it); std::cout << str << "¥t"; } while (++field_it != fields.end()); ROWモードの イベントを受け取る ROWモードの イベントを受け取る INSERTの場合INSERTの場合 バイナリをデコードバイナリをデコード 直前のTable_Map イベントからテーブル情報を 取得 直前のTable_Map イベントからテーブル情報を 取得
  • 49. 実行例 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 49 $ ./decode mysql://root:Password123_@localhost:3306 1401 INSERT t.mytable 1 123 1664 UPDATE t.mytable 1 123 1 456 1941 DELETE t.mytable 1 456 mysql> INSERT INTO mytable VALUES(1, "123"); mysql> UPDATE mytable SET c1 = "456"; mysql> DELETE mytable WHERE pk = 1;
  • 50. バイナリログ関連の 設定について Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50
  • 51. サーバのbinlog_formatはROWで • binlog_format=ROW • タイプ Rows_event で記録 • 変更内容がバイナリで記録されている • バイナリから実際の値にデコードする関数がある • binlog eventsを使うにはこちらが前提 • binlog_format=STATEMENT • タイプ Query_event で記録 • SQLがそのままバイナリログに記載される • SQLから変更内容を特定するのは困難、Binlog Events を使う場合は使わない想定 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 51
  • 52. binlog_image にも注意 • binlog_image=full • デフォルト • 変更された行のPKと、その行の内容を記録 • binlog_image=minimal • 更新を再現するのに最小限の情報のみを記録 • バイナリログのサイズが小さくて済む • 例)DELETEだとPKのみ • Binlog Events でPKしか拾えなくなるので注意 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 52
  • 53. ありそうで、なかった機能 x2 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 53
  • 54. ありそうで、なかった機能 その1 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 54 分散、ルーティングの仕組み分散、ルーティングの仕組み Binlog Events Binlog Events バイナリログバイナリログ ユーザID: 1-1000を担当 するサーバ Binlog Events Binlog Events ユーザID: 1000-2000を担当 するサーバ 関係ないログは 読み飛ばす実装 が必要 関係ないログは 読み飛ばす実装 が必要
  • 55. ありそうで、なかった機能 その2 Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 55 「どこまで処理したか」を記録しておく仕組み「どこまで処理したか」を記録しておく仕組み • 「BEGIN」イベントが来たら、それまでのバイ ナリログ、ログポジションをファイルに書く • 再開時、ファイルを読んで、そこまで読み飛ばす
  • 56. まとめ Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 56
  • 57. まとめ Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 57 C++つらいC++つらい なんとかストリーム処理できそうですなんとかストリーム処理できそうです LLラッパーを一緒に書いてくれる人募集LLラッパーを一緒に書いてくれる人募集
  • 58. Enjoy MySQL Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 58