У меня около 105 миллионов записей, подобных этой:
{
"post_id": 1314131221,
"date": 1309187001,
"upvotes": 2342
}
в коллекции MongoDB.У меня также есть индекс "post_id" и "date".
Тогда мне нужно сделать это:
db.fb_pages_fans.find({
post_id: 1314131221,
date: {"$gt": 1309117001, "$lta": 1309187001}
}).sort({date: 1});
Если я установлю "date" на конкретную дату:
- , когда он возвращает 30 записей, потребовалось ~ 130 мс
- , когда он возвращает 90 записей, потребовалось ~ 700 мс
- , когда он вернул 180 записей, это заняло ~ 1200 мс
Конечно, я говорю о первом запросе, второй и более запросы очень быстрые, но мне нужно, чтобы первые запросы были быстрыми.
Это намного медленнее из 90 записей, чем PostgreSQL,который я использую сейчас.Почему это так медленно?
кстати.создание индекса для упомянутых двух «столбцов» на 105-миллиметровых записях заняло около 24 часа .
. Это выполняется на одной машине с 12 ГБ ОЗУ, вот журнал от mongostats, когда я выполнял запрос:
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn time
0 0 0 0 0 1 0 23.9g 24.1g 8m 0 0 0 0|0 0|0 62b 1k 1 18:34:04
0 1 0 0 0 1 0 23.9g 24.1g 8m 21 0 0 0|0 0|0 215b 3k 1 18:34:05