MySQL和PostgreSQL在Web应用程序中的比较

135

我正在使用Python(Django)开发Web应用程序,想知道在生产环境中部署时选择MySQL还是PostgreSQL更适合。

在一个播客中,Joel说他在MySQL上遇到了一些问题,数据不一致。

我想知道是否有人遇到过这样的问题。此外,在性能方面,哪个更容易调整?

10个回答

129

给未来的读者的一条注:下面的文本最后一次编辑是在2008年8月,距今已经近11年了。软件版本之间的差异变化很快,因此在根据以下建议选择数据库管理系统之前,请进行一些研究,以确定其是否仍然准确可行。请查看下面的更新答案。


更好了吗?

MySQL是Web主机提供的更常见的数据库管理系统。

PostgreSQL是一个更成熟的产品。

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

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

因此,如果你的决策因素是 "哪个更快?" 那么答案是 "要看情况。 如果真的很重要,请针对两者测试你的应用程序。" 如果你真的非常关心,你需要找来两个数据库管理员(一个专门针对每个数据库)彻底地进行优化,然后选择。好的DBA的价格惊人昂贵;但是,他们每一分钱都值得

在重要时才这样做。

这可能并不重要,所以只需选择你喜欢的数据库并开始使用;更好的性能可以通过更多的RAM和CPU、更适合的数据库设计、聪明的存储过程技巧等来获得 - 对于随机的网站X而言,所有这些都比纠结于选择MySQL或PostgreSQL以及来自昂贵的DBA的专业调优更便宜更容易。


在那个播客中,乔尔还说过一句话,他认为这句话会让他后悔,因为人们会说MySQL是垃圾 - 乔尔无法得到行数的count。 "anecdote" 的复数形式不是 "data"。他在 这里说:

MySQL 是我职业生涯中唯一一个存在数据完整性问题的数据库,你查询数据却得到错误的无意义结果。

他也说:

这只是个轶事(anecdote),这是使我感到沮丧的事情之一。事实上,在博客或互联网上有一种奇怪的倾向,把轶事当成真相。作为一个博客作者,我开始对此感到有点内疚。


15
另外一个要点是,如果你使用框架,你可能能够将代码与数据库解耦,这样你就可以轻松地进行切换。 - Don Jones
“哪个更快?”取决于你想要什么。如果你需要符合ACID标准的数据库,请阅读此链接:http://www.randombugs.com/linux/mysql-postgresql-benchmarks.html。 - Sacx
48
值得注意的是,MySQL现在归属于甲骨文公司。因此,它不会被允许与他们的付费产品竞争。 - unixman83

14

数月后跟进:

这两个数据库的地理空间功能非常不同。PostgreSQL拥有卓越的PostGIS扩展程序,而MySQL相比之下几乎没有地理空间功能。

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


14

我没有使用过Django,但我曾经使用过MySQL和PostgreSQL。如果你只是将数据库用作Django的后端,则大多数区别都将被抽象掉,因此并不重要。随着数据大小和客户端数量的增加,PostgreSQL比MySQL更具可扩展性。

真正的区别在于如果你是在做一个新系统。那么我强烈推荐使用PostgreSQL,因为它拥有更多功能,可以使你的数据库层更加可定制,以便你可以根据任何需求进行微调。


7

我广泛使用两种数据库。在选择特定项目时,我的考虑因素如下:

  • 许可证 - 您是否要分发您的应用程序(我不是法律专家)
  • 现有基础设施和知识库
  • 任何必须具备的特殊功能

通过 特殊功能,我指的是以下内容:

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

3
PostgreSQL也有易于操作/低成本的数据复制功能,只是这个功能不是内置的。因为有很多种不同的复制方案可供选择,每种方案都有其优点和缺点。所以,你可以选择在MySQL中只有一种普通的复制方案,或者在PostgreSQL中选择多种复制方案中的一种。取决于你自己的选择。 - Randal Schwartz
6
PostgreSQL 9.0+内置二进制WAL复制功能,非常易于设置。 - Sean

7

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

我使用PostgreSQL。


这还是现状吗? - Orkhan Alikhanov

2

嗯,我认为在开发(构建、暂存、生产)之后的任何地方都不应该使用不同的数据库品牌,因为这会让你付出代价。

据我理解,PostgreSQL是一种更“正确”的数据库实现,而mySQL则不太正确(不太兼容),但速度更快。

因此,如果您几乎编写了一个CRUD应用程序,则应选择mySQL。如果您需要从数据库中获取某些功能(如果您不确定,则不需要),则可以考虑使用postgreSQL。


1

如果您正在编写一个可能会在不同服务器上分发的应用程序,MySQL因其可移植性而比PostgreSQL更具有优势。尽管有一些不太令人满意的Web主机提供了PostgreSQL,但它很难找到。在大多数方面,PostgreSQL比MySQL慢,特别是当涉及到最终的微调时。总的来说,我建议您尝试使用PostgreSQL一段时间,这样您就不会完全避免它,然后再做出判断。


1
我同意你的观点,更多低质量的网络主机应该提供选择,而不是把MySQL强加给我们。然而,当选择共享主机时,你仍然要听从他们的支配。因此,数据库管理系统的选择并不那么重要。 - unixman83

0

@WolfmanDragon

PostgreSQL支持对象,但本质上它是一个关系型数据库。从其关于页面中可以看到:

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


2
一个对象关系数据库管理系统是一种关系数据库管理系统。如果你深入阅读PostgreSQL文档,你会发现PostgreSQL是一个ORDBMS。也许你把ORDBMS和ODBMS(如Objectivity/DB)混淆了。 - WolfmanDragon

0

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


-3

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


这有点过于简单化了;仅仅因为你不需要ORDBMS并不意味着你必须选择MySQL。还有其他更重要的区别,不是吗? - Don Jones
1
你说得对。我试图不要听起来像是 PostgreSQL 的推销员。除非设计需要真正的对象数据库,否则我看不出使用其他任何东西的真正理由。我认为 MySQL 没有意义,除了更多的人熟悉它。 - WolfmanDragon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接