django - 如果在生产和开发中使用不同的 RDBMS(例如 PostgreSQL),什么时候不应该在 Django 中使用 SQLite 进行测试?

标签 django sqlite postgresql testing

This article建议使用 SQLite 进行测试,即使您在开发和生产中使用另一个 RDBMS(我使用 PostgreSQL)也是如此。我在一个测试用例中尝试了 SQLite,它确实运行得更快(快 18.8 倍,0.5 秒对 9.4 秒!)。

在哪些情况下使用 SQLite 会产生与使用 PostgreSQL 不同的测试结果?

仅当我要测试一段包含 raw SQL query 的代码时?

最佳答案

无论查询生成器的平台抽象如何努力,查询生成器可能会随时生成在不同平台上表现不同的查询。正则表达式、排序规则和排序的差异,聚合和分组的不同严格程度,全文搜索或其他扩展功能的使用,除了最简单的函数和运算符之外的任何使用等等。

此外,如您所述,任何时候运行原始 SQL。

在迭代开发期间在 SQLite 上运行测试是适度合理的,但您确实需要在推向生产之前在您要部署的同一个数据库上运行它们。否则你会 get bitten by some query where different engines have different capabilities to prove transitive equality through joins and GROUP BY或以不同方式允许查询,因此查询将在一个上运行然后在另一个上失败。

在实时推送更改之前,您还应该在合理的数据集上针对 PostgreSQL 进行测试,以便发现明显的性能回归,这将成为生产中的问题。在 SQLite 上执行此操作毫无意义,因为完全不同的查询通常会快或慢。

我很惊讶您看到您报告的那种速度差异。我想研究 为什么 测试在 PostgreSQL 上运行得如此慢,以及您可以采取什么措施,因为在生产中它显然不会有同样的性能差异。我在 optimise PostgreSQL for fast testing 中写了一些关于这个的内容.

关于django - 如果在生产和开发中使用不同的 RDBMS(例如 PostgreSQL),什么时候不应该在 Django 中使用 SQLite 进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531494/

相关文章:

ruby - 使用续集和数据库清理器的外键约束问题

ruby-on-rails - 在 Rails 中从关系数据库中提取信息

java - 玩 Java - 无法连接数据库 postgreSQL

python pgdb挂数据库

Django Azure AD 集成

django - 在 Django 表单中的两个字段中将一个字段设置为必填字段

django - 如何使用 django-rest-framework 和 angularJS 注册用户?

performance - 用于客户端-服务器的 SQLite

postgresql - 使用 dblink 复制新数据的函数中出现语法错误

python - 如何在 Django 管理中过滤 filter_horizo​​ntal?