Поиск по каталогу товаров - хороший пример использования NoSQL / MongoDB? - PullRequest
4 голосов
/ 20 апреля 2011

Мы разрабатываем веб-сайт ASP.NET MVC 3 для развертывания в AppHarbor.На сайте будет не менее 10 000 товаров.Пользователь может искать товары на основе системы тегов (например, поиск «цвет = синий» плюс «размер = 10» плюс «категория = все, что угодно»).Таким образом, эта система будет перегружена чтением БД и освещением записей, и одна из наших главных задач - обеспечить невероятно быструю работу функции поиска.С этой целью мы также хотели бы включить некоторое кэширование результатов.

  1. Правы мы или нет, считая это хорошим вариантом использования базы данных NoSQL (мы искалина MongoDB, который будет размещен на https://mongohq.com)?

  2. Если мы используем MongoDB, какие стратегии кэширования мы должны рассмотреть?

Cheers!

Ответы [ 2 ]

7 голосов
/ 20 апреля 2011

MongoDB отлично подходит для тегирования, потому что он multikeys функциональность

например, предположим, что вы создаете свои документы о продукте, как это

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

Вы можете создать индексмассив тегов и каждый элемент будет проиндексирован.Итак, чтобы найти все товары синего цвета, вы можете сделать запрос следующим образом:

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

Самое замечательное в этом - каждый элемент может иметь совершенно другой набор тегов "атрибуты", и запросы смогутиспользуйте индекс - некоторые могут иметь цвет и размер, другие могут иметь вес и рост.

Что касается кэширования, в MongoDB важно иметь достаточно ОЗУ, чтобы иметь возможность хранить ваш рабочий набор в памяти (достаточно длявсе доступные данные и индексы, которые будут проведены).Таким образом, данные останутся в памяти, делая запросы очень быстрыми.Поэтому вам может не понадобиться технология кэширования сверху.

1 голос
/ 21 апреля 2011

В то время как MongoDB будет делать то, что вы ищете, я бы серьезно подумал о том, чтобы взглянуть на Lucene или Solr, которые по своей сути лучше выполняют поиск.Они предоставляют очень мощные функции поиска, такие как граненый поиск и тип «Вы имели в виду…», которые MongoDB не делает и, вероятно, никогда не сделает.

Вам может не понадобиться такая функциональность сегодня, но потратьте минуту, чтобы подумать о том, будет ли это то, что вам может понадобиться в будущем.

...