У меня есть огромная коллекция с 3 миллиардами документов. Каждый документ выглядит следующим образом:Mongodb отличная совокупность 3 миллиардов документов
"_id" : ObjectId("54c1a013715faf2cc0047c77"),
"service_type" : "JE",
"receiver_id" : NumberLong("865438083645"),
"time" : ISODate("2012-12-05T23:07:36Z"),
"duration" : 24,
"service_description" : "NQ",
"receiver_cell_id" : null,
"location_id" : "658_55525",
"caller_id" : NumberLong("475035504705")
Я хотел бы получить список различных пользователей (они должны, по крайней мере, появляются один раз в качестве вызывающего абонента «caller_id»), их подсчета (сколько раз каждый пользователь появился в как абонент или получатель), так и подсчет местоположений, если они являются абонентами (т. е. счетчик для каждого location_id для каждого пользователя).
Я хочу, чтобы в итоге следующее:
"number_of_records" : 20,
"locations" : [{location_id: 658_55525, count:5}, {location_id: 840_5425, count:15}],
"user" : NumberLong("475035504705")
Я попытался Описанное решение here и here, но они не являются достаточно эффективными (очень медленно). Каким будет эффективный способ достичь этого?
Когда вы говорите 'очень медленно', как медленно ты говоришь? Как долго вы его запускали? –
Можете ли вы отправить оба решения, которые вы пробовали, и какой из них лучше? Это было бы полезно, так как вы можете не захотеть получить то же самое, что вы пробовали в качестве ответа. – BatScream
В настоящее время недостаточно информации, чтобы угадать, как ваши ограничения ресурсов могут влиять на производительность.Какое развертывание (автономное/реплика/оштрафованное) и ресурсы сервера (ram/disk/cpu) у вас есть, и каков общий размер данных? Можете ли вы также включить индексы для этой коллекции? И наконец, какую конкретную версию MongoDB и O/S вы используете? – Stennie