【问题标题】:How to run H2 database in multithreaded way?如何以多线程方式运行 H2 数据库?
【发布时间】:2014-11-03 06:12:00
【问题描述】:

我正在使用 H2 db(在 Java 的内存模式下)并且遇到了障碍。我已经意识到,如果我在 Java 中有多个线程,每个线程在 H2 中运行一个存储过程,在 H2 级别,一切都按顺序运行。换句话说,虽然我的 Java 客户端是多线程的,但 H2 不是。

现在,我看到网上有人评论说 H2 可以在多线程模式下运行。但是我找不到一些具体的步骤/文档/教程来实现这一点。有人可以帮我吗?

我正在寻找两个具体的答案

  1. H2 能否从多线程 Java 客户端以多线程方式运行?
  2. 如果可以的话,有人可以指点我一些材料吗?

我已阅读以下链接:

  1. https://jira.codehaus.org/browse/GEOT-2832
  2. https://groups.google.com/forum/#!topic/h2-database/VoE3AU7mSuM
  3. http://www.h2database.com/html/features.html

我知道MULTI_THREADED=1 应该让 H2 以多线程方式运行。但是,我似乎没有找到说它对他/她有用的人。或者分享了如何/在哪里设置MULTI_THREADED=1 的步骤的人。

感谢您的帮助。

【问题讨论】:

  • 请不要编辑和添加无用的东西。在 SO 上,没有人喜欢与问题/答案无关的文字,因此请删除“感谢您的帮助”、“提前致谢”、“希望对您有所帮助”...
  • 嗨,我从小就彬彬有礼,尤其是在公共场合。如果您不介意,我想继续感谢人们提供的任何帮助。问候。
  • 请阅读该站点的帮助页面/meta.stackoverflow.com 以了解该站点不需要这些东西。我不介意,但请不要介意代表 > 2k 的人从您的问题中删除这些行
  • 您将“MULTI_THREADED=1”标志添加到 JDBC URL 的末尾。像这样:jdbc:h2:file:///C:/path/to/h2/db;WRITE_DELAY=0;AUTOCOMMIT=ON;AUTO_SERVER=TRUE;MULTI_THREADED=1 这个例子来自github.com/Norconex/collector-filesystem/issues/28

标签: java multithreading h2


【解决方案1】:

具有多线程语句处理的 H2 目前是“实验性的”,不应使用 - 如果您至少完成了basic research,您就会发现这一事实。您可以通过 MULTI_THREADED 选项启用它,但您将无法使用 MVCC。
我认为this discussion 有更多关于该选项的信息

【讨论】:

  • 也许这是最近几年的变化。请参阅此处的多线程部分:h2database.com/html/features.html
  • -1 居高临下。这是完全没有必要的。话虽如此,此信息可能在 2014 年是最新的,但在 2017 年版本 1.4 中不再有效。您现在可以使用默认存储引擎同时使用 MVCC 和 MULTI_TREADED。
猜你喜欢
  • 2020-06-14
  • 2015-05-24
  • 1970-01-01
  • 2017-01-11
  • 2010-09-14
  • 1970-01-01
  • 2010-12-04
  • 2012-03-08
  • 1970-01-01
相关资源
最近更新 更多