PostgreSQL VS MySQL 在 Django 中处理 GeoDjango

PostgreSQL VS MySQL while dealing with GeoDjango in Django

在 Internet/Youtube/Whosebug 中有多个 Tutorials/Questions 用于查找 nearyby 企业,例如给定一个位置(Whosebug 上的问题) :

但是这些中的一个共同点是他们都更喜欢PostgreSQL(而不是MySQL) 对于 Django 的 Geodjango library

我正在构建一个项目:

在这里,用户可以注册为客户和企业(客户和企业的 name/address 等 (全部) 字段将分开, 即使是同一个用户)


  1. 客户和企业都将存储他们的位置
  2. 客户可以找到他附近的商家

我想知道在上下文中使用 PostgreSQLMySQL 有什么具体优势计算和获取与位置相关的字段。
MySQL 多年来一直是一个经过良好测试的数据库,我的大部分数据都是关系数据,所以我打算使用 MySQLMicrosoft SQL 服务器)

如果我选择使用 MySQL,那么在用于计算附近企业的算法的上下文中是否会有任何处理缺点,它会如何使我的系统变慢?

But one thing common in these all is that they all prefers PostgreSQL (instead of MySQL) for Django's Geodjango library

他们之所以建议使用Postgres,是因为它对空间数据的支持更好。并不是说 MySQL 不支持空间数据。但是,有一长串 Postgres 支持而 MySQL 不支持的特性。详情可以看this page。几乎每次该页面上提到 MySQL 时,都是在描述它不支持但 Postgres 支持的功能。

(MySQL is a well tested database for years and most of my data is relational, so I was planning to use MySQL or Microsoft SQL Server)

请注意,外键约束与 MyISAM 不兼容,MyISAM 是唯一 MySQL 支持空间索引的数据库引擎。因此,如果您选择 MySQL,则需要在引用完整性和快速空间查找之间做出选择。

如果您使用 Postgres,您可以同时拥有参照完整性和快速空间查找。 Postgres也是目前比较成熟和广泛使用的关系型数据库。

Would there be any processing disadvantages in context to algorithms used to compute nearby businesses if I choose to go with MySQL, how would it make my system slow?

这实际上取决于您要搜索的企业数量。如果您选择不支持空间索引的引擎,MySQL 将被迫进行完整的 table 扫描,这需要 O(N) 时间。另一方面,它可以进行边界框比较以相当快地消除许多几何图形。我已经看到 acceptable 交互性能达到 100k 点,之后性能下降。相比之下,具有空间索引的 Postgres 对于任意数量的点都很快。