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

サーバー設定ファイルについて fastcgi周り

前回nginxの設定を書きましたが、今回はFastCGIについてメモ。 Contents1 そもそもCGIとは?2 CGIのデメリット3 FastCGIとは?4 ソース5 参考リンク そもそもCGIと …

no image

pythonのアップグレードに関して

pythonのアップグレードに関して。 python2.6だとpipがインストールされていないのですが、入れようとしてハマったのでメモ。 一般的なインストール方法ですが、下記のようになります。 [cr …

no image

パス名パラメータの未チェック・ディレクトリトラバーサル

本日もセキュリティ関係のネタを少々。ディレクトリ・トラバーサルという攻撃です。 Contents1 ディレクトリ・トラバーサルとは?2 被害3 対策4 参考リンク ディレクトリ・トラバーサルとは? g …

no image

nginxインストール(サブディレクトリでcakePHPを使いたいとき)

以前nginxのインストールを行いましたが、理解が浅かったようで今回すげーはまりました(汗) ガチンコ塾でもいっていますが、覚え始めの時はコピペでもいいですが(最初から100%の理解は非現実的)、慣れ …

no image

serverspecによるサーバー自動テスト

最近は管理しているサーバーが多いのと、構成管理ツール(Ansible)なんかをちょくちょく使ってますが、ちゃんと入っているかどうかを確認するのはそれなりに大変だったりします。 が、構成管理ツール自体も …

アーカイブ