Я работаю над веб / мобильным приложением на основе данных о местоположении. Поскольку я уже знаком с MongoDB, я обнаружил, что геопространственная индексация монго вполне подходит для моих нужд. Так как я в основном имею дело с простыми / короткими точками местоположения, индексирование Mongo 2d мне подходит.
По пути я выбрал PostGIS из-за его стабильности / зрелости. И его потрясающий набор функций. Но меня больше всего беспокоит производительность, поскольку мои данные сильно зависят от местоположения (в основном 70–80% вызовов БД связаны с местоположением).
Мне нравится монго, потому что оно уже используется высокопроизводительными веб-приложениями, такими как foursquare. Но я видел, что PostGIS в основном используется в государственных / корпоративных проектах (в основном не в веб / мобильных приложениях). Так что я сейчас немного растерялся, чтобы выбрать правильную базу данных ГИС для моего веб / мобильного приложения? Есть предложения?
Ответы:
Если ваша нагрузка на запись (входящий поток данных) потенциально может расти без ограничений (если успех вашего веб-проекта приведет к росту количества записей), то переходите к Mongo, потому что будет очень сложно построить свой путь вокруг Напишите узкое место в PostGIS / PostgreSQL, когда вы выйдете за пределы возможностей одного высокопроизводительного сервера (который, надо заметить, чертовски огромен).
Вы можете спроектировать хорошие решения PostGIS / PostgreSQL для большой нагрузки чтения (репликация master / slave) и для больших размеров данных (разбиение таблиц), но загрузка записи затруднена. Вы уже изложили доводы против Mongo и PostGIS, который является гораздо большим набором функций и зрелостью кода PostGIS, так что сопоставьте это с другими проблемами.
источник
Я использую PostGIS в течение нескольких лет и только недавно начал исследовать, как я могу использовать MongoDB для работы с некоторыми вариантами использования. Я имел дело с точечными данными, которые имели разреженные поля - например, данные OSM с различным количеством тегов на запись, и поскольку у MongoDB нет схемы, она хорошо поддается этому. Я загрузил образец этих данных в экземпляр каждой БД, и это то, что я нашел.
Мне кажется, что для простого хранения и извлечения точечных данных Mongo работает просто отлично. Геопространственные запросы ограничивающего прямоугольника, кажется, работают хорошо, и я считаю, что общая производительность очень хорошая. Его также очень легко установить и запустить, хотя я обнаружил, что инструмент mongoimport не позволяет мне определять составное 2D-поле координат в файле TSV или CSV. Поскольку довольно легко написать скрипт, который генерирует JSON, это не составило особой проблемы. Его главный недостаток на данный момент заключается в том, что практически ничто в геопространственной сфере не может считывать данные из него. Кажется, есть экспериментальный плагин источника данных Mapnik по адресу https://github.com/springmeyer/mapnik-mongo , но это все, что я смог найти.
PostGIS, с другой стороны, требует немного больше времени для настройки (по крайней мере, для меня), но, как уже упоминалось выше, он предоставляет гораздо больше возможностей прямо из коробки. Помимо предоставления гораздо более сложных пространственных аналитических возможностей, он также изначально поддерживается множеством других приложений и библиотек; Mapserver, Mapnik, QGis, GDAL и т. Д. И т. Д. Для меня PostGIS - это скорее настоящая ГИС-система, нежели простая система хранения и поиска.
Что касается производительности, я обнаружил, что могу очень быстро получать данные из обеих систем. Однако, похоже, что PostGIS больше выиграл от наличия индексов. MongoDB немного быстрее возвращал мне весь набор данных (2 миллиона записей) и немного медленнее возвращал запрос, который использовал индекс - в первый раз. Я не совсем уверен в механизме, который он использует для кэширования, но я вижу, что если я повторю запрос в MongoDB, результаты будут возвращаться намного быстрее во второй раз. Я вижу нечто подобное в PostGIS, но не до такой же степени. Я также заметил, что использование памяти на моей машине при работе MongoDB намного выше, чем в PostGIS.
Итак, я пришел к выводу, что я не собираюсь избавляться от PostGIS как моей системы геопространственного хранения и анализа по умолчанию, но для определенных типов проектов (а именно, веб-карт, которые отображают мозаичные изображения и / или точечные данные), я мог бы рассмотреть возможность использования MongoDB как мое хранилище данных.
Роджер
источник
Что касается использования памяти с Mongo, то стоит отметить, что Mongo полностью полагается на файловый кеш ОС для передачи своих индексов и данных в память - нет понятия «буфер памяти / индексный кэш mongo», поэтому вы увидите, что он пытается (или скорее ОС будет использовать) всю доступную оперативную память до того момента, когда все ваши файлы данных будут кэшированы.
источник