Лучшая ГИС-система для высокопроизводительных веб-приложений - PostGIS vs MongoDB

36

Я работаю над веб / мобильным приложением на основе данных о местоположении. Поскольку я уже знаком с MongoDB, я обнаружил, что геопространственная индексация монго вполне подходит для моих нужд. Так как я в основном имею дело с простыми / короткими точками местоположения, индексирование Mongo 2d мне подходит.

По пути я выбрал PostGIS из-за его стабильности / зрелости. И его потрясающий набор функций. Но меня больше всего беспокоит производительность, поскольку мои данные сильно зависят от местоположения (в основном 70–80% вызовов БД связаны с местоположением).

Мне нравится монго, потому что оно уже используется высокопроизводительными веб-приложениями, такими как foursquare. Но я видел, что PostGIS в основном используется в государственных / корпоративных проектах (в основном не в веб / мобильных приложениях). Так что я сейчас немного растерялся, чтобы выбрать правильную базу данных ГИС для моего веб / мобильного приложения? Есть предложения?

RameshVel
источник
2
создайте пространственный индекс с помощью postgres / postgis, и вы увидите хорошую производительность. Но если вы счастливее с MongoDB, продолжайте.
Mapperz

Ответы:

36

Если ваша нагрузка на запись (входящий поток данных) потенциально может расти без ограничений (если успех вашего веб-проекта приведет к росту количества записей), то переходите к Mongo, потому что будет очень сложно построить свой путь вокруг Напишите узкое место в PostGIS / PostgreSQL, когда вы выйдете за пределы возможностей одного высокопроизводительного сервера (который, надо заметить, чертовски огромен).

Вы можете спроектировать хорошие решения PostGIS / PostgreSQL для большой нагрузки чтения (репликация master / slave) и для больших размеров данных (разбиение таблиц), но загрузка записи затруднена. Вы уже изложили доводы против Mongo и PostGIS, который является гораздо большим набором функций и зрелостью кода PostGIS, так что сопоставьте это с другими проблемами.

Пол Рэмси
источник
3
Да, и помните, "MongoDB - это масштабирование в сети". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Пол Рэмси
да, я знаю это .. это было действительно забавно (и попало прямо в голову, если вы просто хотели представить себя с помощью новейших технологий) :)
RameshVel
1
Ну, вы всегда можете "webscale", отключив fsync =;)
Ragi Yaser Burhum
1
PostgresXC теперь может предоставить систему параллельной записи с полными транзакционными гарантиями и выполнением многоузловых запросов. Ремень и подтяжки, OLAP и OLTP, стоит посмотреть. И это поддерживает PostGIS.
Пол Рэмси
Но если вы выберете PostgresXC / XL, вам нужно будет поддерживать пакет самостоятельно. Официально он доступен только для Fedora / Redhat, любителям Ubuntu приходится тратить время на сборку вещей вручную.
Рави Кумар
21

Я использую 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 как мое хранилище данных.

Роджер

lagerratrobe
источник
1
Я абсолютно согласен с вами. Монго - очень хороший вариант для работы с основными данными Geo. в настоящее время я делаю более простые сферические и ограничивающие запросы, и это хорошо. Еще одна вещь, которую я хочу добавить, - это Solr Lucene, который также предоставляет базовые гео-функции, такие как mongo, и довольно быстро работает при использовании с гранеными запросами. В настоящее время я использую комбинацию Монго и Солр.
RameshVel
@RameshVel Не могли бы вы рассказать что-нибудь еще о Solr Lucene?
rkm
@rashad, вы можете установитьasticsearch (просто скачать, распаковать и сделать), и играть с запросами Geo DSL. Это довольно просто, но если вы хотите искать / аспекты, а также гео, вы можете использовать его.
Рави Кумар
3

Что касается использования памяти с Mongo, то стоит отметить, что Mongo полностью полагается на файловый кеш ОС для передачи своих индексов и данных в память - нет понятия «буфер памяти / индексный кэш mongo», поэтому вы увидите, что он пытается (или скорее ОС будет использовать) всю доступную оперативную память до того момента, когда все ваши файлы данных будут кэшированы.

Патрик Вейл
источник