前回のエントリから相当間が空いてしまいました。
ネタがあればちゃんと書いていきたい所です。
で、タイトルの通り bingo というアプリケーションをリリースしました。
何をするアプリケーションかと言いますと、
MySQLのバイナリログ(更新差分)を簡単にリアルタイム転送するツール、です。
MySQL to MySQLであればMySQLのレプリケーションでいいじゃん、となるのですが
例えばBigQuery等にリアルタイムでデータ転送しようと思うと結構面倒くさいと思います。
(トリガーを使ったり、短時間毎に差分を取得したり。。)
bingo はMySQLのレプリケーション技術で更新データを読み取りますので、
非同期ではありますが、ほぼリアルタイムに更新データを取得できます。
現状はfluentdにhttp postする事しか出来ませんが、色々と応用できるとは思います。
使い方(詳しくはREADMEへ)
bingoは起動するとすぐにMySQLに接続します。
$ bingo 2016/09/02 01:19:10 connected to mysql(root@127.0.0.1:3306) 2016/09/02 01:19:10 start reading binlog 2016/09/02 01:19:10 Binlog Version: 4 2016/09/02 01:19:10 Server Version: 5.7.14-log
MySQLに何かしらデータを書き込みます。
$ mysql -u root -e 'create database testdb default character set utf8mb4' $ mysql -u root -e 'create table testdb.testtable (id bigint, name varchar(32))' $ mysql -u root -e 'insert into testdb.testtable (id, name) values (1, "hello world")' $ mysql -u root -e 'insert into testdb.testtable (id, name) values (2, "はろーわーるど")'
localhost:8888 で待ち受けるfluentdにはこんな感じでデータがpostされます。
2016-09-02 01:23:28 -0400 bingo.data: {"database":"testdb","table":"testtable","columns":["1","hello world"]} 2016-09-02 01:23:36 -0400 bingo.data: {"database":"testdb","table":"testtable","columns":["2","はろーわーるど"]}
余力があればカラム名つきでpostするような実装を入れたいところですが、ひとまずはここまで。
テストも途中からほとんど書けていないのでこれもIssueですね。。