delayed_jobs с mongomapper медленно - PullRequest
       4

delayed_jobs с mongomapper медленно

0 голосов
/ 13 декабря 2011

Я использую delayed_jobs с mongomapper.Тем не менее, это медленно при получении записей delayed_jobs (около 500 тыс. Записей).

Я работаю над созданием индексов { locked_by: -1, priority: 1, run_at: 1 }, но это не помогает.

Я действительно не знаю, какие индексы улучшают запрос.Каждая загрузка занимает около 2 секунд.

Вот журнал mongodb:

Tue Dec 13 09:52:38 [conn497] query api_production.$cmd ntoreturn:1 command: { findandmodify: "delayed_jobs", query: { run_at: { $lte: new Date(1323769957289) }, failed_at: null, $or: [ { locked_by: "host:ip-10-128-145-246 pid:26157" }, { locked_at: null }, { locked_at: { $lt: new Date(1323769057289) } } ] }, sort: { locked_by: -1, priority: -1, run_at: 1 }, update: { $set: { locked_at: new Date(1323769957289), locked_by: "host:ip-10- 128-145-246 pid:26157" } } } reslen:699 1486ms

1 Ответ

0 голосов
/ 13 декабря 2011

Ваши индексы не соответствуют запросу. Ваш запрос сначала исключает кандидатов на основе run_at, так что это должен быть ваш первый индекс, но это не так.

Затем следует довольно не элегантное $or предложение. Теперь будет сложно выбрать подходящий индекс, потому что два критерия locked_at, а один locked_by.

Что еще хуже, существует три критерия сортировки, но они точно противоположны направлению ограничений запроса. Кроме того, вы сортируете довольно длинную строку.

По сути, я думаю, что запрос не очень хорошо разработан, он пытается достичь слишком многого за один запрос. Я не знаю, является ли delayed_jobs каким-то модулем, но было бы намного проще, если бы правила были проще. Например, почему работник блокирует так много рабочих мест? На самом деле, я думаю, что было бы лучше, если бы вы блокировали только ту работу, над которой вы сейчас работаете, и чтобы разные работники выбирали разные типы работ для масштабирования. Рабочие могут захотеть использовать uuids вместо того, чтобы использовать свой IP-адрес и pid (с префиксом, который не добавляет энтропию и не избирательность) и т. Д.

...