transactd 高速・高機能なnosqlプラグイン

32
Transact d 高高 高高高高 NoSQL 高高高高高 高高高高高高高高高高高高 高高 高 1

Upload: bizstation

Post on 07-Feb-2017

1.014 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Transactd 高速・高機能なNoSQLプラグイン

Transactd

高速・高機能な NoSQL プラグインビズステーション株式会社 矢口 尚

1

Page 2: Transactd 高速・高機能なNoSQLプラグイン

矢口 尚 (Hisashi Yaguchi)

ビズステーション株式会社 代表取締役社長所在地  : 長野県松本市井川城主な事業 : 販売管理・財務会計ソフト開発販売

( 主に Snap-on 用 )  システムコンサルティング

言語 :C++ 好き Java(Android) PHP Rubyhttp://www.bizstation.jpTwitter @bizstationcorp

自己紹介

2

Page 3: Transactd 高速・高機能なNoSQLプラグイン

トランザクトディーって何だ?

Transactd

3

Page 4: Transactd 高速・高機能なNoSQLプラグイン

Transactd とは?

MySQL で

Indexed Sequential Access

Method 

を使えるようにする( MyISAM じゃないです)

4

大雑把にいうと

Page 5: Transactd 高速・高機能なNoSQLプラグイン

ISAM?SQL レイヤーをとばして Handler レイヤーを直接操作

Handler の基本メソッドは ISAM

5

Page 6: Transactd 高速・高機能なNoSQLプラグイン

予備知識 ISAM (1)Indexed Sequential Access

6

ISAM: Indexed Sequential Access Method

   インデックス順にアクセスする方式

MySQL の内部は ISAM で処理している→ MySQL を使う上でも大切な基礎

 でも案外知らない人も多い 昔はみんな使っていたけど、今は SQL で隠蔽されている

Page 7: Transactd 高速・高機能なNoSQLプラグイン

予備知識 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プラグイン

予備知識 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プラグイン

理解できるとこんなことがわかる

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プラグイン

理解できるとこんなことがわかる

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プラグイン

まとめ

11

ISAM を理解するとロック範囲やパフォーマンスが理解できる

= SQL が上手く使えるようになる

→ Transactd を使えるようになると  SQL も上手く使えるようになる!

予備知識 ISAM (6)

Page 12: Transactd 高速・高機能なNoSQLプラグイン

の話に戻ります

Transactd

12

Page 13: Transactd 高速・高機能なNoSQLプラグイン

Transactd とは?

MySQL で

Indexed Sequential Access Method 

を使えるようにする( MyISAM じゃないです)

SQL レイヤーをとばして Handler レイヤーを直接操作Handler の基本メソッドは ISAM

13

大雑把にいうと

Page 14: Transactd 高速・高機能なNoSQLプラグイン

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プラグイン

Transactd とは?

その他にも

15

• Insert/Update/Delete• 条件によるマルチレコード取得• バルクインサート• トランザクション• スナップショット• ロック制御• DDL処理• レプリケーション制御• HAコントロール

Page 16: Transactd 高速・高機能なNoSQLプラグイン

よいところ (1)

SQL との比較(解析、実行方法)

自在なアクセスとムダの省略

16

SQL Transactd

SQL 文の組立て

必要 不要

SQL 文の解析 必要 不要

実行方法の計画 動的に決定 静的にプログラムで決定

実行 汎用的な処理 処理に最適化したアルゴリズムを作成可能

Page 17: Transactd 高速・高機能なNoSQLプラグイン

よいところ (2)

ベンチマークhttp://bizstation.hatenablog.com/entry/2015/05/01/094233

MySQL5.7 で 117 万 QPS !

詳しくは上記ブログで

高速

17

Page 18: Transactd 高速・高機能なNoSQLプラグイン

よいところ (3)

18

ミッションクリティカル

• レコード単位のアクセス• シングルレコードロック/マルチレコードロック

• アンロック

ロック範囲をコントロールして同時実効性の高いアプリの作成が可能

(しかも簡単!)

Page 19: Transactd 高速・高機能なNoSQLプラグイン

よいところ (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プラグイン

SQL と共存できます!

20

Transactd• プログラミング言語からのデータアクセス

→ APIの方が高速で制御しやすいことが多い• サーバー負荷の低減

サーバーで計算(パース、ソート、 Join)がない• パフォーマンスの向上

SQL• ネットワークレイテンシが大きい場合

→ サーバー側で結果を出すSQLが有利• サンプル集計などはSQLが手軽

おすすめの使い方

Page 21: Transactd 高速・高機能なNoSQLプラグイン

こんな方におすすめ

21

おすすめの使い方

• 「速!」と感じるアプリケーションを作りたい

• DB サーバー数を減らしたい• レコードロックがうまくできているか

イマイチ不安• パフォーマンスが読めるようになりたい

(読取アクセス数やロックの想像)• 日頃から SQL は冗長だと感じている

Page 22: Transactd 高速・高機能なNoSQLプラグイン

プチ・チュートリアル

22

Page 23: Transactd 高速・高機能なNoSQLプラグイン

インストール

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プラグイン

テーブル準備は?

24

SQL で作成したテーブルをそのまま開ける

既存のデータは変更不要  . スキーマ情報は自動取得  .

    

準備は必要なし!

(※ BLOB の JSON と GEOMETRY を除く)

初めの一歩

Page 25: Transactd 高速・高機能なNoSQLプラグイン

詳しいドキュメント

25http://www.bizstation.jp/ja/transactd/documents/tutorial.html

初めの一歩

Transactd チュートリアル

日本語版、英語版C++/PHP/Ruby/C#/JScript

Page 26: Transactd 高速・高機能なNoSQLプラグイン

その他

最新情報 など

26

Page 27: Transactd 高速・高機能なNoSQLプラグイン

最新情報 (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プラグイン

最新情報 (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プラグイン

最新情報 (3)Transactd Studio (予定)

29

データベース管理ツール

Transactd Studio

Page 30: Transactd 高速・高機能なNoSQLプラグイン

実績

実績

30

当社の実績• 常時 約 500 クライアント・ 10 サーバーが稼働

その他

Page 31: Transactd 高速・高機能なNoSQLプラグイン

募集

Transactd に興味のある方

31

是非一緒に使っていきましょう!お気軽にご連絡ください。

GitHub https://github.com/bizstation/transactd

Twitter @bizstationcorp

Facebook(はじめたばかり)

https://www.facebook.com/bizstation

はてなブログ http://bizstation.hatenablog.com

Page 32: Transactd 高速・高機能なNoSQLプラグイン

ご清聴ありがとうございました。

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 対応