为 Django 应用程序选择哪个数据库引擎? [关闭]

Posted

技术标签:

【中文标题】为 Django 应用程序选择哪个数据库引擎? [关闭]【英文标题】:Which database engine to choose for Django app? [closed] 【发布时间】:2012-03-21 08:39:53 【问题描述】:

我是 Django 新手,只在 Django 中使用 sqlite3 作为数据库引擎。现在,我正在开发的其中一个应用程序变得越来越大,无论是在模型复杂度还是每秒请求数方面。

Django 支持的数据库引擎在性能方面如何比较?使用它们有什么陷阱吗?最后但并非最不重要的一点是,一旦您使用了一段时间,切换到另一个引擎有多容易?

【问题讨论】:

【参考方案1】:

如果你打算使用关系数据库,Django 社区中最流行的似乎是 PostgreSQL。这是我个人的最爱。但是,MongoDB 似乎在 Python/Django 社区中也越来越受欢迎(不过,我从来没有用它做过项目)。在 mysql 上也有很多成功的项目。但是,我个人更喜欢 PostgreSQL 9.0 或 9.1。希望这会有所帮助。

编辑:我在这篇文章中做得并不好。只是想补充几个注意事项。

对于绝大多数网站,MySQL 或 PostgreSQL 都可以正常工作。两者都有自己的长处和短处。我建议你谷歌“MySQL vs. PostgreSQL” 这个搜索有很多点击量(在写这篇文章的时候,我得到了超过 3,000,000)。以下是进行评估的一些提示。

    强烈推荐最近的文章。尝试确保将 MySQL 5.5 与 PostgreSQL 9.0 或 9.1 进行比较。 MySQL 让您选择您的存储引擎。 IMO,Apple 与 Apple 的最接近的比较是 InnoDB 与 Postgres。 请记住,您可能不需要 InnoDB 或 Postgres 的所有功能。您还应该看看其他一些存储引擎。

此外,如果您计划在系统中使用任何触发器,那么 MySQL 和 InnoDB 中存在一些与它们和 ACID 合规性相关的非常严重的错误。这里是the first one,这里是another one。您可能不需要此功能,请注意它。

可能对您产生影响的最后一件事是,使用 PostgreSQL,您可以使用 Python 编写 db 函数。这是一个link to the docs。

【讨论】:

请注意,mongoDB 是非关系型的,因此与 Django 开箱即用支持的数据库非常不同。我推荐 PostgreSQL 或 MySQL。【参考方案2】:

MySQL 和 Postgres 是 Django 社区中最常用的两个数据库后端,并且具有相当的性能。我同意 Postgres 在 Django 社区中更受欢迎,尽管我没有任何确切的数据来支持这一点。我当然不是要选择 MySQL,但我想说的是,在将 MySQL 与 Django(或一般的 MySQL)一起使用时存在一些常见的陷阱:

    MyISAM 不支持事务(在 5.5.5 中不再是默认设置) 日期时间不支持毫秒 日期时间不支持时区 唯一字符字段必须少于 255 个字符 默认排序规则不区分大小写

有一些关于 Django 各种特性的文档在各种数据库后端上不受支持:https://docs.djangoproject.com/en/1.3/ref/databases/。

【讨论】:

恕我直言,PostgreSQL 比 MySQL 更先进、更强大,但 MySQL 更普遍。许多“云”提供商都提供与 MySQL 兼容的产品,这些产品的扩展性非常好。 @MarkLavin 感谢提供不受支持的功能列表,我不知道其中一些限制。这让我的答案比仅仅比较 MySQL 和 PostgreSQL 更清楚。 没问题。其中一些是次要的,但当你遇到它们时,它们可能会非常令人惊讶或令人沮丧。 到 Django 数据库文档的完整链接:docs.djangoproject.com/en/3.0/ref/databases【参考方案3】:

我也不确定要使用哪个数据库,但如果有人打算使用 MongoDB,请注意它仅适用于 py2 而不适用于 py3。

参考链接:

Project Setup with Django 1.10, mongodb and Python 3.4.3

Error while setting up MongoDB with django using django mongodb engine on windows

Setting up MongoDB + Django

【讨论】:

【参考方案4】:

MySQL 和 PostgreSQL 最适合 Django。我强烈建议您选择一个更改开发设置以在开发时使用它(反对在开发模式下使用 sqlite3 和在 prod 中使用“真实”数据库),因为存在细微的行为差异,可能会导致很多令人头疼的问题未来。

【讨论】:

以上是关于为 Django 应用程序选择哪个数据库引擎? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

django haystack:哪个搜索引擎会更好

如何使用 pymysql 作为驱动程序配置 Django?

django-数据库[配置]

Django之model外键

Django中ORM外键和表的关系(Django编程-4)

lovdbyless VS 社区引擎...哪个最好?