transactd ~高速・高機能なnosqlプラグイン for mysql/mariadb~
DESCRIPTION
MySQL Talk in 長野 (NSEG #49) での発表資料です。 http://nseg.doorkeeper.jp/events/9286 Transactd ~高速・高機能なNoSQLプラグイン for MySQL/MariaDB~ ①Transactdとは? ②よいところ ③初めの一歩 ④ライセンス ⑤おわりにTRANSCRIPT
Transactd 高速・高機能なNoSQLプラグイン
ビズステーション株式会社 矢口 尚
1
矢口 尚 (Hisashi Yaguchi)
ビズステーション株式会社 代表取締役社長
所在地 :長野県松本市井川城
主な事業:販売管理・財務会計ソフト開発販売 (主にSnap-on用)
システムコンサルティング
言語 :C++好き Java(Android) C# VB
http://www.bizstation.jp
Twitter @bizstationcorp
自己紹介
2
①Transactdとは?
②よいところ
③初めの一歩
④ライセンス
⑤おわりに
Transactd
3
Transactdとは?
MySQL/MariaDB用
高速・高機能な
NoSQLプラグイン
4
Transactdとは?
しくみ
Handlerインターフェースでのアクセス (HandlerSocket plugin と同様)
クライアント側 client library
サーバー側 daemon plugin
高速・高機能なNoSQLプラグイン
5
MySQL Server
Storage Engines
SQL Layer
Handler Interface
Transactd Plugin
App MySQL Client Transactd Client
よいところ
ベンチマーク http://www.bizstation.jp/ja/transactd/index.html#benchmark
1秒あたりRead回数 (5 client)
• SQLの約4倍
• 他のプラグインより高速 • トランザクションで更新がさらに高速
• スナップショットでランダム読み取りも さらに高速
高速なNoSQLプラグイン
6
7,293
12,671
24,754
27,667
27,533
0 6,000 12,000 18,000 24,000 30,000
SQL
memcached
HandlerSocket
Transactd (Ruby)
Transactd (C++)
Operations Per Second
Slow Fast
よいところ
高機能
トランザクションが使用可能
CREATE DATABASE/TABLEも可能
もちろんバイナリデータも扱える
→ 単品でアプリ開発が可能なレベルの高機能
他にも…
Windowsに対応 (HandlerSocket / memcached pluginは現状非対応)
高機能でもサーバー側のCPU負荷が小さい
高機能なNoSQLプラグイン
7
よいところ
プログラマが
パフォーマンスを
組み立てられる
8
新しい価値
よいところ
パフォーマンスを組み立てられる
9
……って、どういうこと?
よいところ
たとえば select * from table where id >= 26558 and id < 26560
and qty = 10000
パフォーマンスを組み立てられる
10
このSQL文で、レコードをどのように検索するか?
MySQLでは最後はオプティマイザが決める
≒
なのでパフォーマンスも同様
Transactdでは検索レコードを
プログラマが決めます オプティマイザの気持ちになれます!
11
アクセス方法を組み立ててみる (select* from table where id >=26558 and id < 26560 and qty = 10000)
①インデックス(番号)を決める table.index(key_id) ②検索開始キー値を指定する table.keyValue(26558) ③条件の指定 query.where(“id”, “<“, 26560) .and(“qty”, “=“, 10000) ④検索開始 table.read(query) ⑤どこかで検索をやめる (or最後まで) • 見つかった数 (limit) • スキップした数(reject) • インデックスと条件からしてもう
マッチレコードはない(自動判定)
よいところ
パフォーマンスを組み立てられる
12
今の手順をそのまま新しいO/RマッピングAPIで書くと
query.where(“id”, “<”, 26560).and(“qty”, “=”, 10000).reject(0);
table.index(key_id).keyValue(26558).read(query);
赤色文字が検索インデックスと開始位置、青色文字が終了条件。
• インデックスと検索範囲をプログラマが定義
• なんとなくオプティマイザによって決まる不明瞭さがない
• インデックスの付け方や、パフォーマンスの良いSQL文の勉強になる
BizStationブログ http://bizstation.hatenablog.com
よいところ
SQLとのハイブリッド
13
さらにSQLとの良いとこ取りも可能!
• 速度が重要ならTransactdで高速に
• EasyにJoinして集計するならSQLで
1つのデータベースに対して両方が使えることは
MySQLの大きなメリット。
BizStationブログ http://bizstation.hatenablog.com
初めの一歩
プチ・チュートリアル
14
初めの一歩 インストール
サーバープラグイン編
15
1. ホームページからダウンロード http://www.bizstation.jp/al/transactd/download/
2. MySQLのplugin_dirにコピー
3. mysql>INSTALL PLUGIN transactd SONAME ‘transactd.dll’;
詳しくは:インストールガイド http://www.bizstation.jp/ja/transactd/documents/install_guide.html
おわり
ビルド済バイナリをコピーして、install pluginするだけ
初めの一歩 インストール
クライアントライブラリ編
16
インストーラを実行するだけ
1. ホームページからダウンロード http://www.bizstation.jp/al/transactd/download/
2. インストーラを実行
• インストーラではC++用とCOM 用のクライアントライブラリがインストールされる
• Ruby、PHP用は 別途インストール
詳しくは:インストールガイド http://www.bizstation.jp/ja/transactd/documents/install_guide.html
おわり
初めの一歩
テーブル準備は?
17
SQLで作成したテーブルをそのまま開ける
Transactd用のスキーマ情報テーブルを新たに1つ作
成するのみ。既存テーブルは変更しない
既存のデータは変更不要!
スキーマ情報テーブルは自動生成可能
→ 準備はなにも必要ない
初めの一歩
1
2
3
4
5
6
7
8
9
10
11
var db = new ActiveXObject('transactd.database');
db.Open('tdap://localhost/testdb?dbfile=transactd_schema');
if (db.Stat == 0) {
var tb = db.OpenTable('test_table');
if (tb.Stat == 0)
tb.Close();
else
WScript.Echo('table open error!');
db.Close();
} else
WScript.Echo('database open error!');
サンプル1(JScript)オープンとクローズ
18
初めの一歩
1
2
3
4
5
6
7
8
tb.clearBuffer();
tb.Text(“name”) = 'BizStation';
tb.insert();
tb.KeyNum = 0;
tb.Vlng(“id”) = 1;
tb.Seek();
WScript.Echo(tb.Text(“name”));
サンプル2(JScript)INSERT/READ
19
ライセンス
GPLv2
商用 20
or
(MySQLと同じ)
ライセンス
GPLv2 or 商用 デュアルライセンス
21
• サーバープラグイン
∘ MySQLがCommunity Edition(GPLv2) → プラグインもGPLv2でのみ使用可能
∘ MySQLが商用Edition → 商用ライセンス検討中
• クライアントライブラリ
∘ クライアントもGPLv2
∘ MySQLのFOSSのようなOSS例外規定あり http://www.bizstation.jp/ja/transactd/support/ossex.html
∘ 商用ライセンス準備中 ライセンスFAQ http://www.bizstation.jp/ja/transactd/support/license_faq.html
おわりに
実績・今後 など
22
おわりに
実績(PSQLからのマイグレーション・弊社事例)
23
クライアントライブラリ
• 300台程度の顧客PCで動作中(販売/在庫管理ソフト)
• Actian PSQLのBtrieve APIと互換性があるため、PSQLサーバーへ接続するクライアントとして使用
サーバープラグイン
• 弊社の社内システムとして約1年稼働中
• PSQLサーバー+PSQLクライアントの構成からMySQL+Transactdにマイグレーション
実績と今後
今後の予定(2014年2月時点)
24
• O/Rマッピングの作成
• その次はJava用(予定)
•
https://github.com/bizstation/transactd
協力者大歓迎 動作報告/宣伝/文書校正 etc なんでも助かります
おわりに
まとめ:こんな人におススメしたい
25
• 今あるMySQLアプリをきびきびさせたい • 部分的なパフォーマンス問題を解決したい • スケーリングに備えて、NoSQLにしたい • DBサーバー台数を削減したい • Windows MySQLでNoSQLを使いたい • オプティマイザの気持ちになりたい
• PSQLからのマイグレーション先を探しています • HandlerSocketはWindowsで使えなくて泣きました • memcached pluginはWindowsで(略)
是非 Trnasactdを試してみてください
(一部の人向け)
ご清聴ありがとう ございました。
Transactd http://www.bizstation.jp/ja/transactd
インストールガイド http://www.bizstation.jp/ja/transactd/documents/install_guide.html
SDK ドキュメント http://www.bizstation.jp/ja/transactd/client/sdk/doc/
26
導入方法
API詳細やサンプル