SlideShare a Scribd company logo
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 ClientTransactd 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詳細やサンプル

More Related Content

Transactd ~高速・高機能なNoSQLプラグイン for MySQL/MariaDB~