【发布时间】:2019-01-02 12:58:31
【问题描述】:
我正在使用单元/集成测试,而 SQLite 不完全支持某些 SQL 功能(例如 RIGHT JOIN 和 FULL OUTER JOIN)。有什么方法可以使用 MySQL(或 MariaDB),其中数据库的内容完全存储在内存中?
MySQL 有 MEMORY 表引擎,但是,这个表引擎在我的测试中仍然可能会产生不一致。我需要的是 :memory: 的替代方法,来自 SQLite,但具有与 MySQL 相同的功能。
编辑:
更具体地说,我的问题与单元/集成测试的性能有关。一些教程表明使用 SQLite 和内存中的数据库来加速测试过程,但是,我的应用程序中的一些查询与 SQLite 不兼容。如果生产数据库是 MariaDB,我也认为在 SQLite 中进行测试不是一个好习惯。
我的问题是在 MySQL/MariaDB 中是否有任何替代测试的方法与 SQLite :memory: 选项的工作方式相同。
【问题讨论】:
-
您的问题的答案是 MEMORY 存储引擎。您需要更清楚地了解问题所在。您可以在“内存”虚拟磁盘上使用另一个存储引擎,但这取决于您的操作系统。
-
哪些不一致?
-
第一个问题是“为什么?”因为在内存中测试将部署在磁盘上的内容通常是一个糟糕的计划,其次,如果您真的需要在内存中使用它,请使用 ramdisk。
-
MySQL和MariaDB没有
FULL OUTER JOIN,但是可以轻松模拟。 -
通常单元测试根本不应该触及数据库,你正在做的可能是集成测试,对于这样的测试我更喜欢独立的mysql服务器,所以设置中的测试套件将创建数据库,所有表格,样本数据并在最终确定期间全部删除