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

cen*_*cru 4 asp.net-mvc mongodb nosql asp.net-mvc-3 appharbor

我们正在开发一个部署在AppHarbor上的ASP.NET MVC 3网站.该网站上至少有10,000种产品.用户可以基于标记系统搜索产品(例如,搜索"color = blue"加上"size = 10"加上"category = whatever").因此,这个系统将在数据库读取和写入时发挥重要作用,我们的主要关注之一是保持搜索功能的速度极快.为此,我们还希望结合一些缓存结果.

  1. 我们认为这是一个使用NoSQL数据库的好用例(我们一直在关注MongoDB,要在https://mongohq.com上托管),我们是对还是错?

  2. 如果我们确实使用MongoDB,我们应该研究哪些缓存策略?

干杯!

Ada*_*Dev 7

MongoDB非常适合标记,因为它具有多键功能

例如,假设您创建了这样的产品文档

{
    _id : 1,
    name : "Widget",
    tags: [
        {color : "blue"},
        {size : 10},
        {foo : "bar"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在tags数组上创建索引,并为每个项目编制索引.因此,要查找所有蓝色的产品,您可以这样查询:

db.Products.find({tags : {color : "blue"}});
Run Code Online (Sandbox Code Playgroud)

关于这一点的好处是每个项目都可以有一组完全不同的标签"属性",查询将能够使用索引 - 有些可能有颜色和大小,有些可能有重量和高度.

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