Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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...
Prochain SlideShare
Chargement dans…5
×

Transactd PHP ORM

1 807 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

×