0

このアプリケーションは、短いテキスト(100〜1000文字の文字列)でレコードを保存します。特定のクエリテキストに最も類似したレコードの検索を提供します。テキストのインデックス作成にはLuceneを使用します。完全なレコードはデータベースに保存されます。各レコードは正確に1つのドメインに属しており、現在は1000を超えるドメインがあります。ドメインの数は無制限ですが、ゆっくりと成長します。レコードはすべてのドメインに継続的に追加されています(均一ではありません)。

Mysqlをデータベースとして採用し、各ドメインには独自のテーブルがありました。スケールアウトのため、MongoDBへの移行を試みます。すべてのレコードはそこに単一のコレクションに格納され、ドメインはレコードの属性です。IDは引き続きLucene検索から取得されます。ただし、Mysqlを使用したソリューションと比較して、MongDBからレコードをロードするとパフォーマンスが低下することがわかります。MongoDBの「メモリマップドストレージエンジン」が原因だと思います。各検索は「ランダムレコード」を返すことができます。多くの場合、1つのドメインから連続してより多くの検索が行われます。1つのドメインのレコードは、コレクション内の1つの場所に保存されません。これにより、多くのページフォールトが発生する可能性があります。

私の説明は正しいですか?MongoDBはそのようなレコードの読み込みに適していますか?何がパフォーマンスを向上させることができますか?MongoDBサーバーとアプリケーションはLinux上で実行されています。どうもありがとう。

4

1 に答える 1

1

したがって、ワーキングセット(データとインデックス)がRAM内に収まることが重要です。これにはたくさんの投稿/ブログがあるので、グーグルの「MongoDBワーキングセット」だけですが、ご存知のように、ディスクへのページングではなく、RAMからのアクセスの方が高速です。

書き込みが多い環境では、書き込みのスケーリングを検討する必要があります。ここでシャーディングを検討し、重要な決定は正しいシャードキーを選択することです。これは非常に重要であり、不変なので、よく考えてください:)キーの選択に関する優れたドキュメントを次に示します。

もう1つ、Javaドライバーに関してはバージョン2.8を使用しますが、シャーディング関連のものを含め、かなりの数の変更が加えられています。

最後に、Mongo Monitoring Serviceを無料で使用して、実装の監視に役立てることができます。概要だけでなく、ドリルダウンにも最適です。

于 2012-06-29T10:06:00.503 に答える