垂直分割と水平分割の違いについて。
こんばんは、紫苑です。
以前、(株)アカツキ様主催の#ゲームサーバ勉強会の中で話があった
垂直分割と水平分割について、なんとなーく理解をした(気持ちになっていること)のまとめ。
1.そもそもなんでやるの?
ソシャゲはリリース開始後、ゲームの知名度や認知度等によって、登録ユーザが初期想定時以上の爆発的な増加、1ユーザに対する蓄積データの量の多さ等々にさらされることがある。
そして、ゲームを登録したユーザの情報は例え1時間でプレイをした人のデータであったとしても登録をされている限り、いつユーザが復活してもいいようにデータを保持する必要がある。
DBは24時間大量のデータを登録、更新を行い続け、大量のリクエストを処理しなければいけない。
つまり、DBへの負荷がメチャクチャ高いのである。
だが使うユーザ(ゲーマー)がいる限り、システムを止めるわけにはいかない。
運用中に実施するDBの変更は継続的な安定運用を行うための緊急措置なのだ。
2.垂直分割ってなんぞ?
垂直分割はテーブルをレコードの意味別に分ける。
いわばテーブルによる役割分担である。
上記図を例に説明する。
ユーザIDなど一度登録をしたら、更新をすることがない静的なデータと、
ユーザレベルや経験値などゲームのクエストクリア後、頻繁に更新され、桁数が多い動的なデータとでテーブルを分ける。
そうすることで、処理負荷が低いテーブルと高いテーブルを分担することで、DBの性能を維持する。
3.水平分割ってなんぞ?
水平分割は同じカラム構成にしたテーブルを複数用意し、
格納するデータを分けることでレコードの分散化をすることである。
4.まとめ
垂直分割も、水平分割もシステムが稼働中はやらなければいいに越したことはない。
が、運用が始まると想定外の事象が発生し、システムの現状維持が困難になるときがある。それを回避するために行われるいわばDBの大手術なのである。
私だったら、こんな場面には絶対に遭遇したくない(本音)
ソシャゲエンジニアーの日々のたゆまぬ努力があり、
私達は天使や嫁に会えることができ、廃人にもなれるのである。