3

シナリオ:

10.000.000レコード/日

記録:訪問者、訪問日、クラスター(どこに表示されますか)、メタデータ

この情報で知りたいこと:

  1. 特定の日付範囲の1つ以上のクラスターの一意の訪問者。
  2. 日ごとのユニークな訪問者
  3. 特定の範囲(プラットフォーム、ブラウザーなど)のメタデータをグループ化する

この情報を簡単に照会するために私が固執するモデルは次のとおりです。

{
   VisitorId:1, 
ClusterVisit: [
                {clusterId:1, dates:[date1, date2]},
                {clusterId:2, dates:[date1, date3]}
              ]
}

索引:

  1. VisitorIdによる(一意性を確保するため)
  2. ClusterVisit.ClusterId-ClusterVisit.dates(検索用)
  3. IdUser-ClusterVisit.IdCluster(更新用)

また、データへのアクセスをより効率的にするために、クラスターのグループを異なるコレクションに分割する必要があります。

インポート:最初に、VisitorIdとClusterIdの組み合わせを検索し、日付をaddToSetします。

2番目:最初が一致しない場合は、アップサートします。

    $addToSet: {VisitorId:1, 
        ClusterVisit: [{clusterId:1, dates:[date1]}]
    }

1番目と2番目のインポートでは、clusterIdが存在しない場合、またはVisitorIdが存在しない場合をカバーします。

問題:コレクションが大きくなると、更新/挿入/アップサートで完全に非効率的(ほぼ不可能)になります。新しい日付を追加するとドキュメントサイズが大きくなるためだと思います。維持が難しい(ほとんどの場合、日付が設定されていない)

50.000.000を超えるコレクションがあり、これ以上成長することはできません。更新されるのは100〜レコード/秒のみです。

私が使用しているモデルは、このサイズの情報には最適ではないと思います。シャーディングを台無しにする前に、より多くのアップサート/秒を取得し、情報をすばやく照会するのが最善だと思います。シャーディングは、学習して自信を持てるようになるまでに時間がかかります。

AWSRAID10に10個のディスクを備えたx1.largeインスタンスがあります

4

1 に答える 1

2

配列は大規模なコレクションではコストがかかります: mapreduce、aggregate...

.explain() を試してください: MongoDB 'count()' は非常に遅いです。どのように改善/回避しますか?

インデックスの明示的なヒントを追加: インデックスが設定されているにもかかわらず、単純な MongoDB クエリが非常に遅い

完全なヒープ?: node-mongodb-native の挿入パフォーマンス

コレクションのメモリ空間の終わり: MongoDB で update() と save() のパフォーマンスを改善するには?

特別な読み取りクラスタリング: http://www.colinhowe.co.uk/2011/02/23/mongodb-performance-for-data-bigger-than-memor/

グローバル書き込みロック?: mongodb のパフォーマンスが悪い

スロー ログのパフォーマンス トラック: MongoDB のパフォーマンスを追跡しますか?

ログをローテーションする: 出力ファイルへのログ出力は mongoDB のパフォーマンスに影響しますか?

プロファイラーを使用: http://www.mongodb.org/display/DOCS/Database+Profiler

一部のコレクション キャッシュを RAM に移動: パフォーマンスを向上させるために、MongoDB はドキュメントを RAM にプリロードします。

コレクションの割り当てサイズに関するいくつかのアイデア: MongoDB データ スキーマのパフォーマンス

個別のコレクションを使用する: データ構造の増大に伴う MongoDB のパフォーマンス

1 つのクエリで使用できるインデックスは 1 つだけです (複合インデックスの方がよい): なぜこの mongodb クエリは非常に遅いのですか?

キー がありませんか?: MongoDB クエリが遅い: 理由を説明できますか?

おそらくシャード: 集計クエリでの MongoDB のパフォーマンス

パフォーマンスの改善に関するスタックオーバーフロー リンク: https://stackoverflow.com/a/7635093/602018

レプリカ教育をさらにシャーディングするための良い点は、 https ://education.10gen.com/courses です。

于 2012-11-20T20:29:18.383 に答える