我目前正在使用DB2进行单元测试,但有时候速度很慢。我需要一个包含DB2所有功能的良好内存数据库。是否存在此类内存数据库,或者它们是否仅允许标准SQL功能?
谢谢。
修改 DB2数据库位于远程服务器上,因此我需要一种解决方案来在本地内存数据库中复制该数据库的模式,以加快测试速度。
答案 0 :(得分:12)
我需要一个包含DB2的所有功能的良好的内存数据库。
Derby(前Cloudscape)是DB2的语言兼容。它有内存模式。
也许还要看一下H2(使用DB2 compatibility mode)。但即使H2更快,我也会考虑德比。
答案 1 :(得分:4)
我认为最简单的选择是--- DB2。
下载免费快递版并将其安装在您的PC上。您的速度几乎肯定是使用DB2客户端的网络瓶颈和限制,在本地安装会消除这些。
接下来最好的事情是JavaDB(曾经被称为Derby!)。这与DB2类似但不完全相同。
使用任何其他数据库会将您转移到不受支持的功能,不兼容的SQL,同一功能的不同名称,具有相同功能名称的不同功能等等的泥潭中。
答案 2 :(得分:1)
为什么不使用tmpfs(Unix)或任何传统的ramdrive解决方案? 或者,您可以获得快速的SSD。
答案 3 :(得分:1)
如Pascal所述,Derby在语法上几乎与DB2相同。一段时间以来我们尝试了同样的事情,我们遇到了Derby不支持序列的问题,但连接协议是相同的。例如,您可以使用DB2 JDBC驱动程序连接到Derby数据库。
如果您的应用程序使用Hibernate抽象数据库连接,或者NHibernate(如果.Net)使用H2或HSQLDB也可以用于单元测试,假设您不依赖于存储过程等。
另一个帮助定位多个数据库的模式迁移的工具是http://liquibase.org。对于测试构建,您可以构建内存数据库,并为部署构建DB2数据库或生成迁移脚本。它将使用正确的模式构建数据库并提供条件迁移(例如,HSQL中不提供授权,因此您只运行DB2的更改集)。
答案 4 :(得分:0)
不知道DB2有哪些功能,但sqlite可以创建in-memory database。你可能想看看它。
答案 5 :(得分:0)
如果使缓冲池足够大,那么DB2数据库也将在内存中。
答案 6 :(得分:0)
两种可能的内存数据库是: - 来自Oracle的timesTen。 - 来自IBM的SolidDB。这个可以将事务发送回DB2,但查询将具有非常高的性能
的详细信息