Movatterモバイル変換
[0]
ホーム
URL:
画像なし
夜間モード
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
sairoutine
PPTX, PDF
34,831 views
ゲームエンジニアのためのデータベース設計
GameServerDevelopers Vol.1https://gsdevelopers.doorkeeper.jp/events/42497
Engineering
◦
Read more
163
Save
Share
Embed
Embed presentation
Download
Downloaded 76 times
1
/ 32
2
/ 32
Most read
3
/ 32
4
/ 32
5
/ 32
6
/ 32
7
/ 32
8
/ 32
9
/ 32
10
/ 32
11
/ 32
12
/ 32
Most read
13
/ 32
14
/ 32
15
/ 32
Most read
16
/ 32
17
/ 32
18
/ 32
19
/ 32
20
/ 32
21
/ 32
22
/ 32
23
/ 32
24
/ 32
25
/ 32
26
/ 32
27
/ 32
28
/ 32
29
/ 32
30
/ 32
31
/ 32
32
/ 32
Recommended
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
PDF
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
PDF
ゲームの仕様書を書こうまとめ
by
Sugimoto Chizuru
PDF
ドメイン駆動設計 本格入門
by
増田 亨
PDF
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
by
Preferred Networks
PDF
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
by
historia_Inc
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
C#でもメタプログラミングがしたい!!
by
TATSUYA HAYAMIZU
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
PPTX
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PPTX
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
by
DeNA
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
More Related Content
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
PDF
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
Redisの特徴と活用方法について
by
Yuji Otani
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
What's hot
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
PDF
ゲームの仕様書を書こうまとめ
by
Sugimoto Chizuru
PDF
ドメイン駆動設計 本格入門
by
増田 亨
PDF
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
by
Preferred Networks
PDF
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
by
historia_Inc
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
C#でもメタプログラミングがしたい!!
by
TATSUYA HAYAMIZU
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
PPTX
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PPTX
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
by
DeNA
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
ゲームの仕様書を書こうまとめ
by
Sugimoto Chizuru
ドメイン駆動設計 本格入門
by
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
by
Preferred Networks
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
by
historia_Inc
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
C#でもメタプログラミングがしたい!!
by
TATSUYA HAYAMIZU
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
正しいものを正しく作る塾-設計コース
by
増田 亨
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
やはりお前らのMVCは間違っている
by
Koichi Tanaka
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
by
DeNA
Viewers also liked
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
PDF
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
by
infinite_loop
PPTX
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
by
Daisuke Nogami
PDF
基本に戻ってInnoDBの話をします
by
yoku0825
PPTX
Unityで本格戦国シュミレーションRPG 開発
by
dena_study
PDF
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
by
Takahiro YAMAGUCHI
PPT
実行時のために最適なデータ構造を作成しよう
by
Hiroki Omae
PDF
Amebaソシャゲ分析事例のご紹介
by
Masanori Takano
PDF
MySQLテーブル設計入門
by
yoku0825
PDF
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
by
Unity Technologies Japan K.K.
PDF
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
by
Unity Technologies Japan K.K.
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
by
infinite_loop
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
by
Daisuke Nogami
基本に戻ってInnoDBの話をします
by
yoku0825
Unityで本格戦国シュミレーションRPG 開発
by
dena_study
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
by
Takahiro YAMAGUCHI
実行時のために最適なデータ構造を作成しよう
by
Hiroki Omae
Amebaソシャゲ分析事例のご紹介
by
Masanori Takano
MySQLテーブル設計入門
by
yoku0825
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
by
Unity Technologies Japan K.K.
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
by
Unity Technologies Japan K.K.
Similar to ゲームエンジニアのためのデータベース設計
PDF
ソーシャルゲームの為のデータベース設計
by
kaminashi
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PDF
InnoDBのすゝめ(仮)
by
Takanori Sejima
PDF
SQL Server チューニング基礎
by
Microsoft
PPTX
LINEのMySQL運用について 修正版
by
LINE Corporation
PDF
Deep Dive: Amazon DynamoDB (db tech showcase 2016)
by
Amazon Web Services Japan
PPTX
MySQLの運用でありがちなこと
by
Hiroaki Sano
PDF
Introduction of Oracle Database Architecture
by
Ryota Watabe
PPT
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
by
Toru Miyahara
PDF
MySQL 5.5 Update #denatech
by
Mikiya Okuno
PDF
Databasedesignforsocialgames 110115195940-phpapp02
by
hideki hasegawa
PPTX
そこそこ速くて安全なRDBの使い方
by
ShunsukeNakamura17
PDF
MySQL最新情報
by
yoyamasaki
PDF
[db tech showcase Tokyo 2015] D23:MySQLはドキュメントデータベースになり、HTTPもしゃべる - MySQL Lab...
by
Insight Technology, Inc.
PDF
Enter the-dolphine
by
Mikiya Okuno
PDF
20150920 中国地方db勉強会
by
yoyamasaki
PPT
081108huge_data.ppt
by
Naoya Ito
PDF
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
by
Ryota Watabe
PDF
オープニングセッション
by
konekto
PDF
ふくよかなモデル
by
yukaina
ソーシャルゲームの為のデータベース設計
by
kaminashi
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
InnoDBのすゝめ(仮)
by
Takanori Sejima
SQL Server チューニング基礎
by
Microsoft
LINEのMySQL運用について 修正版
by
LINE Corporation
Deep Dive: Amazon DynamoDB (db tech showcase 2016)
by
Amazon Web Services Japan
MySQLの運用でありがちなこと
by
Hiroaki Sano
Introduction of Oracle Database Architecture
by
Ryota Watabe
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
by
Toru Miyahara
MySQL 5.5 Update #denatech
by
Mikiya Okuno
Databasedesignforsocialgames 110115195940-phpapp02
by
hideki hasegawa
そこそこ速くて安全なRDBの使い方
by
ShunsukeNakamura17
MySQL最新情報
by
yoyamasaki
[db tech showcase Tokyo 2015] D23:MySQLはドキュメントデータベースになり、HTTPもしゃべる - MySQL Lab...
by
Insight Technology, Inc.
Enter the-dolphine
by
Mikiya Okuno
20150920 中国地方db勉強会
by
yoyamasaki
081108huge_data.ppt
by
Naoya Ito
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
by
Ryota Watabe
オープニングセッション
by
konekto
ふくよかなモデル
by
yukaina
More from sairoutine
PPTX
DeNAの最新のマスタデータ管理システム Oyakata の全容
by
sairoutine
PPTX
JSでファミコンエミュレータを作った時の話
by
sairoutine
PPTX
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
by
sairoutine
PPTX
flow による型のある世界入門
by
sairoutine
PPTX
Mithril - 軽量/高速なMVCフレームワーク
by
sairoutine
PPTX
em-dosbox
by
sairoutine
PPTX
JS と Canvas で作るシューティングゲーム
by
sairoutine
PPTX
Touhou Project on JavaScript
by
sairoutine
PPTX
How to manage parameters for gacha games
by
sairoutine
PPTX
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
by
sairoutine
PPTX
マジック・ザ・ギャザリングの背景世界とストーリー
by
sairoutine
PPTX
Dark side of the reflect
by
sairoutine
DeNAの最新のマスタデータ管理システム Oyakata の全容
by
sairoutine
JSでファミコンエミュレータを作った時の話
by
sairoutine
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
by
sairoutine
flow による型のある世界入門
by
sairoutine
Mithril - 軽量/高速なMVCフレームワーク
by
sairoutine
em-dosbox
by
sairoutine
JS と Canvas で作るシューティングゲーム
by
sairoutine
Touhou Project on JavaScript
by
sairoutine
How to manage parameters for gacha games
by
sairoutine
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
by
sairoutine
マジック・ザ・ギャザリングの背景世界とストーリー
by
sairoutine
Dark side of the reflect
by
sairoutine
ゲームエンジニアのためのデータベース設計
1.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.ゲームエンジニアのためのデータベース設計株式会社 DeNA Games Osaka技術編成部人西 聖樹 masaki.hitonishi@dena.com
2.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.自己紹介 人西聖樹 (ひとにし まさき) 株式会社 DeNA Games Osaka 2014年 入社 Webアプリケーションエンジニア シューティングゲーム好き。東方Project 大好き 某400万人ユーザー超えモバイルゲームの開発やってます
3.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.ゲームのサーバーサイド
4.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.データをどうやって保存しようか?
5.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.多様な選択肢 RDBMSMySQLOraclePostgreSQL KVSRedisRiak カラム指向型Apache CassandraHbase ドキュメント指向MongoDBApache CouchDBetc…
6.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.今日は MySQL の話をします!
7.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.突然ですがアンケート
8.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.MySQL使った事ある人!
9.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.explain コマンド使ったことある人!
10.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.InnoDB におけるギャップロック とネクストキーロックについて説明できる人!
11.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.本日のテーマ RDBMS (リレーショナルデータベース) とは データベース観点でのゲームのデータの特徴 データベース構築時に気をつけること アプリケーション開発時に気をつけること
12.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.リレーショナルデータベースとは データを行と列の組み合わせによる表で表す 複数の表と表を関係(リレーション)によって組み合わせられるID 名前 攻撃力 防御力1 Aさん 100 1002 Bさん 200 150ユーザーID アイテムID 所持数1 1 11 2 31 3 5ユーザーテーブルアイテム所持テーブルユーザーテーブルの情報からAさんがどのアイテムを何個所持しているか取得することができる。
13.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.ACID特性 Atomicity 原子性トランザクションの操作は全て実行されるかまったく実行されないかのどちらか Consistency 一貫性トランザクション開始時と終了時にデータの整合性が保たれる Isolation 独立性他のトランザクションによる操作の影響を受けない Durability 永続性コミットしたトランザクションのデータは保存される
14.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.ゲームデータの特徴 ユーザーを primary key としたレコードが多い 永続データと期間限定データ(イベントのデータ等)がある マスタデータ(read only)が多いアイテムマスタ、ボスマスタ、ボス出現マスタ etc… レコードの状態更新が多いボスのHP減少、HP回復、マップ移動 etc… 可用性・整合性は大切ゲームがプレイできない、アイテムを使用したのに回復していない等の不具合・障害に対して、課金しているユーザーの温度感は非常に高い
15.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.データベース構築時に考えること Master/Slave 構成 垂直分割 水平分割垂直/水平分割はアプリケーション側で対応しないといけない(MySQL 側に仕組みがない)が後から追加するのは大変なので最初から考慮して開発する
16.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.Master / Slave 構成MasterSlave Slave Slaveレプリケーション
17.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.ゲームは更新系クエリがめちゃ多い ボタンを押すだけでステータス更新 体力増減とか ボスへダメージとか アイテム獲得とか
18.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. 参照系クエリは Slave に逃せる。 Slave のスケールアウトは容易 更新系クエリは必ず Master にI/O負荷がかかる → Master はボトルネックになりがち
19.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.垂直分割AテーブルBテーブルCテーブルDテーブルEテーブルFテーブルGテーブルHテーブルIテーブル テーブルの種類によって DB を分割。 Join 句が使えなくなる。 テーブルへのアクセス数が均等になるように分割しないと負荷が偏る
20.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.水平分割 レコードのカラムの値でDBを分割 範囲取得や count, sum が面倒に auto_increment が使えなくなる→採番テーブルを別途用意するAテーブルBテーブルCテーブルAテーブルBテーブルCテーブルAテーブルBテーブルCテーブル↑ID: 1 のレコードはこっち↑ID: 2 のレコードはこっち↑ID: 3 のレコードはこっち
21.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.複数のトランザクションを扱う 複数DB へのトランザクションをどう扱うか? InnoDB の REPEATABLE READ は最初のクエリ発行時に取得できるレコードの値が決定するので、各DBに対して最初のクエリをいつ投げるか意識する必要がある。 コミットタイミングは全て同一で行うのが楽 コミットタイミングが別々だとデータ不整合が起こりやすくなる(片方はコミット済みなのにもう片方はロールバックとか…
22.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.アプリケーション開発時に気をつけること 適切なindexとindexを使える適切なクエリ クエリ発行量を減らす 行ロック レプリ遅延対策 Repeatable read の特性
23.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.インデックスInnoDB のインデックスは B+ Tree常に一定の深度になるようにバランス化された木構造1レコードの取得に対して O(log N) で探索することができる
24.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.オプティマイザオプティマイザとは・・・SQLがどのインデックスを使用し、どの順序でアクセスするかという実行計画(EXPLAIN)を決定するEXPLAIN構文・・・「EXPLAIN SELECT~」とすることで、オプティマイザが選択した実行計画を表示できるUPDATEやDELETEの場合、SELECTに書き換える必要があるmysql> explain select * from test where id = 1;+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+| 1 | SIMPLE | test | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
25.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.オプティマイザMySQLはコストベース・オプティマイザコストベースのオプティマイザでは、統計情報だけなくCPUクロックメモリ容量DISK I/O速度DBMSでのパラメータで実行計画が決定される開発環境と同じ実行計画になるとは限らないデータ件数が違うデータの種類が違うCPUクロックが違うメモリ容量が違うなどMySQL のオプティマイザは実行計画を結構見誤る不安ならばFORCE INDEX で使用するインデックスを指定する
26.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.インデックスを使えないケース例ALTER TABLE テーブル名 ADD KEY (col1, col2, col3);・否定WHERE col1 <> 1・2つ目のキーから指定WHERE col2 = 1 AND col3 = 1・カラム側に計算式を使用WHERE col1 * 100 = 100・範囲指定WHERE col1 > 1 AND col2 = 2 (col2はインデックスを使えない)・昇順と降順の混在ORDER BY col1 ASC, col2 DESC(col2はインデックスを使えない)
27.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.クエリ発行量を減らす 綺麗に正規化しない(あえて冗長にデータを持つことで 1 query で必要なデータを取得する) あえてカラムを分割する更新が低いが参照の多いテーブルはmemcached にキャッシュする更新が多いテーブルはなるべくカラムを絞って InnoDB の bufferpool に乗るようにする 時限付きデータ(イベントデータ等)は別テーブルにすることでイベント終了後に drop table できるようにする IN句でSELECTSELECT * FROM user WHERE id IN(1, 2, 3, ...); Bulk insertINSERT INTO user values (1,'tanaka'),(2,'yamada'),(3,'hansen'); INSERT INTO … ON DUPLICATE KEY UPDATE …レコードが存在しなければ INSERT 、存在すれば UPDATE を 1query で実行できる。
28.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.行ロック 同時操作を常に意識するAさんとBさんが同時にボスを攻撃したら両方ともボスを撃破した扱いになったり…Aさんが2端末使って、同時にアイテムを受け取りを押すことでアイテム増殖できたり… 前者は攻撃時にまずボスレコードをロックして、AさんとBさんの処理を直列させることで防げる 後者はアイテム受け取り時にAさんのレコードをロックして処理を直列させることで防げる ロックの順番を統一しないと、デッドロックが発生する。 必ず存在するレコードに対してロックを取る 存在しないレコードをロックすると、InnoDBの Repeatable Read では gap lock が発生し、広範囲にロックを獲得する。→ lock wait timeout
29.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.レプリケーション遅延対策 大量クエリのコミット等でレプリ遅延(master DBへの変更が slaveDBへ反映が遅れること)が発生する 回復アイテムの使用(Masterを更新)→次ページで使用結果を見ると回復していない(Slave にまだ回復の反映が遅れてる)→更新処理後、更新したデータをcacheに詰めて、遷移先で使用する→更新処理後、更新処理から遷移されてきたかどうかを見て、masteror slave のどちらを参照するか決める 1リクエスト内で Slave のデータを元に Master を更新すると、レプリ遅延で古い Slave のデータを参照していてデータの不整合が起こる→更新系のリクエスト内で参照するDB は Master で統一する
30.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.KVSとの併用について ゲームデータのキャッシュは難しい 更新を頻繁に行うのでキャッシュクリア処理が面倒 忘れると気づきづらい障害に トランザクションとの整合性 Read Only のデータ(マスタ等)をキャッシュするのが一番楽
31.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. ゲームサーバーのデータベースは整合性/負荷との戦い ノウハウを知って急激なアクセス増加にも耐えられる構築/開発をしよう
32.
Copyright © DeNA
Co.,Ltd. All Rights Reserved.おわり
Editor's Notes
#27
インデックス効かない場合の解決策見出しは文字をでっかく
Download
[8]
ページ先頭
©2009-2025
Movatter.jp