У меня есть набор данных (11 миллионов строк), который состоит из платежей, сделанных компаниям, структурированных так:
id : 12345678,
company_id : 123456,
payment_value : 50,
payer_id: 111111,
payment_date: "20/01/2017"
payer_name: "John Smith",
...<70ish more columns with mostly blank data>...
Есть 600k company_ids, и я хочу сгруппировать их и показать company_id с наибольшим общим количествомзначение платежа
Это код Mongo Shell (версия БД: 4.0.1), который у меня есть:
db.pay.aggregate([
{$project: {_id:1, company_id:1, payment_value:1}},
{$group: {_id: "$company_id", total_value: {$sum: "$payment_value"}}},
{$sort: {total_value: -1},
{$limit: 1}],
{allowDiskUse: true})
Это не выполняется менее чем за 45 минут!У меня есть индекс для company_id, и это похоже на прямой запрос
Я загрузил его в PostgresDB и написал:
SELECT
company_id,
SUM(payment_value)
FROM payments
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1
И это заняло <1 секунду.Я использую ту же методологию индекса для коллекции MongoDB и таблицы Postgres </p>
Что я здесь не так делаю с MongoDB?
Спасибо за ваше время