MySQL vs PostgreSQL for Web Applications

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

在一个播客乔尔说,他有一些MySQL的问题,数据不一致。

我想知道是否有人有这样的问题。 另外当涉及到可以轻松调整的性能?

给未来读者的一封信:下面的文本是在2008年8月最后一次编辑的。 软件可以从一个版本到另一个版本快速变化,所以在你根据下面的build议select一个DBMS之前,先做一些研究,看看它是否仍然是准确的。


更好?

MySQL更常用于Web主机。

PostgreSQL是一个更成熟的产品。

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

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

所以,如果你的决定因素是“ 哪个更快? ”那么答案就是“这取决于, 如果真的很重要,就用两个testing你的应用程序。 ”如果你真的关心,你会得到两个DBA在每个数据库),并让他们调整从数据库中的垃圾,然后select。 好的数据库pipe理员的成本是惊人的。 他们是值得的每一分钱

什么时候重要。

这可能不是,所以只要select你喜欢的数据库的声音和去与它; 更好的性能可以用更多的内存和CPU,更合适的数据库devise,聪明的存储过程技巧等等来购买 – 而且对于random-website-X来说更便宜,更容易,而不必苦于selectMySQL或PostgreSQL以及从昂贵的DBA进行专家调优。


Joel在播客中也表示,评论会回来咬他,因为人们会说MySQL是一种垃圾 – Joel无法得到回报。 轶事的复数不是数据。 他说 :

在我的职业生涯中,MySQL是我唯一编程的数据库完整性问题的数据库,在这里你做了查询,并且你得到了无意义的答案,这是不正确的。

他还说:

这只是一个轶事。 这实际上是令我感到挫折的事情之一,关于博客或一般的互联网。 […]有一个奇怪的倾向,轶事成真理,我实际上作为一个博客,我开始感到有点内疚

有人说MySQL简单快捷。

快速 – 如果您使用默认的MyIsam存储引擎,则速度很快。 它几乎没有严重的数据库function,但速度很快。 如果我讽刺,我会说一个平面文件上的grep也是快速的。 有趣的是,它不像MyIsam存储数据那么遥远。 所以不要指望有任何关系数据库function。 甚至没有引用完整性约束。

简单 – 现在让我们假设你想要一个真正的数据库function的公平的子集。 一些东西像完整性约束,触发器,事务隔离,function指标也许? 所以显然你必须让MyIsam引擎远离主要的其他3个存储引擎之一。 谁由不同的供应商开发,每个供应商都有特定的configuration/行为。

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

从这些事实中,我会让你对那些说MySql是快速和简单的你的头脑。

如果你想扩大规模,节省时间,寻找更less的奇怪的错误,有更简单的应用程序代码,花更多时间优化你的业务,而不是与数据库作斗争,那么select开源解决scheme是Postgresql。

我没有使用Django,但我已经使用MySQL和PostgreSQL。 如果您将数据库仅用作Django的后端,那么这并不重要,因为它将抽象出大部分差异。 PostgreSQL有一点可扩展性(它不会像数据大小/客户端数量增加那样快到MySQL的速度)。

如果你正在做一个新的系统,真正的区别就来了。 那么我build议PostgreSQL不要动手,因为它有更多的特性使得你的数据库层更加可定制,这样你就可以根据你的需求进行微调。

只是在几个月后才打瞌睡。

这两个数据库的地理能力是非常非常不同的。 PostgreSQL具有特殊的PostGIS扩展。 MySQL的地理function几乎为零。

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

尽pipe已经过时了,但值得一读的是MySQL的search页面。 这里列出的许多项目仍然是真实的,据我所知。

我使用PostgreSQL。

我广泛使用。 我select一个特定的项目归结为:

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

通过特别的酱,我喜欢的东西:

  • 简单/便宜的复制= MySQL
  • 巨大的数据集问题,结果很小= PostgreSQL。 使用语言扩展,并有非常有效的数据操作。 (PL / Python,PL / TCL,PL / Perl等)
  • 与R统计库的接口= Debian / Ubuntu中提供的 PostgreSQL PL / R

那么,我认为你不应该在过去的开发(build,stage,prod)中使用一个不同的数据库品牌,因为它会回来咬你。

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

所以,如果你正在编写一个CRUD应用程序,那么mySQL是最好的select。 如果你需要数据库中的某些function(如果你不确定,那么你不需要),那么你可能想看看postgreSQL。

如果你正在编写一个可能在不同的服务器上分发很多的应用程序,那么由于可移植性的原因,MySQL对PostgreSQL有很大的影响。 PostgreSQL很难find不太令人满意的networking主机,只有less数几个。 在大多数方面,PostgreSQL比MySQL慢,尤其是在最后的微调。 总而言之,我想说的是给PostgreSQL一个短暂的时间,这样你就不是完全避免它,然后作出判断。

谢谢。 我已经使用Django与MySQL,这很好。 select你需要的function的数据库。 很难比较MySQL和Postgres。 最好将Postgress与SQl服务器进行比较。

@WolfmanDragon

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

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

MySQL是一个关系数据库pipe理系统,而PostgreSQL是一个对象 –关系数据库pipe理系统 。 PostgreSQL非常适合C ++或Java开发人员,因为它使我们能够更好地控制如何编写查询。 ORDBMS也给我们对象和用户定义的types。 SQL查询本身比MySQL更接近ISO标准。
你需要一个ORDBMS还是一个RDBMS? 这会更好地回答你的问题。