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

Post on 07-Feb-2017

1.018 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

top related