Проблема с производительностью MongoDB :Одна огромная коллекция против нескольких небольших коллекций

Я протестировал два сценария: «Одна огромная коллекция» и «Несколько небольших коллекций» и обнаружил огромную разницу в производительности при выполнении запросов. Вот что я сделал.

Случай 1 :Я создал коллекцию продуктов, содержащую 10 миллионов записей для 10 различных типов продуктов, и в ней ровно 1 миллион записей для каждого типа продукта, и я создал индекс для ProductType. Когда я выполнил пример запроса с условием ProductType=1 и ProductPrice>100 и ограничением (10 ), чтобы вернуть 10 записей ProductType=1 и цена которых больше 100, потребовалось около 35 миллисекунд, когда в коллекции много продуктов, цена которых превышает 100, и тот же запрос занял около 8000 миллисекунд (8 секунд ), когда у нас очень мало продуктов в ProductType=1, цена которых больше 100.

Случай 2 :Я создал 10 различных таблиц Product для каждого типа ProductType, каждая из которых содержит 1 миллион записей. В коллекции 1, которая содержит записи для productType 1,когда я выполнил тот же пример запроса с условием ProductPrice>100 и ограничением (10 )для возврата 10 записей продуктов, цена которых больше 100, потребовалось около 2,5 миллисекунд, когда в коллекции много товаров, цена которых больше чем 100, и тот же запрос занял около 1500 миллисекунд (1,5 секунды ), когда у нас очень мало товаров, цена которых превышает 100.

Так почему же такая большая разница? Единственная разница между первым и вторым случаем заключается в том, что одна огромная коллекция отличается от нескольких меньших коллекций, но я создал индекс ProductType в первом случае — одну огромную коллекцию. Я предполагаю, что разница в производительности вызвана индексом в первом случае, и мне нужен этот индекс в первом случае, иначе производительность будет хуже. Я ожидал некоторого снижения производительности в первом случае из-за индекса, но я не ожидал огромной разницы примерно в 10 раз медленнее в первом случае.

Таким образом, 8000 миллисекунд против 1500 миллисекунд на одну огромную коллекцию против нескольких небольших коллекций. Почему?

10
задан Anand Dayalan 17 July 2012 в 01:14
поделиться