2017-01-11 2 views
2

В настоящее время у меня есть мои данные GeoJSON хранятся в этом формате:быстрый способ запроса геопространственных данных в MongoDB

coord: [long, lat], 
    time: unix timestamp, 
    property: some property 

Я хотел бы, чтобы найти ближайшее место с ближайшей временной меткой (ЛТР). Как я это делаю сейчас:

collection.ensureIndex({loc: "2d"}) 
    collection.find(
      {coord : { 
        $near: [xval, yval], 
        $maxDistance: 200 
        }, 
      time: { 
        $lte: time 
      } 
      }).sort({time: -1}).limit(1).toArray(function(err, queryResult) { 
    (did some return 404 and 200 here) 
} 

Когда размер данных невелик, это работает. Но поскольку моя база данных была увеличена до 50G +, это не сработает (всегда возвращать 404, поскольку ничего не найдено), и я думаю, что это связано с тем, что способ запроса моих данных приводит к низкой производительности. Как мне изменить структуру запроса/данных для улучшения и позволить ей снова работать?

+0

Я не думаю, что с вашим запросом что-то не так. Возможно, вам придется масштабировать свой бэкэнд, если у вас есть 50G + данных .... – Eric

+0

@ Эрик, не могли бы вы немного подробнее узнать о масштабировании моего бэкэнда? – acbh

+0

Либо поставьте больше баранов и CPU или осколок вашей базы данных – Eric

ответ

0

Вы должны сначала масштабировать свой монгодб вертикально, добавив больше мощности плунжера и процессора, и до тех пор, пока не достигнете своего следующего плато. Следующим шагом будет масштабирование по горизонтали (или осколок) вашей БД путем использования нескольких экземпляров MongoDB для обработки вашего набора данных. Конечно, осколки улучшают производительность БД. Вы можете прочитать this article, которые описывают в значительной степени шаги, которые нужно предпринять для масштабирования монго.

Смежные вопросы