Учитывая, что следующий код конвейера агрегации возвращает самую новую запись для всех отдельных «внутренних_идентификаторов»:
db.locations.aggregate({$sort: {timestamp: -1}}, {$group: {_id: "$internal_id", doc: {$first: "$$ROOT"}}})
Этот вызов занимает до 10 секунд, что неприемлемо. Коллекция не такая уж большая:
db.locations.count()
1513671
Итак, я предполагаю, что что-то не так с индексами, однако я пытался создать много индексов, и ни один из них не улучшился, в настоящее время я оставил те два, которых должно было быть достаточно имхо: {timestamp: -1, internal_id: 1} и { внутренний_ид: 1, отметка времени: -1}.
MongoDB НЕ сегментирована и работает с набором реплик из 3 хостов под управлением версии 3.6.14.
Журнал MongoDB показывает следующее:
2020-05-30T12:21:18.598+0200 I COMMAND [conn12652918] command mydb.locations appName: "MongoDB Shell" command: aggregate { aggregate: "locations", pipeline: [ { $sort: { timestamp: -1.0 } }, { $group: { _id: "$internal_id", doc: { $first: "$$ROOT" } } } ], cursor: {}, lsid: { id: UUID("70fea740-9665-4068-a2b5-b7b0f10dcde9") }, $clusterTime: { clusterTime: Timestamp(1590834060, 34), signature: { hash: BinData(0, 9DFB6DBCEE52CFA3A5832DC209519A8E9D6F1204), keyId: 6783976096153993217 } }, $db: "mydb" } planSummary: IXSCAN { timestamp: -1, ms_id: 1 } cursorid:8337712045451536023 keysExamined:1513708 docsExamined:1513708 numYields:11838 nreturned:101 reslen:36699 locks:{ Global: { acquireCount: { r: 24560 } }, Database: { acquireCount: { r: 12280 } }, Collection: { acquireCount: { r: 12280 } } } protocol:op_msg 7677msms