当前位置: 首页 > 面试题库 >

一个JVM中有多个独立的H2数据库

寿伟
2023-03-14
问题内容

是否可以在JVM中启动和关闭多个H2数据库?

我的目标是通过为每个用户/帐户分配自己的数据库来支持多租户。每个帐户的数据很少。帐户之间的数据永远不会一起访问,比较或分组;每个帐户都是完全独立的。每个帐户每天只能短暂访问一次,一个月只能访问几次。因此,将数据存储在单个数据库中几乎没有什么弊端,但也存在一些严重的弊端。

所以我的想法是,当用户登录特定帐户时,该帐户的数据库已加载。当该用户注销或他们的Web应用程序会话(Vaadin应用程序)超时时,该帐户的数据库已关闭,其数据已刷新到存储中,并且可能执行了备份。这种打开和关闭将同时发生在任意数量的数据库中。

好处包括最大程度地减少在任何时候一次用于缓存数据和索引的内存量,最大程度地减少锁定和其他争用,并允许平滑扩展。

我是H2的新手,所以不确定它的体系结构是否可以支持此功能。我要求拒绝或确认此功能,以及任何提示或警告。


问题答案:

是的,可以这样做。每个数据库将包含其自己的小型环境,数据库之间不会造成任何污染。

例如,您可以根据用户ID或用户登录名使用jdbc网址:

  • jdbc:h2:user1 在H2 1.3.x嵌入式模式下
  • jdbc:h2:./user1 在H2 1.4.x嵌入式模式下
  • jdbc:h2:tcp://localhost/user1 在tcp模式下

您可以为数据库名称使用任何命名约定,只要您的操作系统允许它使用:user1,user2等…或真正的登录名。

提示:

  • 使用服务器模式而不是嵌入式模式,从而允许同一用户来自多个会话/主机的多个连接
  • 有一个模式迁移器(如flyway)来初始化每个新创建的数据库
  • 确保您在应用程序的顶层管理名称冲突,并可能将这些数据库和相应的登录名也存储在专用数据库中

注意事项:

  • 不要使用连接池,因为连接将很难重用
  • 您必须确保服务器上未使用IFEXISTS = TRUE
  • 避免对jdbc url进行调整,例如将LOG = 0,UNDO_LOG = 0变为……。
  • 我不知道您是否会受到操作系统或JVM的限制,例如可以打开多少个db文件。
  • 我不知道是否可以从手册页中调整此设置。我找不到一个。

如果对url参数有疑问,请参考H2手册。



 类似资料:
  • 问题内容: 我有一个关于在一个JVM中创建多个Spark会话的查询。我已经读过,在早期版本的Spark中不建议创建多个上下文。Spark 2.0中的SparkSession也是如此。 我正在考虑从UI调用Web服务或servlet,然后该服务创建一个spark会话,执行一些操作并返回结果。这将导致为客户端的每个请求创建一个火花会话。是否推荐这种做法? 说我有一个类似的方法: 等等.... 如果将这

  • 我有一个模式,其中每行包含多个数组列,我想独立于每个数组列爆炸。 假设我们有列: 我想要一个输出: 想法? (哦,我正在尝试这样做,所以我不必随着模式的变化而更新代码,也因为实际的模式有点大…) PS -支持这个非常相似但不同的问题,我无耻地从这个问题中窃取了示例数据。 编辑:@oliik赢了,但是,如果能用<code>df来实现这一点,那也太棒了。flatMap(主要是因为我仍然不去摸索<cod

  • 我试图设置一个独立的Spark2.0服务器来并行处理分析功能。为此,我希望有一个带有多个执行者的工作人员。 我在使用: 独立Spark 2.0 8核 24gig ram Windows server 2008 pyspark(尽管这看起来不相关)

  • 我想知道我是否可以在一台机器上运行多个独立的neo4j实例。我知道我可以将多个实例配置为HA集群(此处),但这不是我的意图,我只需要在我的机器上使用两个完全不同且独立的neo4j实例(如果有区别的话,这是一个Mac OSX)。这只是为了我的开发测试,我尝试了有两个不同的目录,有不同的,并为它们设置了两个不同的端口,但只有一个运行正常。 如果有任何帮助,我将不胜感激。谢谢你。

  • 本文向大家介绍DBMS中的数据独立性,包括了DBMS中的数据独立性的使用技巧和注意事项,需要的朋友参考一下 数据库包含大量数据。并非所有数据都是用户数据,某些数据可能是元数据等。因此,数据库具有数据独立性非常重要。 数据独立性基本上意味着,如果在某个级别上更改数据,则不会影响更高级别上的数据视图,因此,更高级别上的数据应与更低级别上的数据修改无关。  有两种类型的数据独立性。这些是- 逻辑数据独立

  • 所以,我已经找到了实现这一点的方法。我的阵列看起来一团糟。这个问题很难解释,所以我会提供一些图片和代码。 编辑:问题是for循环和x1,y1,z1变量由浮点数控制 制作3x3x1阵列会产生以下结果: