skillup

技術ブログ

Database サーバー・ネットワーク

大規模Webサービス技術入門 DBの分散

投稿日:

前回に引き続き、大規模サービスを運用するときに必要になるMySQLの知識についてのまとめ

テーブル・SQL設計

  • 大前提としてすべてのデータをいかにメモリ上にのせられるかが大事
  • カラム定義の際、データサイズをなるべく小さくするようにする
  • インデックスを適切にはる→特にid系のデータ(whereやjoinで使用されるもの)
  • ただしインデックスはある程度のデータ量出ないとスピードが出ない(千件程度なら問題ない)&更新時には遅くなる
  • あるテーブルに二つのカラムがあり、独立してインデックスが張られていた場合、2つのカラムで検索しても片方だけしか使われない。この場合、組み合わせたキーで検索をかけた場合のパフォーマンスを上げたい場合、組み合わせたカラムに対してインデックスを張る必要がある
  • 具体的なパフォーマンスを知りたい場合、EXPLAIN句のROWの部分を少なくするようにする

http://skill-up-engineering.com/?p=1288

レプリケーション機能

  • データベースをマスターとスレーブに分ける。スレーブは常にマスタのコピーという状態にする
  • スレーブは主に参照系の処理の対応。更新系の処理は基本的にマスタで一括対応。(複数にわけると整合性をとるのが難しいため)
  • 上記のような用途から必然的にマスタのスケールはあまりしない。
  • ダウン時のリカバリがとても大変。

パーティショニング

  • データがメモリ上に乗らない場合につかう最終手段
  • テーブルを別々のサーバーにわけること
  • 別々のサーバーに分けるとJOINができないため、JOINをするような要素のものはパーティショニングさせない。
  • メモリ増設で対応できるならそちらで対応したほうがコスパ的にはいい

-Database, サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

HAVING句の活用 発展編

今回からはまたまたHAVING句です。 下記のようなテーブル(teams)があり、全員が待機状態のチーム(全員がそろっている)を求めます。 member | team_id | status &#82 …

no image

dockerでの環境構築 〜コンテナ作成し、実作業ができるまで(mac編)

今や環境構築の保存や移行などが比較的自由にできるようにはなってきていると思います。 自分の場合は未だにvagrantのイメージフォルダを移行してやっていますが(汗)。 参考リンク vagrantで仮想 …

no image

vimの基本的な使い方 設定ファイル、基本コマンド他

もう4年ぐらいの付き合いになる憎らしくもかわいいエディタvi(vim)について。 雑誌に特集があったのでこれを機にまとめてみました。シリーズものになるかも・・・ Contents1 Vi(vim)とは …

no image

PHP_CodeSnifferによるコードチェック

昨日の記事でphpmdという静的解析ツールを調査したんですが、それ以外にも規約にのっとっているかどうかコーディングをチェックできるツールはあります。 PHP_CodeSniffer https://g …

no image

正規化について&EXTRACT

Contents1 正規化とは?2 第一正規化3 SQLネタ EXTRACT 正規化とは? 正確な定義は難しいですが、8割ぐらいあっている定義としては「適切なテーブルに分割すること」です。※ただし正確 …

アーカイブ