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

PHP_CodeSnifferによるコードチェック

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

no image

OSコマンドインジェクション

Contents1 OSコマンドインジェクションとは?2 被害3 対策4 参考リンク OSコマンドインジェクションとは? OSに対する命令文を不正に紛れ込ませて攻撃させる手法。 被害 サーバー内のファ …

no image

firewall復習 ansibleコマンドもかねて

CentOS7ではファイアーウォールの設定をfirewallというコマンドで行います。要はportのブロックですね。 以前下記リンクでもfirewallについて書いたんですが、あまり理解もできていなか …

no image

MySQLのLIMIT,OFFSETに関して&explainの見方など

自作のWEBアプリを作っていたところSELECT句が異常に遅いケースがありました。 発見までにかなり時間がかかったんですが、不可思議な現象としてはOFFSETが小さいときと大きいときで検索スピードが全 …

no image

MySQLの大文字、小文字問題について

MySQLでテーブルを作る際にカラムに重複を許さない制約(unique)を振ることがあると思います。 数字の場合は問題ないのですが、文字列の場合、なんと英語の大文字と小文字が区別されません。 つまりa …