我想知道是否有内存数据库实现,可以跨多个 AppDomain 使用相同的内存数据库实例。
动机。像那里的许多人一样,我们对我们的客户端-服务器应用程序进行了集成测试。有几种测试模式,从最重的一种——现实生活场景,客户端、服务器和数据库都位于不同的机器上,到最轻量的一种,客户端和服务器只是同一个进程中的两个 AppDomain并且数据库是同一台机器上的 sqlite 文件。
自然,轻量级场景是最快的,开发人员经常使用它,而重度场景在每次构建时在我们的 CI 服务器上运行。
我的目标是通过使用内存数据库进一步加速轻量级场景。
问题。好的,所以 sqlite 有一个内存数据库选项,但是这样一个数据库:
- 在与它的连接关闭后被处理掉。
- 不能有两个打开的连接,新连接打开另一个数据库实例。
不幸的是,我需要两个 - 一个用于测试暂存代码,它在客户端 AppDomain 中运行,另一个用于服务器端 DAL。
我意识到 sqlite 内存数据库工作方式背后的基本原理。我也意识到在两个 AppDomain 之间共享内存数据库的困难。如何在两个 AppDomain 之间共享内存缓冲区而不恢复到内存映射文件(而且我不想处理任何文件系统 API)?
我看到的唯一有效的解决方案是让两个 AppDomain 共享一个非托管内存缓冲区,其中缓冲区的句柄将从一个 AppDomain 传递到另一个。但是是否有任何支持此设置的内存数据库实现?
(一种低效的解决方案是将整个数据库从一个 AppDomain 传递到另一个 AppDomain,然后再返回)。
我的分析可能完全错误,我可能会错过一些简单的解决方案。无论如何,我想知道是否有人遇到过同样的问题以及他们是如何解决的。
附言
我真的很想避免使用任何类型的文件 API,比如内存映射文件。