Skip to main content
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
EN
Upload
Download free for 30 days
Sign in
Uploaded by
sairoutine
PPTX, PDF
34,965 views
ゲームエンジニアのためのデータベース設計
GameServerDevelopers Vol.1 https://gsdevelopers.doorkeeper.jp/events/42497
Engineering
◦
Read more
163
Save
Share
Embed
Save to Drive
Download now
Downloaded 78 times
1
/ 32
2
/ 32
Most read
3
/ 32
4
/ 32
5
/ 32
Most read
6
/ 32
7
/ 32
8
/ 32
9
/ 32
10
/ 32
11
/ 32
12
/ 32
13
/ 32
14
/ 32
15
/ 32
16
/ 32
17
/ 32
18
/ 32
19
/ 32
20
/ 32
More Related Content
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
30 slides
49.4K views
PPTX
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
120 slides
268.3K views
PDF
例外設計における大罪
by
Takuto Wada
37 slides
76.9K views
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
45 slides
174.7K views
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
45 slides
130.7K views
PPT
インフラエンジニアのためのcassandra入門
by
Akihiro Kuwano
85 slides
72.1K views
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
30 slides
49.4K views
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
プログラムを高速化する話
by
京大 マイコンクラブ
120 slides
268.3K views
例外設計における大罪
by
Takuto Wada
37 slides
76.9K views
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
45 slides
174.7K views
分散システムについて語らせてくれ
by
Kumazaki Hiroki
45 slides
130.7K views
インフラエンジニアのためのcassandra入門
by
Akihiro Kuwano
85 slides
72.1K views
What's hot
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
65 slides
109.5K views
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
141K views
PDF
オンラインゲームの仕組みと工夫
by
Yuta Imai
56 slides
889.1K views
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
42 slides
41.4K views
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
77 slides
54.9K views
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
96 slides
37.4K views
PDF
組織にテストを書く文化を根付かせる戦略と戦術
by
Takuto Wada
33 slides
77.9K views
PDF
できる!並列・並行プログラミング
by
Preferred Networks
57 slides
27.5K views
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
28 slides
29.1K views
PPTX
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
27 slides
45.8K views
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
54 slides
9.9K views
PPTX
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
49 slides
13.1K views
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
24 slides
197.2K views
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
94 slides
77.1K views
PDF
HTTP/2 入門
by
Yahoo!デベロッパーネットワーク
33 slides
64.3K views
PPTX
初心者向けMongoDBのキホン!
by
Tetsutaro Watanabe
21 slides
53.4K views
PDF
DockerとPodmanの比較
by
Akihiro Suda
37 slides
64.8K views
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
25 slides
24.2K views
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
12 slides
16.2K views
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
70 slides
753.9K views
Redisの特徴と活用方法について
by
Yuji Otani
65 slides
109.5K views
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
141K views
オンラインゲームの仕組みと工夫
by
Yuta Imai
56 slides
889.1K views
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
42 slides
41.4K views
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
77 slides
54.9K views
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
96 slides
37.4K views
組織にテストを書く文化を根付かせる戦略と戦術
by
Takuto Wada
33 slides
77.9K views
できる!並列・並行プログラミング
by
Preferred Networks
57 slides
27.5K views
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
28 slides
29.1K views
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
27 slides
45.8K views
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
54 slides
9.9K views
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
49 slides
13.1K views
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
24 slides
197.2K views
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
94 slides
77.1K views
HTTP/2 入門
by
Yahoo!デベロッパーネットワーク
33 slides
64.3K views
初心者向けMongoDBのキホン!
by
Tetsutaro Watanabe
21 slides
53.4K views
DockerとPodmanの比較
by
Akihiro Suda
37 slides
64.8K views
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
25 slides
24.2K views
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
12 slides
16.2K views
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
70 slides
753.9K views
Viewers also liked
PDF
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
by
Unity Technologies Japan K.K.
26 slides
994 views
PDF
基本に戻ってInnoDBの話をします
by
yoku0825
45 slides
16.5K views
PPT
実行時のために最適なデータ構造を作成しよう
by
Hiroki Omae
21 slides
16.1K views
PDF
Amebaソシャゲ分析事例のご紹介
by
Masanori Takano
36 slides
29.4K views
PDF
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
by
infinite_loop
77 slides
44K views
PPTX
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
by
Daisuke Nogami
36 slides
45.3K views
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
51 slides
52.6K views
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
35 slides
68.8K views
PPTX
Unityで本格戦国シュミレーションRPG 開発
by
dena_study
27 slides
15K views
PDF
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
by
Unity Technologies Japan K.K.
53 slides
31.4K views
PDF
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
by
Takahiro YAMAGUCHI
106 slides
63.3K views
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
145 slides
104K views
PDF
MySQLテーブル設計入門
by
yoku0825
145 slides
48.4K views
【Unite 2017 Tokyo】Nintendo Switch™ 本体同時発売必達、家庭用向けRPG「いけにえと雪のセツナ」開発の裏側
by
Unity Technologies Japan K.K.
26 slides
994 views
基本に戻ってInnoDBの話をします
by
yoku0825
45 slides
16.5K views
実行時のために最適なデータ構造を作成しよう
by
Hiroki Omae
21 slides
16.1K views
Amebaソシャゲ分析事例のご紹介
by
Masanori Takano
36 slides
29.4K views
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
by
infinite_loop
77 slides
44K views
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
by
Daisuke Nogami
36 slides
45.3K views
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
51 slides
52.6K views
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
35 slides
68.8K views
Unityで本格戦国シュミレーションRPG 開発
by
dena_study
27 slides
15K views
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
by
Unity Technologies Japan K.K.
53 slides
31.4K views
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
by
Takahiro YAMAGUCHI
106 slides
63.3K views
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
145 slides
104K views
MySQLテーブル設計入門
by
yoku0825
145 slides
48.4K views
Similar to ゲームエンジニアのためのデータベース設計
PDF
Enter the-dolphine
by
Mikiya Okuno
58 slides
1.7K views
PDF
MySQL 5.5 Update #denatech
by
Mikiya Okuno
46 slides
3.1K views
PDF
SQL Server チューニング基礎
by
Microsoft
50 slides
684 views
PDF
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
by
Ryota Watabe
35 slides
2.3K views
PDF
Databasedesignforsocialgames 110115195940-phpapp02
by
hideki hasegawa
33 slides
1K views
PDF
InnoDBのすゝめ(仮)
by
Takanori Sejima
61 slides
24.7K views
PPTX
そこそこ速くて安全なRDBの使い方
by
ShunsukeNakamura17
68 slides
408 views
PPTX
MySQLの運用でありがちなこと
by
Hiroaki Sano
30 slides
20K views
PDF
Introduction of Oracle Database Architecture
by
Ryota Watabe
43 slides
4.3K views
PDF
Deep Dive: Amazon DynamoDB (db tech showcase 2016)
by
Amazon Web Services Japan
61 slides
27.3K views
PDF
ふくよかなモデル
by
yukaina
82 slides
966 views
PDF
20150920 中国地方db勉強会
by
yoyamasaki
58 slides
2.2K views
PDF
オープニングセッション
by
konekto
14 slides
635 views
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
65 slides
97.9K views
PDF
ソーシャルゲームの為のデータベース設計
by
kaminashi
31 slides
3.9K views
PPTX
LINEのMySQL運用について 修正版
by
LINE Corporation
63 slides
134.6K views
PPT
081108huge_data.ppt
by
Naoya Ito
80 slides
2.8K views
PPT
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
by
Toru Miyahara
81 slides
79 views
PDF
[db tech showcase Tokyo 2015] D23:MySQLはドキュメントデータベースになり、HTTPもしゃべる - MySQL Lab...
by
Insight Technology, Inc.
40 slides
8K views
PDF
MySQL最新情報
by
yoyamasaki
33 slides
1.2K views
Enter the-dolphine
by
Mikiya Okuno
58 slides
1.7K views
MySQL 5.5 Update #denatech
by
Mikiya Okuno
46 slides
3.1K views
SQL Server チューニング基礎
by
Microsoft
50 slides
684 views
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
by
Ryota Watabe
35 slides
2.3K views
Databasedesignforsocialgames 110115195940-phpapp02
by
hideki hasegawa
33 slides
1K views
InnoDBのすゝめ(仮)
by
Takanori Sejima
61 slides
24.7K views
そこそこ速くて安全なRDBの使い方
by
ShunsukeNakamura17
68 slides
408 views
MySQLの運用でありがちなこと
by
Hiroaki Sano
30 slides
20K views
Introduction of Oracle Database Architecture
by
Ryota Watabe
43 slides
4.3K views
Deep Dive: Amazon DynamoDB (db tech showcase 2016)
by
Amazon Web Services Japan
61 slides
27.3K views
ふくよかなモデル
by
yukaina
82 slides
966 views
20150920 中国地方db勉強会
by
yoyamasaki
58 slides
2.2K views
オープニングセッション
by
konekto
14 slides
635 views
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
65 slides
97.9K views
ソーシャルゲームの為のデータベース設計
by
kaminashi
31 slides
3.9K views
LINEのMySQL運用について 修正版
by
LINE Corporation
63 slides
134.6K views
081108huge_data.ppt
by
Naoya Ito
80 slides
2.8K views
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
by
Toru Miyahara
81 slides
79 views
[db tech showcase Tokyo 2015] D23:MySQLはドキュメントデータベースになり、HTTPもしゃべる - MySQL Lab...
by
Insight Technology, Inc.
40 slides
8K views
MySQL最新情報
by
yoyamasaki
33 slides
1.2K views
More from sairoutine
PPTX
How to manage parameters for gacha games
by
sairoutine
24 slides
460 views
PPTX
DeNAの最新のマスタデータ管理システム Oyakata の全容
by
sairoutine
29 slides
4.6K views
PPTX
Dark side of the reflect
by
sairoutine
30 slides
12.2K views
PPTX
マジック・ザ・ギャザリングの背景世界とストーリー
by
sairoutine
43 slides
5.3K views
PPTX
em-dosbox
by
sairoutine
13 slides
1K views
PPTX
flow による型のある世界入門
by
sairoutine
39 slides
4.5K views
PPTX
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
by
sairoutine
77 slides
4K views
PPTX
Mithril - 軽量/高速なMVCフレームワーク
by
sairoutine
44 slides
3.2K views
PPTX
Touhou Project on JavaScript
by
sairoutine
13 slides
893 views
PPTX
JSでファミコンエミュレータを作った時の話
by
sairoutine
31 slides
31.1K views
PPTX
JS と Canvas で作るシューティングゲーム
by
sairoutine
20 slides
2.7K views
PPTX
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
by
sairoutine
22 slides
5.7K views
How to manage parameters for gacha games
by
sairoutine
24 slides
460 views
DeNAの最新のマスタデータ管理システム Oyakata の全容
by
sairoutine
29 slides
4.6K views
Dark side of the reflect
by
sairoutine
30 slides
12.2K views
マジック・ザ・ギャザリングの背景世界とストーリー
by
sairoutine
43 slides
5.3K views
em-dosbox
by
sairoutine
13 slides
1K views
flow による型のある世界入門
by
sairoutine
39 slides
4.5K views
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
by
sairoutine
77 slides
4K views
Mithril - 軽量/高速なMVCフレームワーク
by
sairoutine
44 slides
3.2K views
Touhou Project on JavaScript
by
sairoutine
13 slides
893 views
JSでファミコンエミュレータを作った時の話
by
sairoutine
31 slides
31.1K views
JS と Canvas で作るシューティングゲーム
by
sairoutine
20 slides
2.7K views
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
by
sairoutine
22 slides
5.7K views
ゲームエンジニアのためのデータベース設計
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. 多様な選択肢 RDBMS MySQL Oracle PostgreSQL KVS Redis Riak カラム指向型 Apache Cassandra Hbase ドキュメント指向 MongoDB Apache CouchDB etc…
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 100 2 Bさん 200 150 ユーザーID アイテムID 所持数 1 1 1 1 2 3 1 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 構成 Master Slave 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 の buffer pool に乗るようにする 時限付きデータ(イベントデータ等)は別テーブルにすることでイベント 終了後に drop table できるようにする IN句でSELECT SELECT * FROM user WHERE id IN(1, 2, 3, ...); Bulk insert INSERT INTO user values (1,'tanaka'),(2,'yamada'),(3,'hansen'); INSERT INTO … ON DUPLICATE KEY UPDATE … レコードが存在しなければ INSERT 、存在すれば UPDATE を 1 query で実行できる。
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への変更が slave DBへ反映が遅れること)が発生する 回復アイテムの使用(Masterを更新)→次ページで使用結果を見ると回復 していない(Slave にまだ回復の反映が遅れてる) →更新処理後、更新したデータをcacheに詰めて、遷移先で使用する →更新処理後、更新処理から遷移されてきたかどうかを見て、master or 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
インデックス効かない場合の解決策 見出しは文字をでっかく