适用于Web应用程序的MySQL与PostgreSQL

适用于Web应用程序的MySQL与PostgreSQL

MySQL vs PostgreSQL for Web Applications

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

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

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


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

更好?

Web主机通常提供MySQL。

PostgreSQL是更成熟的产品。

此讨论旨在解决您的"更好"问题

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

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

当它重要时。

它可能不会,所以只要选择您喜欢的声音的任何数据库并进行选择即可;可以通过更多的RAM和CPU,更合适的数据库设计以及巧妙的存储过程技巧等来获得更好的性能-对于所有随机网站X而言,这比苦恼MySQL或PostgreSQL更便宜和更容易,并通过昂贵的DBA进行专业调优。

乔尔还在那个播客中说,评论会再次被他咬住,因为人们会说MySQL只是一堆废话-乔尔无法获得count行。轶事的复数形式不是数据。他说:

MySQL is the only database I've ever programmed against in my career that has had data integrity problems, where you do queries and you get nonsense answers back, that are incorrect.

他还说:

It's just an anecdote. And that's one of the things that frustrates me, actually, about blogging or just the Internet in general. [...] There's just a weird tendency to make anecdotes into truths and I actually as a blogger I'm starting to feel a little bit guilty about this


有人说MySQL简单而快速。

快速-好吧,如果您使用默认的MyIsam存储引擎,则速度很快。它具有接近零的严重数据库功能,但速度很快。如果我很讽刺,我会说平面文件上的grep也很快。有趣的是,离MyIsam存储数据的距离并不远。因此,不要期望那里有任何关系数据库功能。甚至没有引用完整性约束。

简单-现在让我们说您想要真实数据库功能的相当一部分。诸如完整性约束,触发器,事务隔离,功能索引之类的东西可能吗?因此,显然,您必须让MyIsam引擎离开,并从其他3种主要存储引擎之一中进行选择。谁是由不同的供应商开发的,每个供应商都有特定的配置/行为。

查看存储引擎的概述,如果您不头痛,我同意从您的角度来看MySql很简单。

基于这些事实,我会让您想起那些说MySql既快速又简单的人。

如果您想扩展更多,节省时间,寻找更少的怪异错误,拥有更多简单的应用程序代码,花费更多时间优化业务,不与数据库打架,那么选择的开源解决方案就是Postgresql。


几个月后才开始鸣叫。

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

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


我没有使用过Django,但是我同时使用了MySQL和PostgreSQL。如果您仅将数据库用作Django的后端,则没关系,因为它将抽象出大多数差异。 PostgreSQL具有更高的可扩展性(随着数据大小/客户端数量的增加,它无法像MySQL一样快地撞上墙)。

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


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

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

通过特殊的调味料,我可以像:

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

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

我使用PostgreSQL。


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

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

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


@沃尔夫曼龙

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

PostgreSQL is a powerful, open source relational database system.


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


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


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


推荐阅读