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

合而为一 播客 Joel说他的MySQL有一些问题,数据不一致。

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

有帮助吗?

解决方案

给未来读者的注意事项: 以下文本的最后编辑时间为 2008 年 8 月。截至本次编辑时,已是近 5 年前的事了。软件的版本之间可能会发生快速变化,因此在您根据以下建议选择 DBMS 之前,请先进行一些研究,看看它是否仍然准确。


更好的?

MySQL 通常由网络主机提供。

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

这次讨论解决了您的“更好”问题

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

所以如果你的决定因素是,“哪个更快?” 那么答案是“这要看情况。 如果真的很重要,请针对两者测试您的应用程序。“如果您真的非常关心,您可以聘请两名 DBA(一名专门研究每个数据库)并让他们排除数据库中的垃圾,然后进行选择。令人惊讶的是多么昂贵 好的 DBA 是;和 他们每一分钱都值得.

当重要的时候。

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


Joel 还在那个播客中表示,这样的评论会反咬他一口,因为人们会说 MySQL 就是一坨屎——Joel 无法得到一个 count 后面的行数。轶事的复数不是数据。 他说:

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

他还说:

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

其他提示

有人说 MySQL 简单、快速。

快速 - 如果您使用默认的 MyIsam 存储引擎,它会很快。它的严重数据库功能几乎为零,但速度很快。如果我讽刺的话,我会说平面文件上的 grep 也很快。有趣的是,它与 MyIsam 存储数据的方式并没有那么远。因此,不要指望那里有任何关系数据库功能。甚至没有参考完整性约束。

简单 - 现在假设您想要真实数据库功能的公平子集。也许是完整性约束、触发器、事务隔离、功能索引之类的东西?因此,显然您必须放弃 MyIsam 引擎,并从其他 3 个主要存储引擎之一中进行选择。它们由不同的供应商开发,每个供应商都有特定的配置/行为。

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

根据这些事实,我会让您对那些说 MySql 快速且简单的人做出看法。

如果您想扩大规模、节省时间、减少需要寻找的奇怪错误、拥有更简单的应用程序代码、花更多时间优化业务而不是与数据库作斗争,那么首选的开源解决方案是 Postgresql。

我没有使用过 Django,但我使用过 MySQL 和 PostgreSQL。如果您仅将数据库用作 Django 的后端,那么这并不重要,因为它会抽象掉大部分差异。PostgreSQL 的可扩展性更高一些(随着数据大小/客户端数量的增加,它不会像 MySQL 那样快遇到瓶颈)。

真正的区别在于您正在开发一个新系统。那么我会毫不犹豫地推荐 PostgreSQL,因为它具有更多功能,使您的数据库层更加可定制,以便您可以根据您可能有的任何要求对其进行微调。

几个月后才插话。

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

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

虽然有点过时了,但还是值得一读 MySQL 陷阱 页。据我所知,其中列出的许多项目仍然是真实的。

我使用 PostgreSQL。

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

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

经过 特制酱料 我喜欢:

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

好吧,我认为您不应该在过去的任何开发(构建、暂存、生产)中使用不同的数据库品牌,因为这会给您带来麻烦。

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

因此,如果您主要编写 CRUD 应用程序,那么 mySQL 就是您的最佳选择。如果您需要数据库中的某些功能(如果您不确定,那么您就不需要),那么您可能需要研究一下 postgreSQL。

如果您正在编写一个可能分布在不同服务器上的应用程序,那么由于可移植性,MySQL 比 PostgreSQL 更重要。PostgreSQL 很难在不太令人满意的网络主机上找到,尽管有一些。在大多数方面,PostgreSQL 都比 MySQL 慢,尤其是在最终的微调方面。总而言之,我建议先尝试一下 PostgreSQL,这样你就不会完全避免它,然后再做出判断。

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

@狼人龙

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top