1

多くの分野で検索&ソートできるモンゴコレクションがあります。たとえば(機密保持のため、実際のコレクションを置くことができません)、次のようにしましょう。

MathProblem
{
    Creator : String,
    Difficulty : integer (from 0 to 4),
    Categorie : integer (from 0 to 40),
    NbOfQuestion : integer (less than 20),
    Likes : integer,
    Dislikes : integer,
    Succeeded : integer,
    Failures : integer
}

Creator、Difficulty、Categorie、NbOfQuestionで検索できます。そして、好き、嫌い、成功、失敗で並べ替えます。

元:

  • 難易度3の問題を教えてください。カテゴリ20で、いいねの数で並べ替えます。
  • 5つの質問の問題を教えてください。失敗順に並べ替えます。
  • 難易度1、カテゴリ10、2の質問で、アインシュタインによって作成された問題を教えてください。
  • すべての問題を成功順に並べ替えてください。

など...すべての順列が可能であり、オプションで1つのフィールドで並べ替えることができます。

ここでの問題は、何百万もの記録があることです。インデックス作成には少なくとも30ギガの費用がかかりました。また、インデックスが非常に多いため、このコレクションの書き込み速度が低下します。そして、それが書き込みを押しつぶしている間、それは読み取りをロックしています。したがって、読み取りは多く、書き込みはおそらく少し少なくなりますが、それでも多くなります。

「検索エンジンソリューション」を検索しましたが、「全文検索」でしか見つけられませんでした。

また、難易度CategorieとNbOfQuestionを1つの配列にマージして(値に10の係数を掛けて、それらをアパートに保つことにより)、この配列のみにインデックスを付け、スペースを節約しようとしました。

後知恵は大歓迎です!

ありがとう、

チャールズ

4

1 に答える 1

0

チャールズ、

あなたの問題に対する簡単な解決策はありません。おそらく今のところ最善の解決策は、MongoDBのシャーディング機能を使用して外側にスケーリングすることです。http://www.mongodb.org/display/DOCS/Sharding+Introduction

ここでの目的は、ワーキングセットを複数のマシンに分割して、1回の書き込みで「クラッシュ」するデータの量を減らすことです。さらに、2.Xブランチには多くの新機能(yield-on-long-operationやyield-on-page-faultなど)があり、システムへの書き込みロックの影響。MongoDBの同時実行性の詳細については、http://www.mongodb.org/display/DOCS/How+does+concurrency+workを参照してください。

乾杯、

デビッド

于 2012-08-23T18:50:00.613 に答える