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

clamAV

ウイルスソフトclamAVのインストールと使用法について Contents1 インストール1.1 CentOS61.2 CentOS72 スキャン実行の設定に関して インストール CentOS6 [c …

no image

論理設計のアンチパターン

今回からは論理設計のアンチパターンについて。 やってはいけない設計のパターンですね。これはまわりがやっていると気づかずにやっている可能性があるのでしっかりメモしておきたいです。 Contents1 非 …

no image

dockerインストール

ansibleに続いてdockerについて書いていこうと思います。 Contents1 dockerとは?1.1 インストール1.2 イメージ取得&コンテナ作成1.3 commit1.4 参考リンク …

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

MySQL小ネタ テーブル単位のリストア・SQLの小ネタ(バックスラッシュの検索)

MySQLのちょい小ネタ。 Contents1 テーブル単位でバックアップ&リストア2 バックスラッシュの入ったSQLについて テーブル単位でバックアップ&リストア 1 通常のdump(データベース単 …