Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゲームタイトル開発側と サーバー基盤の連携事例の紹介

Avatar for COLOPL Inc. COLOPL Inc.
September 28, 2023

ゲームタイトル開発側と サーバー基盤の連携事例の紹介

Avatar for COLOPL Inc.

COLOPL Inc.

September 28, 2023
Tweet

More Decks by COLOPL Inc.

Other Decks in Technology

Transcript

  1. 2 経歴 1. 2019年:新卒入社 2. 運用ゲームタイトル2年 3. 新規ゲームタイトルローンチ + 運用移行

    4. 新規ゲームタイトル開発2年 ← Now ! 氏名 : 職種 : 所属 : 薮 智仁 サーバーサイドエンジニア 技術基盤本部 第3バックエンドエンジニア部 マネージャー補佐 自己紹介
  2. 12 ②コントリビュート編 問題:Model::push() の標準実装がループで Model::save() を呼んでおりN+1クエリになっていた $user->push(); // INSERT INTO

    UserItem (userId, itemId, amount) VALUES ('user1', 1, 2); // INSERT INTO UserItem (userId, itemId, amount) VALUES ('user1', 2, 5); // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId = 3; // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId = 4;
  3. 13 ②コントリビュート編 問題:Model::push() の標準実装がループで Model::save() を呼んでおりN+1クエリになっていた $user->push(); // INSERT INTO

    UserItem (userId, itemId, amount) VALUES ('user1', 1, 2); // INSERT INTO UserItem (userId, itemId, amount) VALUES ('user1', 2, 5); // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId = 3; // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId = 4; 対応:複数モデルを一括で保存するよう Model::push() の中身をオーバーライド $user->push(); // INSERT INTO UserItem (userId, itemId, amount) VALUES ('user1', 1, 2), ('user1', 2, 5); // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId IN (3, 4);
  4. 14 ②コントリビュート編 問題:Model::push() の標準実装がループで Model::save() を呼んでおりN+1クエリになっていた $user->push(); // INSERT INTO

    UserItem (userId, itemId, amount) VALUES ('user1', 1, 2); // INSERT INTO UserItem (userId, itemId, amount) VALUES ('user1', 2, 5); // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId = 3; // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId = 4; 対応:複数モデルを一括で保存するよう Model::push() の中身をオーバーライド $user->push(); // INSERT INTO UserItem (userId, itemId, amount) VALUES ('user1', 1, 2), ('user1', 2, 5); // UPDATE UserItem SET amount = 10 WHERE userId = 'user1' AND itemId IN (3, 4); ゲームタイトルのコードはそのままでDB負荷を軽減! 🥳