PostgreSQL VS MySQL при работе с GeoDjango в Django

В Интернете/Youtube/StackOverflow существует множество руководств/вопросов по поиску nearyby предприятий, заданных местоположением, например (вопрос на StackOverflow) :

Но одно общее в них то, что все они предпочитают PostgreSQL (вместо MySQL) для Django Geodjango library

Я строю проект следующим образом:

enter image description here

Здесь пользователь может зарегистрироваться как клиент, а также как бизнес ( имя/адрес клиента и бизнеса и т.д. (все) поля будут раздельными, даже если это один и тот же пользователь).

  • Это не то, как база данных, только для грубой идеи или проекта.

  1. Both customer and business will have their locations stored
  2. Customers can find nearby businesses around him

Мне интересно, каковы конкретные преимущества использования PostgreSQL перед MySQL в контексте вычисления и получения полей, связанных с местоположением.
(MySQL является хорошо проверенной базой данных в течение многих лет, и большинство моих данных реляционные, поэтому я планировал использовать MySQL или Microsoft SQL Server)

. Будут ли какие-либо недостатки в обработке в контексте алгоритмов, используемых для вычисления близлежащих предприятий, если я выберу MySQL, как это сделает мою систему медленной?

Но одно общее в них то, что все они предпочитают PostgreSQL (вместо MySQL) для библиотеки Geodjango от Django

.

Причина, по которой они предлагают использовать Postgres, заключается в том, что он лучше поддерживает пространственные данные. Это не значит, что MySQL не поддерживает пространственные данные. Однако существует длинный список функций, которые Postgres поддерживает, а MySQL - нет. Подробности можно найти на этой странице. Почти каждый раз, когда MySQL упоминается на этой странице, он описывает функцию, которую он не поддерживает, но поддерживает Postgres.

(MySQL - хорошо проверенная база данных в течение многих лет, и большинство моих данных реляционные, поэтому я планировал использовать MySQL или Microsoft SQL Server)

Обратите внимание, что ограничения по внешним ключам не совместимы с MyISAM, который является единственным движком базы данных MySQL, поддерживающим пространственные индексы. Поэтому если вы выберете MySQL, вам придется выбирать между ссылочной целостностью и быстрым пространственным поиском.

Если вы используете Postgres, вы можете обеспечить как ссылочную целостность, так и быстрый пространственный поиск. Postgres также является достаточно зрелой и широко используемой реляционной базой данных в наши дни.

Будут ли какие-либо недостатки обработки в контексте алгоритмов, используемых для вычисления близлежащих предприятий, если я выберу MySQL, насколько это сделает мою систему медленной?

Это действительно зависит от того, сколько предприятий вы ищете. Если вы выберете движок, который не поддерживает пространственные индексы, MySQL будет вынужден выполнять полное сканирование таблицы, что занимает O(N) времени. С другой стороны, он может выполнять сравнение ограничивающих рамок, чтобы устранить множество геометрий довольно быстро. Я наблюдал приемлемую интерактивную производительность для 100 тысяч точек, после чего производительность падает. В отличие от этого, Postgres с пространственным индексом работает быстро для любого количества точек.

Вернуться на верх