Asp.net mvc 产品目录搜索-NoSQL/MongoDB的良好用例?

Asp.net mvc 产品目录搜索-NoSQL/MongoDB的良好用例?,asp.net-mvc,mongodb,asp.net-mvc-3,appharbor,nosql,Asp.net Mvc,Mongodb,Asp.net Mvc 3,Appharbor,Nosql,我们正在开发一个ASP.NET MVC 3网站,部署在AppHarbor上。网站上至少有10000种产品。用户可以根据标签系统搜索产品(例如搜索“颜色=蓝色”加上“尺寸=10”加上“类别=任何东西”)。因此,这个系统将重于数据库读取,轻于写入,我们主要关注的一个问题是保持搜索功能的快速。为此,我们还希望合并一些结果缓存 我们认为这是一个使用NoSQL数据库的好用例(我们一直在研究MongoDB,它将被托管在什么地方),这是对的还是错的 如果我们使用MongoDB,我们应该研究哪些缓存策略 干杯

我们正在开发一个ASP.NET MVC 3网站,部署在AppHarbor上。网站上至少有10000种产品。用户可以根据标签系统搜索产品(例如搜索“颜色=蓝色”加上“尺寸=10”加上“类别=任何东西”)。因此,这个系统将重于数据库读取,轻于写入,我们主要关注的一个问题是保持搜索功能的快速。为此,我们还希望合并一些结果缓存

  • 我们认为这是一个使用NoSQL数据库的好用例(我们一直在研究MongoDB,它将被托管在什么地方),这是对的还是错的

  • 如果我们使用MongoDB,我们应该研究哪些缓存策略


  • 干杯

    MongoDB非常适合标记,因为它具有强大的功能

    e、 g.假设您像这样创建产品文档

    {
        _id : 1,
        name : "Widget",
        tags: [
            {color : "blue"},
            {size : 10},
            {foo : "bar"}
        ]
    }
    
    然后可以在标记数组上创建索引,每个项都将被索引。因此,要查找所有蓝色产品,您可以这样查询:

    db.Products.find({tags : {color : "blue"}});
    
    最棒的是,每个项目都可以有一组完全不同的标记“属性”,查询将能够使用索引——一些可能有颜色和大小,另一些可能有重量和高度


    关于缓存,在MongoDB中,重要的是要有足够的RAM,以便能够将工作集保存在内存中(足以保存所有访问的数据和索引)。这样,数据将保留在内存中,使得查询非常快速。因此,您可能不需要在顶部使用缓存技术。

    < P>虽然MangGDB将执行您正在寻找的,但我会认真考虑查找Lucene或SoR,这在搜索中本质上更好。他们提供了非常强大的搜索功能,比如分面搜索和“你是说……”类型的功能,MongoDB不会也可能永远不会这样做


    您今天可能不需要这种功能,但请花一分钟时间思考一下,这是否是您将来可能需要的功能。

    非常感谢-这让我有点思考。如果我们使用mongohq(一个远程托管的MongoDB安装),你知道哪一方需要RAM将工作集保存在内存中吗?我想应该是MongoDB托管端而不是应用托管端,因为我们会向他们发出查询?@centralscru-是的,是托管端。谢谢,Bryan-我会看看。