是否可以同时启动和关闭多个H2JVM 中的数据库?
我的目标是支持多租户为每个用户/帐户提供自己的数据库。每个帐户的数据很少。帐户之间的数据永远不会一起访问、比较或分组;每个帐户都与其他帐户完全分开。每个帐户每天仅短暂访问一次或每月几次。因此,将数据集中在一个数据库中几乎没有什么好处,但也有一些严重的缺点。
所以我的想法是,当用户登录特定帐户时,会加载该帐户的数据库。当该用户注销或他们的 Web 应用程序会话时(Vaadinapp)超时,该帐户的数据库将关闭,数据将刷新到存储,并且可能会执行备份。对于任何数量的数据库来说,这种打开和关闭都会并行发生。
优点包括最大限度地减少在任一时间用于缓存数据和索引的内存使用量、最大限度地减少锁定和其他争用以及允许平滑扩展。
我是 H2 的新手,所以我不确定它的架构是否可以支持这一点。我要求否认或确认此功能,以及任何提示或警告。
是的,可以这样做。每个数据库都会包含自己的迷你环境,数据库之间不会存在污染。
例如,您可以使用基于用户 ID 或用户登录的 jdbc url:
-
jdbc:h2:user1
在 H2 1.3.x 嵌入模式下
-
jdbc:h2:./user1
在 H2 1.4.x 嵌入模式下
-
jdbc:h2:tcp://localhost/user1
在 TCP 模式下
您可以使用任何命名约定作为数据库名称,前提是您的操作系统允许:user1、user2 等...或者真正的登录名。
Tips:
- 使用服务器模式而不是嵌入式模式,允许同一用户从多个会话/主机进行多个连接
- 有一个架构迁移器(例如flyway) 初始化每个新创建的数据库
- 确保您在应用程序的顶层管理名称冲突,并可能将这些数据库和相应的登录名存储在专用数据库中
Caveats:
- 不要使用连接池,因为连接将难以重用
- 您必须确保服务器上未使用 IFEXISTS=TRUE
- 避免对 jdbc url 使用调整,例如将 LOG=0、UNDO_LOG=0 等...
- 我不知道您的操作系统或 JVM 是否会限制您可以像这样打开多少个数据库文件。
- 我不知道是否可以从手册页中调整此类设置。我找不到。
请参阅H2手册对 url 参数有疑问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)