transactd 高速・高機能なnosqlプラグイン
TRANSCRIPT
![Page 1: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/1.jpg)
Transactd
高速・高機能な NoSQL プラグインビズステーション株式会社 矢口 尚
1
![Page 2: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/2.jpg)
矢口 尚 (Hisashi Yaguchi)
ビズステーション株式会社 代表取締役社長所在地 : 長野県松本市井川城主な事業 : 販売管理・財務会計ソフト開発販売
( 主に Snap-on 用 ) システムコンサルティング
言語 :C++ 好き Java(Android) PHP Rubyhttp://www.bizstation.jpTwitter @bizstationcorp
自己紹介
2
![Page 3: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/3.jpg)
トランザクトディーって何だ?
Transactd
3
![Page 4: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/4.jpg)
Transactd とは?
MySQL で
Indexed Sequential Access
Method
を使えるようにする( MyISAM じゃないです)
4
大雑把にいうと
![Page 5: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/5.jpg)
ISAM?SQL レイヤーをとばして Handler レイヤーを直接操作
Handler の基本メソッドは ISAM
5
![Page 6: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/6.jpg)
予備知識 ISAM (1)Indexed Sequential Access
6
ISAM: Indexed Sequential Access Method
インデックス順にアクセスする方式
MySQL の内部は ISAM で処理している→ MySQL を使う上でも大切な基礎
でも案外知らない人も多い 昔はみんな使っていたけど、今は SQL で隠蔽されている
![Page 7: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/7.jpg)
予備知識 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 内部でも同じ方法でアクセスしている
![Page 8: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/8.jpg)
予備知識 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 ではなくプログラミング言語でデータを操作する
![Page 9: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/9.jpg)
理解できるとこんなことがわかる
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
![Page 10: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/10.jpg)
理解できるとこんなことがわかる
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
![Page 11: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/11.jpg)
まとめ
11
ISAM を理解するとロック範囲やパフォーマンスが理解できる
= SQL が上手く使えるようになる
→ Transactd を使えるようになると SQL も上手く使えるようになる!
予備知識 ISAM (6)
![Page 12: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/12.jpg)
の話に戻ります
Transactd
12
![Page 13: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/13.jpg)
Transactd とは?
MySQL で
Indexed Sequential Access Method
を使えるようにする( MyISAM じゃないです)
SQL レイヤーをとばして Handler レイヤーを直接操作Handler の基本メソッドは ISAM
13
大雑把にいうと
![Page 14: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/14.jpg)
Transactd とは?
クライアントTransactd Client
サーバー側Transactd Plugin
しくみ
14
MySQLServer
Storage Engines (InnoDB)
SQL Layer
Handler Interface
Transactd Plugin
App MySQL ClientTransactd Client
ほぼ ISAM
![Page 15: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/15.jpg)
Transactd とは?
その他にも
15
• Insert/Update/Delete• 条件によるマルチレコード取得• バルクインサート• トランザクション• スナップショット• ロック制御• DDL処理• レプリケーション制御• HAコントロール
![Page 16: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/16.jpg)
よいところ (1)
SQL との比較(解析、実行方法)
自在なアクセスとムダの省略
16
SQL Transactd
SQL 文の組立て
必要 不要
SQL 文の解析 必要 不要
実行方法の計画 動的に決定 静的にプログラムで決定
実行 汎用的な処理 処理に最適化したアルゴリズムを作成可能
![Page 17: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/17.jpg)
よいところ (2)
ベンチマークhttp://bizstation.hatenablog.com/entry/2015/05/01/094233
MySQL5.7 で 117 万 QPS !
詳しくは上記ブログで
高速
17
![Page 18: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/18.jpg)
よいところ (3)
18
ミッションクリティカル
• レコード単位のアクセス• シングルレコードロック/マルチレコードロック
• アンロック
ロック範囲をコントロールして同時実効性の高いアプリの作成が可能
(しかも簡単!)
![Page 19: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/19.jpg)
よいところ (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);
![Page 20: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/20.jpg)
SQL と共存できます!
20
Transactd• プログラミング言語からのデータアクセス
→ APIの方が高速で制御しやすいことが多い• サーバー負荷の低減
サーバーで計算(パース、ソート、 Join)がない• パフォーマンスの向上
SQL• ネットワークレイテンシが大きい場合
→ サーバー側で結果を出すSQLが有利• サンプル集計などはSQLが手軽
おすすめの使い方
![Page 21: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/21.jpg)
こんな方におすすめ
21
おすすめの使い方
• 「速!」と感じるアプリケーションを作りたい
• DB サーバー数を減らしたい• レコードロックがうまくできているか
イマイチ不安• パフォーマンスが読めるようになりたい
(読取アクセス数やロックの想像)• 日頃から SQL は冗長だと感じている
![Page 22: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/22.jpg)
プチ・チュートリアル
22
![Page 23: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/23.jpg)
インストール
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
![Page 24: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/24.jpg)
テーブル準備は?
24
SQL で作成したテーブルをそのまま開ける
既存のデータは変更不要 . スキーマ情報は自動取得 .
準備は必要なし!
(※ BLOB の JSON と GEOMETRY を除く)
初めの一歩
![Page 25: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/25.jpg)
詳しいドキュメント
25http://www.bizstation.jp/ja/transactd/documents/tutorial.html
初めの一歩
Transactd チュートリアル
日本語版、英語版C++/PHP/Ruby/C#/JScript
![Page 26: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/26.jpg)
その他
最新情報 など
26
![Page 27: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/27.jpg)
最新情報 (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 (高可用運用)• レプリケーション制御
![Page 28: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/28.jpg)
最新情報 (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モデルの取得にかかる時間
![Page 29: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/29.jpg)
最新情報 (3)Transactd Studio (予定)
29
データベース管理ツール
Transactd Studio
![Page 30: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/30.jpg)
実績
実績
30
当社の実績• 常時 約 500 クライアント・ 10 サーバーが稼働
その他
![Page 31: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/31.jpg)
募集
Transactd に興味のある方
31
是非一緒に使っていきましょう!お気軽にご連絡ください。
GitHub https://github.com/bizstation/transactd
Twitter @bizstationcorp
Facebook(はじめたばかり)
https://www.facebook.com/bizstation
はてなブログ http://bizstation.hatenablog.com
![Page 32: Transactd 高速・高機能なNoSQLプラグイン](https://reader035.vdocuments.net/reader035/viewer/2022062503/5899a23a1a28ab30688b545d/html5/thumbnails/32.jpg)
ご清聴ありがとうございました。
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 対応