transactd 高速・高機能なnosqlプラグイン
TRANSCRIPT
Transactd
高速・高機能な NoSQL プラグインビズステーション株式会社 矢口 尚
1
矢口 尚 (Hisashi Yaguchi)
ビズステーション株式会社 代表取締役社長所在地 : 長野県松本市井川城主な事業 : 販売管理・財務会計ソフト開発販売
( 主に Snap-on 用 ) システムコンサルティング
言語 :C++ 好き Java(Android) PHP Rubyhttp://www.bizstation.jpTwitter @bizstationcorp
自己紹介
2
トランザクトディーって何だ?
Transactd
3
Transactd とは?
MySQL で
Indexed Sequential Access
Method
を使えるようにする( MyISAM じゃないです)
4
大雑把にいうと
ISAM?SQL レイヤーをとばして Handler レイヤーを直接操作
Handler の基本メソッドは ISAM
5
予備知識 ISAM (1)Indexed Sequential Access
6
ISAM: Indexed Sequential Access Method
インデックス順にアクセスする方式
MySQL の内部は ISAM で処理している→ MySQL を使う上でも大切な基礎
でも案外知らない人も多い 昔はみんな使っていたけど、今は SQL で隠蔽されている
予備知識 ISAM (2)インデックスとアクセス
7
id name group1 akio 32 yoko 13 naoko 24 takeshi 1
先頭 seekFirst最後 seekLast
前後 seekNext (++) seekPrev (--)
キー値 seekEqual (=)キー値の前後 seekLessThan (<=)
seekGreater (>=)
アクセスメソッド(カーソルの移動と読取 )
• これで全データにアクセス可能
• カレント行(カーソル)が重要
• 更新はカレント行に対して行う
id 列の順に並んだ表 → id 列の Indexgroup 列 〃 → group 列の Index
MySQL 内部でも同じ方法でアクセスしている
予備知識 ISAM (3)基本アクセスコード
8
tb->setKeyNum(0); // 1tb->seekFirst(); // 2while(tb->stat() == 0) { // 3 if (tb->getFVint(“id”) <= 3)
// 4 break; if (isMatch(xxx)) { // 5 // ここで何かする // 6 } tb->seekNext(); // 7} // 8
1. Index を決める2. 検索開始 ( 位置指定 )3. アクセスできたか?4. 範囲外ではないか?5. 条件にマッチする
か?6. 何かする7. 次に進む8. 3に戻る
// group を 2 に更新するtb->setFV("group", 2);tb->update();
// 検索開始位置を表の途中にする場合tb->setFV(“id", 3);tb->seekGreater();
SQL ではなくプログラミング言語でデータを操作する
理解できるとこんなことがわかる
9
例
• Index は id 列の主キーのみ• REPEATABLE-READ• データは表の通り
Q: 以下の SQL はどのレコードをロックするか?
START TRANSACTION;SELECT * FROM user WHERE group = 1 FOR UPDATE;
予備知識 ISAM (4)
id name group1 akio 32 yoko 13 naoko 24 takeshi 1
理解できるとこんなことがわかる
10
A: 全レコード
• group 列順の index がない→ primary-key でアクセス
• group = 1 のレコードがどこにあるかわからない→ 先頭から最後まで検索(途中で中止できない)→ 全レコードにアクセスすることになる
• REPEATEBLE-READ は読み取ったレコードのロックを解放しないブログを見てね MySQL/MariaDB と Transactd の InnoDB ロック制御詳細http://bizstation.hatenablog.com/entry/2014/12/24/103641
予備知識 ISAM (5)
id name group1 akio 32 yoko 13 naoko 24 takeshi 1
まとめ
11
ISAM を理解するとロック範囲やパフォーマンスが理解できる
= SQL が上手く使えるようになる
→ Transactd を使えるようになると SQL も上手く使えるようになる!
予備知識 ISAM (6)
の話に戻ります
Transactd
12
Transactd とは?
MySQL で
Indexed Sequential Access Method
を使えるようにする( MyISAM じゃないです)
SQL レイヤーをとばして Handler レイヤーを直接操作Handler の基本メソッドは ISAM
13
大雑把にいうと
Transactd とは?
クライアントTransactd Client
サーバー側Transactd Plugin
しくみ
14
MySQLServer
Storage Engines (InnoDB)
SQL Layer
Handler Interface
Transactd Plugin
App MySQL ClientTransactd Client
ほぼ ISAM
Transactd とは?
その他にも
15
• Insert/Update/Delete• 条件によるマルチレコード取得• バルクインサート• トランザクション• スナップショット• ロック制御• DDL処理• レプリケーション制御• HAコントロール
よいところ (1)
SQL との比較(解析、実行方法)
自在なアクセスとムダの省略
16
SQL Transactd
SQL 文の組立て
必要 不要
SQL 文の解析 必要 不要
実行方法の計画 動的に決定 静的にプログラムで決定
実行 汎用的な処理 処理に最適化したアルゴリズムを作成可能
よいところ (2)
ベンチマークhttp://bizstation.hatenablog.com/entry/2015/05/01/094233
MySQL5.7 で 117 万 QPS !
詳しくは上記ブログで
高速
17
よいところ (3)
18
ミッションクリティカル
• レコード単位のアクセス• シングルレコードロック/マルチレコードロック
• アンロック
ロック範囲をコントロールして同時実効性の高いアプリの作成が可能
(しかも簡単!)
よいところ (4)
Join, OuterJoin OrderBy, GroupBy, Union Limit, Skip NULL?
Transactd だけでアプリ全体の開発が可能
SQL ライクな高機能クエリ
19
$at = new ActiveTable($db, 'users');$at->index(1)->keyValue(0)->alias('name', 'user_name');$q = new Query();$q->select('id', 'user_name', 'group', 'tel') ->where('group', '<=', 2)->reject(1);$rs = $at->read($q);
SQL と共存できます!
20
Transactd• プログラミング言語からのデータアクセス
→ APIの方が高速で制御しやすいことが多い• サーバー負荷の低減
サーバーで計算(パース、ソート、 Join)がない• パフォーマンスの向上
SQL• ネットワークレイテンシが大きい場合
→ サーバー側で結果を出すSQLが有利• サンプル集計などはSQLが手軽
おすすめの使い方
こんな方におすすめ
21
おすすめの使い方
• 「速!」と感じるアプリケーションを作りたい
• DB サーバー数を減らしたい• レコードロックがうまくできているか
イマイチ不安• パフォーマンスが読めるようになりたい
(読取アクセス数やロックの想像)• 日頃から SQL は冗長だと感じている
プチ・チュートリアル
22
インストール
23
初めの一歩
ダウンロードhttp://www.bizstation.jp/al/transactd/download/
• サーバープラグイン• クライアントライブラリ
• Linux, Windows, Mac OS X• C/C++, PHP, Ruby, COM
インストールガイドhttp://www.bizstation.jp/ja/transactd/documents/install_guide.html
テーブル準備は?
24
SQL で作成したテーブルをそのまま開ける
既存のデータは変更不要 . スキーマ情報は自動取得 .
準備は必要なし!
(※ BLOB の JSON と GEOMETRY を除く)
初めの一歩
詳しいドキュメント
25http://www.bizstation.jp/ja/transactd/documents/tutorial.html
初めの一歩
Transactd チュートリアル
日本語版、英語版C++/PHP/Ruby/C#/JScript
その他
最新情報 など
26
最新情報 (1)バージョン 3.7.2
27
最新版( 3.x )の機能• MySQL 5.5/5.6/5.7 対応• MariaDB 5.5/10.0/10.1 対応• NULL フィールド• スキーマテーブルレス • MySQL Native password での共通認証• High Availability (高可用運用)• レプリケーション制御
最新情報 (2)PHP 最速 ORM ( たぶん )
28
Transactd PHP ORM
モデルの取得速度• PDO の 2倍• Laravel 5.3 の 5倍以上
Framework依存なし
詳細は (“PDO 高速 ORM” )🔍http://bizstation.hatenablog.com/entry/2017/01/12/092540
100モデルの取得にかかる時間
最新情報 (3)Transactd Studio (予定)
29
データベース管理ツール
Transactd Studio
実績
実績
30
当社の実績• 常時 約 500 クライアント・ 10 サーバーが稼働
その他
募集
Transactd に興味のある方
31
是非一緒に使っていきましょう!お気軽にご連絡ください。
GitHub https://github.com/bizstation/transactd
Twitter @bizstationcorp
Facebook(はじめたばかり)
https://www.facebook.com/bizstation
はてなブログ http://bizstation.hatenablog.com
ご清聴ありがとうございました。
Transactd http://www.bizstation.jp/ja/transactd
インストールガイド http://www.bizstation.jp/ja/transactd/documents/install_guide.html
チュートリアル http://www.bizstation.jp/ja/transactd/documents/tutorial.html
32
導入方法
C++/PHP/Ruby/C#/JScript 対応