Задать вопрос

MongoDB performance

есть MongoDB коллекция примерно такого вида:

{
"A2_AboutMe": "",
"A2_Attributes": "|av|nv|",
"A2_Birthday": "",
"A2_DateCreated": "2010-11-25 22: 59: 00",
"A2_DateLastCrawl": "2011-11-18 12: 09: 36",
"A2_FK_A1_IDPerson": "0",
"A2_Firstname": "José Luis",
"A2_FirstnameC": "Jose Luis",
"A2_Gender": "m",
"A2_IDProfile": "1",
"A2_Keywords": "Passwort: 16|WaltherAcosta: 14|Fenster: 14|Internet: 12|Entwicklung: 12|Luis: 12|Acosta: 12|Deutschland: 11|Mechatronik: 9|Spain: 9|Werbung: 8|Sicherheit: 8|Produ [...]",
"A2_Lastname": "Walther - Acosta",
"A2_LastnameC": "_Walther Acosta",
"A2_Locale": "",
"A2_Middlename": "",
"A2_Name": "José Luis Walther - Acosta",
"A2_NameC": "Jose Luis Walther Acosta"
}


Индексы на A2_LastnameC и на A2_FirstnameC

всего документов 3 миллиона

Запрос типа

$collection->find(array(«A2_FirstnameC» => new MongoRegex("/jose/i")))->sort(array(«A2_LastnameC» => -1))->limit(10)
длится 3.5 секунды на i7 8GB RAM.

Это быстро, медленно? Можно ли сделать меньше?
  • Вопрос задан
  • 4114 просмотров
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 4
CheatEx
@CheatEx
Инженер
Запрос с регулярным выражение использует индексы только если однозначно задан префикс строки (читай выражение начинается с "/^"). Ваш запрос перерывал весь датасет.

На будущее: пожалуйста публикуйте примеры запросов к монге из JS консоли. Это стандартный инструмент, его все понимают примеры в нём все могут воспроизвести.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Долго. Посмотрите хотя бы top на машине.
Ответ написан
N3K
@N3K
Воспользуйтесь: www.mongodb.org/display/DOCS/Explain.
Для ускорения попробуйте использовать sphinx. Он значительно ускорит поиск.
Ответ написан
@joger Автор вопроса
что в принципе и требуется, ведь /^jose/ это только часть /jose/
и explain говорит, что индекс используется в обоих случаях
кстати, время опять > 3 сек для обоих вариантов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы