133

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

在一个播客中,Joel 说他在使用 MySQL 时遇到了一些问题,并且数据并不一致。

我想知道是否有人有任何这样的问题。此外,在性能方面可以轻松调整?

4

10 回答 10

129

给未来读者的注意事项:下面的文字最后一次编辑是在 2008 年 8 月。截至本次编辑,这已经是近 11 年前的事了。软件可以从一个版本快速变化到另一个版本,因此在您根据以下建议选择 DBMS 之前,请先进行一些研究,看看它是否仍然准确。检查下面的更新答案。


更好的?

MySQL 更常由 Web 主机提供。

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

这个讨论解决你的“更好”问题

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

因此,如果您的决定因素是“哪个更快? ”那么答案是“这取决于。 如果真的很重要,请针对两者测试您的应用程序。 ”如果您真的非常关心,您可以选择两个 DBA(一个专攻在每个数据库中)并让他们调整数据库中的废话,然后选择。令人惊讶的是,优秀的DBA 是多么昂贵。他们值得每一分钱

重要的时候。

它可能不会,所以只需选择您喜欢的任何数据库并使用它;更好的性能可以通过更多的 RAM 和 CPU、更合适的数据库设计、巧妙的存储过程技巧等等来获得——所有这些对于 random-website-X 来说都比选择 MySQL 或 PostgreSQL 更便宜、更容易,以及来自昂贵 DBA 的专家调优。


Joel 还在那个播客中说,评论会回来咬他,因为人们会说 MySQL 是一坨屎——Joel 无法count恢复一行。轶事的复数不是数据。 他说

MySQL 是我在我的职业生涯中编程过的唯一一个存在数据完整性问题的数据库,你在其中进行查询并得到无意义的答案,这是不正确的。

他还说:

这只是一个轶事。这就是让我感到沮丧的事情之一,实际上,关于博客或一般的互联网。[...] 将轶事变成事实只是一种奇怪的倾向,实际上,作为博主,我开始对此感到有点内疚

于 2008-08-26T05:14:50.690 回答
15

几个月后才响起。

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

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

于 2010-03-12T23:39:18.763 回答
14

我没有用过 Django,但我用过 MySQL 和 PostgreSQL。如果您仅将数据库用作 Django 的后端,那没关系,因为它将抽象出大部分差异。PostgreSQL 更具可扩展性,因为它不会像 MySQL 那样随着数据大小/客户端数量的增加而快速突破。

如果你正在做一个新系统,真正的区别就出现了。然后我会推荐 PostgreSQL,因为它有更多的特性可以让你的 DB 层更加可定制,这样你就可以根据你可能有的任何要求对其进行微调。

于 2008-08-26T05:24:21.680 回答
7

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

我使用 PostgreSQL。

于 2008-08-26T08:29:18.147 回答
6

我广泛使用两者。我对特定项目的选择归结为:

  • 许可 - 您是否要分发您的应用程序 (IANAL)
  • 现有基础设施和知识库
  • 你必须有任何特殊的酱汁。

我所说的特殊酱汁是指:

  • 简单/廉价的复制 = MySQL
  • 小结果的巨大数据集问题 = PostgreSQL。使用语言扩展,并有非常高效的数据操作。(PL/Python、PL/TCL、PL/Perl 等)
  • 与 R 统计库的接口 = PostgreSQL PL/R 在 debian/ubuntu 中可用
于 2009-08-05T00:15:35.847 回答
2

好吧,我认为您不应该在过去的任何开发(构建、登台、产品)中使用不同的数据库品牌,因为那样会反过来咬您一口。

根据我的理解,PostgreSQL 是一个更“正确”的数据库实现,而 mySQl 不太正确(不太合规)但速度更快。

因此,如果您几乎要编写一个 CRUD 应用程序,那么 mySQL 就是您要走的路。如果您需要数据库中的某些功能(如果您不确定,那么您不需要),那么您可能需要研究 postgreSQL。

于 2008-08-26T05:14:25.247 回答
1

如果您正在编写一个可能在不同服务器上分布相当多的应用程序,由于可移植性,MySQL 比 PostgreSQL 具有很大的权重。在不太令人满意的网络主机上很难找到 PostgreSQL,尽管有一些。在大多数方面,PostgreSQL 都比 MySQL 慢,尤其是在最后进行微调时。总而言之,我会说在短时间内给 PostgreSQL 一个机会,这样你就不会完全避免它,然后再做出判断。

于 2008-08-26T05:23:03.883 回答
0

谢谢你。我已经将 Django 与 MySQL 一起使用,这很好。根据您需要的功能选择您的数据库。很难比较 MySQL 和 Postgres。最好将 Postgress 与 SQL Server 进行比较。

于 2008-08-26T07:51:58.643 回答
0

@狼人龙

PostgreSQL 对对象有(微小的)支持,但它本质上是一个关系数据库。从它的关于页面

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

于 2008-10-10T02:34:37.840 回答
-2

MySQL 是一个关系数据库管理系统,而 PostgreSQL 是一个对象关系数据库管理系统。PostgreSQL 非常适合 C++ 或 Java 开发人员,因为它让我们可以更好地控制查询的编写方式。ORDBMS 还为我们提供了对象和用户定义类型。SQL 查询本身比 MySQL 更接近 ISO 标准。
您需要 ORDBMS 还是 RDBMS?这将更好地回答你的问题。

于 2008-09-19T16:11:10.497 回答