В настоящее время мы используем коллекцию под названием items
, которые содержат 10 миллионов записей в нашей базе данных MongoDB.Проблемы с производительностью MongoDB
Эта коллекция содержит (среди многих других) две колонки с именем title
и country_code
. Одна такая запись выглядит следующим образом
{
"_id": ObjectId("566acf868fdd29578f35e8db"),
"feed": ObjectId("566562f78fdd2933aac85b42"),
"category": "Mobiles & Tablets",
"title": "360DSC Crystal Clear Transparent Ultra Slim Shockproof TPU Case for Iphone 5 5S (Transparent Pink)",
"URL": "http://www.lazada.co.id/60dsc-crystal-clear-transparent-ultra-slim-shockproof-tpu-case-for-iphone-5-5s-transparent-pink-3235992.html",
"created_at": ISODate("2015-12-11T13:28:38.470Z"),
"barcode": "36834ELAA1XCWOANID-3563358",
"updated_at": ISODate("2015-12-11T13:28:38.470Z"),
"country_code": "ID",
"picture-url": "http://id-live.slatic.net/p/image-2995323-1-product.jpg",
"price": "41000.00"
}
Мощность на колонке country_code
очень высока. Мы создали два текстовых индексов для этих столбцов:
db.items.createIndex({title: "text", country_code: "text"})
В наших примерах мы попытаемся запросить:
db.items.find({"title": { "$regex": "iphone", "$options": "i" }, country_code: "US"}).limit(10)
запрос, который занимает около 6 секунд, чтобы закончить, который кажется необычно высоким для этого типа база данных.
Всякий раз, когда мы пробуем country_code
(например, country_code: «UK»), который имеет меньше результатов, он будет возвращать результаты в миллисекундах.
Будет ли какая-либо особая причина, почему эти запросы так сильно отличаются от времени, чтобы возвращать результаты?
EDIT: Все ответы здесь помогли, поэтому, если у вас есть эта проблема, попробуйте все три решения. Однако можно отметить только 1.
Причина в том, что индексы ванили обычно не помогают с запросами на основе $ regex. Возможно, вам повезло с полнотекстовым индексом –
, вы можете использовать .explain(), чтобы узнать, что происходит. – aabilio
Не могли бы вы вывести вывод 'db.items.createIndex ({title:" text ", country_code:" text "}). Explain()' – Jaco