Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Transactd
PHP
ORM
ビズステーション株式会社 矢口 尚
1
矢口 尚 (Hisashi Yaguchi)
ビズステーション株式会社 代表取締役社長
所在地 :長野県松本市井川城
主な事業:販売管理・財務会計ソフト開発販売
(主にSnap-on用)
システムコンサルティング
言語 :C++好き Java(...
Transactd
PHP
ORM
3
Transactdとは?
MySQLで
SQLを使わずに
データにアクセス
するプラグイン
4
Transactdとは?
クライアント
Transactd Client
サーバー
Transactd Plugin
しくみ:クライアントとサーバー
5
MySQL
Server
Storage Engines (InnoDB)
SQL Lay...
Transactdとは?
しくみ:サーバーカーソル
6
id name group
1 Akio 3
2 Yoko 1
3 Naoko 2
4 Takeshi 1
5 Ichiro 1
6 Miki 2
seekFirst 先頭の行に移動
se...
Transactdとは?
高機能
7
• INSERT / UPDATE / DELETE
• トランザクション
• スナップショット
• ロック制御
• DDL
• レプリケーション制御
• HAコントロール
アプリケーション開発に
必要な機...
Transactd
PHP
ORM
8
Transactdを使って
実装された
PHP製のORM
Transactd PHP ORMの特長
(たぶん)最速のORM .
9
モデルの取得速度
• Laravel 5.3の5倍↑
• PDOの2倍
100個のモデル取得にかかる時間
ORMなのに
PDOより高速 !?
Transactd PHP ORMの特長
なぜ速いのか?
10
• TransactdとORMの相性がよい
• ORMはテーブル単位のアクセスが多い
→ Transactdの得意な分野
• Transactd自体にオブジェクトへのマッピング
機...
サンプルコード:モデル定義
11
Transactd PHP ORMとは?
class Invoice extends Model {
protected static $guarded = ['id'];
public static $ali...
サンプルコード:モデルの取得
12
Transactd PHP ORMとは?
// すべてのモデルを取得
$customers = Customer::all();
// 先頭のモデルを取得
$customers = Customer::fir...
サンプルコード:モデルの作成・保存
13
Transactd PHP ORMとは?
// モデルを新規作成
$attr = ['id' => 0, 'name' => 'John'];
$customer = Customer::create(...
サンプルコード:サーバーカーソル
Transactd PHP ORMとは?
$stock = 100;
DB::beginTrn(Transactd::MULTILOCK_GAP);
$it = Entry::serverCursor(0, Q...
Transactd PHP ORMとは?
インストール方法
15
• サーバーにTransactd Pluginをインストール
http://www.bizstation.jp/ja/transactd/documents/install_pl...
その他の特長
16
Transactd PHP ORMの特長
• LaravelのEloquent ORMとほぼ同じAPI
• ORMだけ差し替えて使える
• 高速で省メモリ → 高スループット
• Eloquent ORMと比べて約2倍のスル...
ORMの諸問題への対処
17
Transactd PHP ORMの特長
• ロードタイミングの問題
• 遅延ロード
• Eager loading(n+1問題)
• プロパティのtransfer map
• 一部のプロパティを別モデルにマッピン...
複雑なデータベース処理
18
Transactd PHP ORMの特長
• Transactd PHP ORMは薄い
• ORMとAPIがシームレス
• 柔軟で自由なチューニングが可能
Transactd PHP ORM
Transactd P...
Transactd PHP ORMの特長
19
ミッションクリティカルな処理
• Transactdのアクセスはレコード単位
• シングルレコードロック/マルチレコード
ロックを指定可能
• 明示的なアンロック可能
ORMの利便性・生産性と
詳...
こんな方におすすめ
20
まとめ
• 「速!」と感じるアプリケーションを
作りたい
• DBサーバー数を減らしたい
• レコードロックがうまくできているか
イマイチ不安
• パフォーマンスが読めるようになりたい
(読取アクセス数やロックの想像)...
ご清聴ありがとうございました。
PDOより高速なORMライブラリ! Transactd PHP ORMリリース
http://bizstation.hatenablog.com/entry/2017/01/12/092540
Transactd...
Upcoming SlideShare
Loading in …5
×

Transactd PHP ORM

1,423 views

Published on

MySQLユーザ会会 in 長野 2017(2017/05/13)発表資料
#nseg #mysql_jp

Transactd PHP ORM ドキュメント
http://www.bizstation.jp/ja/transactd/documents/ormdocuments/

PDOより高速なORMライブラリ! Transactd PHP ORMリリース
http://bizstation.hatenablog.com/entry/2017/01/12/092540

Twitter @bizstationcorp

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Transactd PHP ORM

  1. 1. Transactd PHP ORM ビズステーション株式会社 矢口 尚 1
  2. 2. 矢口 尚 (Hisashi Yaguchi) ビズステーション株式会社 代表取締役社長 所在地 :長野県松本市井川城 主な事業:販売管理・財務会計ソフト開発販売 (主にSnap-on用) システムコンサルティング 言語 :C++好き Java(Android) PHP Ruby http://www.bizstation.jp Twitter @bizstationcorp 自己紹介 2
  3. 3. Transactd PHP ORM 3
  4. 4. Transactdとは? MySQLで SQLを使わずに データにアクセス するプラグイン 4
  5. 5. Transactdとは? クライアント Transactd Client サーバー Transactd Plugin しくみ:クライアントとサーバー 5 MySQL Server Storage Engines (InnoDB) SQL Layer Handler Interface Transactd Plugin App MySQL ClientTransactd Client Transactd API SQL HandlerSocket と同様
  6. 6. Transactdとは? しくみ:サーバーカーソル 6 id name group 1 Akio 3 2 Yoko 1 3 Naoko 2 4 Takeshi 1 5 Ichiro 1 6 Miki 2 seekFirst 先頭の行に移動 seekNext 次の行に移動 seekLast 末尾の行に移動 seekPrev 前の行に移動 seekEqual キー値の行に移動(==) seekLessThan キー値の行に移動(<=) seekGreater キー値の行に移動(>=) seekFirst 先頭の行に移動 seekNext 次の行に移動 seekLast 末尾の行に移動 seekPrev 前の行に移動 seekFirst 先頭の行に移動 seekNext 次の行に移動 seekLast 末尾の行に移動 seekFirst 先頭の行に移動 seekNext 次の行に移動 seekFirst 先頭の行に移動
  7. 7. Transactdとは? 高機能 7 • INSERT / UPDATE / DELETE • トランザクション • スナップショット • ロック制御 • DDL • レプリケーション制御 • HAコントロール アプリケーション開発に 必要な機能は 一通り揃っています! など…
  8. 8. Transactd PHP ORM 8 Transactdを使って 実装された PHP製のORM
  9. 9. Transactd PHP ORMの特長 (たぶん)最速のORM . 9 モデルの取得速度 • Laravel 5.3の5倍↑ • PDOの2倍 100個のモデル取得にかかる時間 ORMなのに PDOより高速 !?
  10. 10. Transactd PHP ORMの特長 なぜ速いのか? 10 • TransactdとORMの相性がよい • ORMはテーブル単位のアクセスが多い → Transactdの得意な分野 • Transactd自体にオブジェクトへのマッピング 機能がある → PHPで書かれた部分が少ない • スピードに注意を払った設計 プロパティアクセス高速化 (約70倍) Transactd Laravel 5.3 0.0002528 0.018078 取得済みモデル(200個)にプロパティの 読み取りと設定を10回ずつ行ったときの時間
  11. 11. サンプルコード:モデル定義 11 Transactd PHP ORMとは? class Invoice extends Model { protected static $guarded = ['id']; public static $aliases = ['sales_amount' => 'sales']; public function items() { return $this->hasMany('InvoiceItem'); } public function customer() { return $this->belongsTo('Customer'); } } 列名にエイリアスを設定 伝票は複数の明細を持つ(hasMany) 伝票は1人の顧客に属する (belongsTo)
  12. 12. サンプルコード:モデルの取得 12 Transactd PHP ORMとは? // すべてのモデルを取得 $customers = Customer::all(); // 先頭のモデルを取得 $customers = Customer::first(); // プライマリキーを使用しモデルを取得 $customers = Customer::find(3); $customers = Customer::findMany([3, 4, 6]); // 条件を満たすモデルを取得 $customers = Customer::keyValue(0) ->where('name', 'John')->noBreakReject()->get(); 複数取得 1つ取得
  13. 13. サンプルコード:モデルの作成・保存 13 Transactd PHP ORMとは? // モデルを新規作成 $attr = ['id' => 0, 'name' => 'John']; $customer = Customer::create($attr); // モデルをデータベースに保存 $customer->save(); $customer->save(Model::SAVE_WITH_RELATIONS); // モデルをデータベースから削除 $customer->delete(); 関連オブジェクトも同時に保存 LaravelのORMと ほとんど同じ
  14. 14. サンプルコード:サーバーカーソル Transactd PHP ORMとは? $stock = 100; DB::beginTrn(Transactd::MULTILOCK_GAP); $it = Entry::serverCursor(0, QueryExecuter::SEEK_FIRST); while ($it->valid() && $stock > 0) { $e = $it->current(); $e->assigned = min($e->number, $stock); $stock -= $e->assigned; $it->update(); $it->next(); } DB::commit(); 先着100個・複数購入可能な予約商品の割当処理 14 TRX開始/先頭行へ移動 希望数を割当 (不足の場合は在庫数まで) 行を更新 次の行へ コミット 1行取得
  15. 15. Transactd PHP ORMとは? インストール方法 15 • サーバーにTransactd Pluginをインストール http://www.bizstation.jp/ja/transactd/documents/install_plugin.html • Transactd Client for PHPをインストール http://www.bizstation.jp/ja/transactd/documents/install_guide_php.html • ComposerでORMをインストール • Docker $ mkdir myproject $ cd myproject $ composer require transactd/orm
  16. 16. その他の特長 16 Transactd PHP ORMの特長 • LaravelのEloquent ORMとほぼ同じAPI • ORMだけ差し替えて使える • 高速で省メモリ → 高スループット • Eloquent ORMと比べて約2倍のスループット • 高可用性 • 読取をスレーブ、書込をマスターに振り分け • Transactd自体に高可用性運用の機能がある 使い方はほぼそのまま速度・可用性アップ
  17. 17. ORMの諸問題への対処 17 Transactd PHP ORMの特長 • ロードタイミングの問題 • 遅延ロード • Eager loading(n+1問題) • プロパティのtransfer map • 一部のプロパティを別モデルにマッピングする • 非正規化テーブルなどに • モデルのキャッシュ • 複雑なデータベース処理
  18. 18. 複雑なデータベース処理 18 Transactd PHP ORMの特長 • Transactd PHP ORMは薄い • ORMとAPIがシームレス • 柔軟で自由なチューニングが可能 Transactd PHP ORM Transactd PHP API O/Rマッピング機能 AppApp SQLライブラリ(PDO) SQLベースのORM O/Rマッピング機能
  19. 19. Transactd PHP ORMの特長 19 ミッションクリティカルな処理 • Transactdのアクセスはレコード単位 • シングルレコードロック/マルチレコード ロックを指定可能 • 明示的なアンロック可能 ORMの利便性・生産性と 詳細なロック制御による同時実行性を 両立可能
  20. 20. こんな方におすすめ 20 まとめ • 「速!」と感じるアプリケーションを 作りたい • DBサーバー数を減らしたい • レコードロックがうまくできているか イマイチ不安 • パフォーマンスが読めるようになりたい (読取アクセス数やロックの想像) • 日頃からSQLは冗長だと感じている
  21. 21. ご清聴ありがとうございました。 PDOより高速なORMライブラリ! Transactd PHP ORMリリース http://bizstation.hatenablog.com/entry/2017/01/12/092540 Transactd PHP ORM ドキュメント http://www.bizstation.jp/ja/transactd/documents/ormdocuments/ Transactd チュートリアル http://www.bizstation.jp/ja/transactd/documents/tutorial.html 21 C++/PHP/Ruby/C#/JScript対応 GitHub https://github.com/bizstation/transactd Twitter @bizstationcorp

×