是否可以在JVM中启动和关闭多个H2数据库?
我的目标是通过为每个用户/帐户提供自己的数据库来支持multi-tenancy。每个帐户的数据都很少。账户之间的数据永远不会被一起访问,比较或分组;每个帐户与其他帐户完全分开。每个帐户只能每天访问一次或每月访问几次。因此,将数据存储在一个数据库中的优势很少,并且存在一些严重的缺点。
所以我的想法是,当用户登录特定帐户时,会加载该帐户的数据库。当该用户注销或其Web应用程序会话(Vaadin app)超时时,该帐户的数据库将关闭,其数据将刷新到存储,并可能执行备份。这种打开和关闭将同时发生在任意数量的数据库中。
优点包括最大限度地减少一次使用的内存量,以缓存数据和索引,最大限度地减少锁定和其他争用,并允许平滑扩展。
我是H2的新手,所以我不确定它的架构是否可以支持这个。我要求拒绝或确认此功能,以及任何提示或警告。
答案 0 :(得分:3)
是的,可以这样做。每个数据库都包含自己的迷你环境,数据库之间没有可能的污染。
例如,您可以根据用户ID或用户登录使用jdbc url:
jdbc:h2:user1
jdbc:h2:./user1
jdbc:h2:tcp://localhost/user1
您可以对数据库名称使用任何命名约定,前提是您的操作系统允许它:user1,user2等...或者真正的登录名。
<强>提示:强>
<强>注意事项:强>
有关网址参数的疑问,请参阅H2 manual。