約 400 万のドキュメントと約 5 ~ 6 GB のデータベース サイズで MongoDB を使用しています。マシンには 10GB の RAM が搭載されており、空き容量は約 3.7GB しか使用されていません。このデータベースは、ビデオゲーム関連のラダー (ランキング) Web サイトに使用され、地域ごとに区切られています。
これはかなり書き込み負荷の高い操作ですが、それでもかなりの数の読み取りが行われます。外部ソースに 1 ~ 2 時間ごとにクエリを実行するアップデーターを使用しています。次に、このアップデーターがレコードを処理し、データベース上のドキュメントを更新します。アップデーターは一度に 1 つのリージョンのみを処理するため (前の段落を参照)、データベースの約 33% が更新されます。
アップデーターが実行されると、その実行中に、平均フラッシュ時間が約 35 ~ 40 秒まで急上昇し、他のクエリで一般的な速度低下が発生します。アップデーターは SEPARATE MACHINE 上の RAN であり、すべてのデータがサードパーティから取得および処理されたときに、最後に MongoDB にのみクエリを実行します。
一部の人々は、更新の数を遅くするか、変更したプレーヤーのみを更新することを提案していますが、問題はランキングにあります. プレイヤー間の同点をサポートしているため、ランクを事前に計算する必要があります。そのため、実際にランクを変更したユーザーが数人しかいない場合でも、それに応じて残りのユーザーのランクを更新する必要があります。少なくとも、MySQL の場合はそうでした。MongoDB を使用して、最大 800K から 120 万のドキュメントをランク付けするための適切なソリューションがあるかどうかはわかりません。
私の質問は、私たちが経験しているフラッシュとスローダウンをどのように改善できるでしょうか? なぜこんなに急上昇しているのですか?データベースは頻繁に更新されるため、ジャーナリングを無効にすると (I/O の負荷を軽減するために) 役に立ちますか?
サーバーの状態: http://pastebin.com/w1ETfPWs