У меня есть запрос, который группирует результаты (большой набор данных ~ = 11Gb) по значению (vessel_id) и возвращает для каждого судна координаты в массиве.
Запрос выглядит так:
pipeline = [{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}}]
getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)
Вывод:
{u'_id': u'566679000', u'COORDINATES': [[154.666, -16.643], [154.666, -16.643], [154.666, -16.643]]}
{u'_id': u'636015725', u'COORDINATES': [[151.5162, -9.44365], [151.5162, -9.44365], [151.5162, -9.44365]]}
{u'_id': u'525018017', u'COORDINATES': [[117.3803, -1.029925], [117.3803, -1.029925], [117.3803, -1.029925]]}
Всего набор данных содержит 41000 vessel_id.Я заметил, что время для получения выходных данных для всех судов почти равно времени для извлечения выходных данных для 500 судов.
Например, время для выполнения запроса с помощью $limit:500
почти равно временивыполнить запрос с помощью $limit:41000
:
pipeline = [{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}},
{"$limit":500}]
getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)
Время : 720 сек
pipeline = [{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}},
{"$limit":41000}]
getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)
Время : 780 сек
Что мне здесь не хватает?Что-то я не так делаю?