0

巨大な製品ウェブサイトをスクレイピングしています。

そのため、非常に多くの製品を取得して維持し、ほぼすべての製品に異なる機能/詳細のセットがあります。

当然、このジョブには NoSQL データベース (MongoDB) を使用することを検討します。コレクション「products」と、各キー/値のペアが製品のdetail_name/detail_descriptionにマップされる各製品のドキュメントを作成します。

製品がかなり異なるため、製品の詳細/機能が何であるかはほとんどわかりません. つまり、利用可能なキーについての知識がありません。

このリンクMongoDB case insensitive key searchによると、これは MongoDB の「ギャップ」です (使用可能なキーについての考えがありません)。

これは本当ですか?はいの場合、代替手段は何ですか?

4

2 に答える 2

1

あなたの主な問題は、わずかに異なるスキーマと大きなインデックスを使用できる場合、MongoDB にとってそれほど大きな問題ではありません。

通常、次のようにします。

{
    productId :..
    details : {
        detailName1 : detailValue1,
        detailName2 : detailValue2;
    }
}

しかし、これを行うと、詳細フィールドにインデックスを付けることができます:

{
    productId :..
    details : [
        {field : detailName1, value : detailValue1},
        {field : detailName2, value : detailValue2}
    ]
}

これにより、非常に大きなインデックスが作成されることに注意してください。必ずしも問題ではありませんが、注意が必要です。インデックスは次のようになります{details.field:1, details.value:1}(または、{details:1}詳細ごとに追加のフィールドを追加していない場合)。

于 2012-08-08T12:49:35.307 に答える
0

すべてのデータをスクレイピングしたら、それを調べて、パフォーマンスを向上させるためにインデックスを追加できるフィールドまたはフィールドのセットがドキュメントにあるかどうかを判断できます。

于 2012-08-08T12:29:26.907 に答える