5

AppHarbor にデプロイする ASP.NET MVC 3 Web サイトを開発しています。このサイトには、少なくとも 10,000 個の製品が掲載されます。ユーザーは、タグ付けシステムに基づいて製品を検索できます (たとえば、"color=blue" と "size=10" と "category=whatever" を検索)。そのため、このシステムはデータベースの読み取りが重く、書き込みは軽くなります。私たちの主な関心事の 1 つは、検索機能を猛烈な速さで維持することです。この目的のために、結果のキャッシングも組み込みたいと考えています。

  1. これが NoSQL データベースを使用するための適切なユースケースであると考えるのは正しいでしょうか?

  2. MongoDB を使用する場合、どのようなキャッシュ戦略を検討する必要がありますか?

乾杯!

4

2 に答える 2

8

MongoDB はマルチキー機能があるため、タグ付けに最適です

たとえば、次のような製品ドキュメントを作成するとします。

{
    _id : 1,
    name : "Widget",
    tags: [
        {color : "blue"},
        {size : 10},
        {foo : "bar"}
    ]
}

次に、タグ配列にインデックスを作成すると、各アイテムにインデックスが作成されます。したがって、青色のすべての製品を見つけるには、次のようにクエリできます。

db.Products.find({tags : {color : "blue"}});

これの素晴らしい点は、すべてのアイテムがまったく異なるタグ「属性」のセットを持つことができ、クエリでインデックスを使用できることです。色とサイズを持つものもあれば、重量と高さを持つものもあります。

キャッシングに関して、MongoDB では、ワーキング セットをメモリに保持できるように十分な RAM を用意することが重要です (アクセスされるすべてのデータとインデックスを保持するのに十分な量)。このようにして、データはメモリに残り、クエリが非常に高速になります。そのため、上部にキャッシュ テクノロジは必要ない場合があります。

于 2011-04-20T08:08:11.380 に答える
2

MongoDB はあなたが探していることを実行しますが、本質的に検索に優れている Lucene または Solr を検討することを真剣に検討します。それらが提供する非常に強力な検索機能があります。たとえば、ファセット検索や「もしかして...」タイプの機能など、MongoDB では実行されず、おそらく実行されることもありません。

今はそのような機能は必要ないかもしれませんが、将来必要になるかどうかを少し考えてみてください。

于 2011-04-21T01:03:08.593 に答える