用于 Web 应用程序的 MySQL 与 PostgreSQL

我正在开发一个使用 Python (Django)的 web 应用程序,想知道在部署到生产环境时 MySQL 或 PostgreSQL 是否更合适。

播客的一篇文章中,Joel 说他在使用 MySQL 时遇到了一些问题,而且数据不一致。

我想知道是否有人有这样的问题。还有,当涉及到性能时,哪些可以很容易地调整?

71856 次浏览

嗯,我不认为你应该使用一个不同的数据库品牌在任何过去的开发(构建,分段,产品) ,因为这会反咬你一口。

从我的理解来看,PostgreSQL 是一个更“正确”的数据库实现,而 mySQL 不那么正确(不那么兼容) ,但更快。

因此,如果您正在编写一个 CRUD 应用程序,那么 mySQL 就是最佳选择。如果您需要数据库中的某些特性(如果您不确定,那么不需要) ,那么您可能需要查看 postgreSQL。

致未来读者: 以下文字最近一次编辑是在2008年8月。那是11年前的事了。软件可以在不同的版本之间快速变化,所以在根据下面的建议选择 DBMS 之前,做一些研究,看看它是否仍然准确。 查看下面更新的答案。


好点了吗?

MySQL 通常由 web 主机提供。

PostgreSQL 是一个更加成熟的产品。

这是 讨论你的“更好”的问题

显然,根据 本网页的说法,当并发访问级别较低时,当读取数量多于写入数量时,MySQL 是快速的。另一方面,随着负载和读写比的增加,它的可伸缩性较低。PostgreSQL 在低并发级别上相对较慢,但是随着负载级别的增加,可以很好地扩展,同时在并发访问之间提供足够的隔离,以避免在高写/读比率下出现速度下降。它继续链接到一些性能比较,因为这些东西是非常... 敏感的条件。

所以如果你的决策因素是“ 哪个更快?”,那么答案是“这取决于。”。如果您真的非常非常关心这个问题,那么可以请两个 DBA (一个专门处理每个数据库) ,让他们对数据库进行调优,然后选择。令人惊讶的是 很好 DBA 和 它们物有所值是如此昂贵。

重要的时候。

它可能不会,所以只要选择任何你喜欢的数据库,并与之配合; 更好的性能可以买到更多的内存和 CPU,更合适的数据库设计,和聪明的存储过程技巧等等-所有这一切都是便宜和容易的随机网站-X 比痛苦地选择,MySQL 或 PostgreSQL,和专家从昂贵的 DBA 调优。


Joel 还在播客中说,这条评论会反咬他一口,因为人们会说 MySQL 是一堆垃圾—— Joel 不可能得到 count的行数。轶事的复数形式不是数据。返回文章页面

在我的职业生涯中,MySQL 是唯一一个有数据完整性问题的数据库,当你进行查询时,你会得到无意义的回答,这是不正确的。

他还说:

这只是个轶事。事实上,这也是让我感到沮丧的事情之一,关于写博客,或者仅仅关于互联网。只是有一种奇怪的倾向,就是把轶事变成事实。事实上,作为一个博客作者,我开始对此感到有点内疚

如果您正在编写的应用程序可能会在不同的服务器上分发很多内容,那么由于 MySQL 的可移植性,它比 PostgreSQL 更有分量。PostgreSQL 很难在不那么令人满意的 Web 主机上找到,尽管有一些。在大多数情况下,PostgreSQL 比 MySQL 慢,尤其是在最终进行微调时。总而言之,我认为应该在短时间内尝试 PostgreSQL,这样就不会完全避免它,然后做出判断。

我没有使用过 Django,但是我同时使用了 MySQL 和 PostgreSQL。如果您将数据库仅用作 Django 的后端,那么这并不重要,因为它将抽象出大多数差异。PostgreSQL 的可伸缩性更好一些,因为它不像 MySQL 那样随着数据大小/客户端数量的增加而碰壁。

如果你正在做一个新的系统,真正的区别就来了。然后我会推荐 PostgreSQL,因为它有更多的特性,使得数据库层更具可定制性,这样您就可以根据您可能具有的任何需求对它进行微调。

谢谢你。我在 MySQL 中使用过 Django,它没问题。根据需要的特性选择数据库。很难比较 MySQL 和 Postgres。最好将 Postress 与 SQLServer 进行比较。

虽然它有点过时,但是值得阅读 MySQL Gotchas页面。据我所知,那里列出的许多项目仍然是真实的。

我使用 PostgreSQL。

MySQL 是 关联式资料库管理系统,而 PostgreSQL 是 < strong > object -关联式资料库管理系统。PostgreSQL 非常适合 C + + 或 Java 开发人员,因为它使我们能够更好地控制如何编写查询。ORDBMS 还提供了对象和用户定义类型。SQL 查询本身比 MySQL 更接近 ISO 标准。
您需要 ORDBMS 还是 RDBMS? 这将更好地回答您的问题。

@ 狼人龙

PostgreSQL 对对象的支持(很小) ,但它本质上是一个关系数据库:

PostgreSQL 是一个功能强大的开源 关系数据库系统。

我经常使用这两种方法,对于一个特定的项目,我的选择归结为:

  • 授权-你要发布你的应用程序(IANAL)
  • 现有基础设施和知识库
  • 任何 特制酱汁你必须有。

特制酱汁的意思是:

  • 易于/廉价复制 = MySQL
  • 大型数据集问题和小结果 = PostgreSQL。使用语言扩展,并具有非常有效的数据操作。(PL/Python、 PL/TCL、 PL/Perl 等)
  • 与 R 统计库的接口 = PostgreSQL PL/R 可以在 debian/ubuntu 中使用

几个月之后才发现。

这两个数据库的地理能力非常非常不同。PostgreSQL 具有异常的 PostGIS 扩展。相比之下,MySQL 的地理功能几乎为零。

如果您的 Web 服务具有位置组件,请选择 PostgreSQL。