适用于Web应用程序的MySQL与PostgreSQL [关闭]


122

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

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

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

Answers:


127

致将来的读者请注意:以下文本的最后编辑时间为2008年8月。截止本次编辑将近11年前。软件的版本可能会迅速变化,因此,在根据以下建议选择DBMS之前,请进行一些研究以查看其是否仍然正确。在下面检查新的答案。


更好?

Web主机通常提供MySQL。

PostgreSQL是更成熟的产品。

此讨论解决您的“更好”的问题

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

因此,如果您的决定因素是“ 哪个更快? ”,那么答案是“这取决于。 如果真的很重要,请针对两者测试您的应用程序。 ”而且,如果您真的很在意,您会得到两个DBA(一个专门研究DBA。在每个数据库中),让他们从数据库中调出废话,然后选择。好的 DBA 多么昂贵,这令人惊讶。和他们是值得每一分钱

当它重要时。

它可能不会,所以只需选择您喜欢的声音的任何数据库并进行选择即可;可以使用更多的RAM和CPU,更合适的数据库设计以及更聪明的存储过程技巧等来获得更好的性能-相对于烦恼挑选MySQL或PostgreSQL而言,对于random-site-X而言,所有这些更便宜,更容易,以及从昂贵的DBA中进行专家调优。


乔尔还在那个播客中说,评论会再次被他咬住,因为人们会说MySQL简直是胡扯-乔尔再也count回不去了。轶事的复数形式不是数据。 他说

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

他还说:

这只是一个轶事。实际上,这是令我沮丧的一件事,关于博客或整个Internet。[...]有一种将轶事变成事实的怪异趋势,而实际上,作为一个博客作者,我对此感到有点内


15
还有一点是,如果使用框架,则可以从数据库中提取代码,因此可以轻松切换。
唐·琼斯

“哪个更快?” 。取决于您想要的内容,如果您想要兼容ACID的数据库,请阅读以下内容:randombugs.com/linux/mysql-postgresql-benchmarks.html
Sacx 2011年

47
还值得一提。MySQL 由Oracle 拥有。因此,将不允许它与他们的付费产品竞争。
unixman83

15

几个月后才开始鸣叫。

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

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


14

我没有使用过Django,但是我同时使用了MySQL和PostgreSQL。如果您仅将数据库用作Django的后端,则没关系,因为它将抽象出大多数差异。PostgreSQL具有更高的可扩展性,因为随着数据大小/客户端数量的增加,PostgreSQL的普及速度不及MySQL。

如果您使用的是新系统,那么真正的区别就来了。然后,我建议使用PostgreSQL,因为它具有许多功能,这些功能使您的数据库层更具可定制性,因此您可以将其微调到可能具有的任何要求。



6

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

  • 许可-您要分发您的应用吗(IANAL)
  • 现有基础架构和知识库
  • 您必须有任何特殊的调味料

通过特制的酱汁我的意思是一样的东西:

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

3
Postgres还具有简单/廉价的复制功能。它不是内置的,因为有六种可供选择,每个都有其优缺点。因此,对于MySQL,您可以选择一种中等复制,对于PostgreSQL,可以选择众多复制之一。你的选择。
兰德尔·施瓦兹

6
PostgreSQL 9.0+具有内置的二进制WAL复制,该复制非常容易设置。
肖恩

1

好吧,我认为您不应该在过去的开发(构建,暂存,生产)中使用任何其他数据库品牌,因为这会再次咬住您。

据我了解,PostgreSQL是更“正确”的数据库实现,而mySQl的正确性较差(合规性较差),但速度更快。

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


1

如果您正在编写一个可能在不同服务器上大量分发的应用程序,则由于可移植性,MySQL比PostgreSQL具有很大的分量。PostgreSQL很难在不令人满意的Web主机上找到,尽管有一些。在大多数方面,PostgreSQL比MySQL慢,特别是在最终进行微调时。总而言之,我想给PostgreSQL一个短时间的机会,那样您就不会完全避免它,然后做出判断。


1
我同意您的看法,更多低质量的Web主机应该提供选择,而不是将MySQL摆在我们面前。但是,使用共享主机时,无论如何,您都将受到它们的摆布。因此,选择DBM并不重要。
unixman83 '32

0

谢谢。我已经将Django与MySQL配合使用,这很好。在所需功能上选择数据库。很难比较MySQL和Postgres。最好将Postgress与SQl Server进行比较。


0

@WolfmanDragon

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

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


2
对象关系数据库管理系统ISA关系数据库管理系统。如果您进一步阅读PostgSQL文档,您会发现PostgSql是ORDBMS。也许您将ORDBMS与ODBMS(例如Objectivity / DB)混淆了。
WolfmanDragon

-1

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


有点过分简化了。仅仅因为您不需要ORDBMS并不一定意味着您必须使用MySQL。还有其他更重要的区别,不是吗?
唐·琼斯

1
你是对的。我试图听起来不像PostgreSQL推送器。我认为没有真正的理由使用除PostgreSQL以外的任何东西,除非设计需要一个真正的对象数据库。除了更多的人熟悉它,我认为MySQL没有其他意义。
WolfmanDragon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.