データを圧縮することによって、そのままではキャッシュに全部のらなかったものがのるようになって、効率化ができるようになります。追いついていないときにサーバを増やす分には単純に増やせばよいですが、ディスクアクセスによる負荷を軽減する場合は単純に増やすことはできません。軽減する目的でサーバを増設する場合には、アクセスパターンを考慮して十分にデータがキャッシュにのるようにサーバを増やす必要があります。単純に同じサーバを増やすというのでは効果がないことがあります。データベースがボトルネックになっているときには、データ量が多いテーブルをメモリが潤沢なサーバに移すなどのアクセスパターンによってサーバを分散させるようにする必要があります。局所性を考慮した分散いかにしてデータをキャッシュにのせた状態で処理するかを考えて、分散を行う必要があります。データベースの分散の手法には様々ありますが、主なものには次のものがあります。テーブル単位での分割1台のサーバのメモリ上にのるように、テーブル単位でサーバを分割する方法。アプリケーション側の変更も必要になるデータの途中で分割テーブル単位で分割ではなくデータの途中から別のサーバに分割する方法。イニシャルがA〜M、N〜Zでサーバを分ける。これも、アプリケーション側の変更が必要になるリクエストパターンによって分割する最近のデータ、過去のデータなどといった感じでリクエストのパターンによってデータを分割し、サーバを分散する方法。使わないようにする必要があります。することができません。サーバ再起動時には一度データをリードするMySQLなどのDBサーバを運用するにあたって、大規模なデータを扱う場合にはここに注意が必要です。メンテナンスなどでサーバを再起動した場合、それまでにメモリにキャッシュされていたページキャッシュは、すべてフラッシュされてしまいます。一度必要なデータ全体に読み込みをかけてから、プロダクション環境に戻すといった工夫が必要になります。@ITBツリーはそのデータ構造上、ページキャッシュと相性がいいです。データベースでインデックスを貼る際にはBツリーインデックスを使うことが多いです。Bツリーをさらに最適化したものに、B+ツリーというものもあります。複数のカラムがインデックス利用の対象になった場合です。MySQLは1回のクエリでインデックスを1つしか使わない、という癖を持っているのが原因です。コマンドを使うと確認できます。使っていると、参照系のクエリに関しては、キャッシュに注意すればサーバを増設するだけなのでスケールしやすいです。更新系のクエリとなるとサーバの増設はとたんに難しくなります。使わないという選択肢をとることも考えられます。ストアを使用するという方法を考えるといいです。値を保存して取り出すだけで、RDBが持つ複雑な統計処理や汎用的なソート処理が必要ないなら、key-valueストアはオーバーヘッドも少なく圧倒的に速いし、スケールしやすいんです。右に行くほど計算量が多くなります。ベイジアンフィルタ検索システムの6つのステージ全文検索システムを作る上で、大まかに作業を分けると、6つのステージに分解できます。Anniversary仮想化のデメリットはてなでの経験則だそうですが、だいたい、CPUで2〜3%メモリの性能も1割くらいネットワークの性能は半分くらいI/O性能が5%くらい落ちるようです。SSDの寿命SSDを扱う上で一番気になるのは、いつどのように壊れるのか、ということです。HDDが時間と共に消耗して壊れるのは周知の事実なのですが、SSDも時間とともに消耗して壊れる、と考えるのが自然です。フラッシュメモリも書き込みの消耗で壊れてしまうようです。新しいメディアを使うときは、それがどのように壊れるのかをきちんと確認して、監視する仕組みを整えておくことが必要です。ネットワークの限界1つのサブネットは500ホストくらいが限界のようです。