【问题标题】:H2 database bulk uploadH2数据库批量上传
【发布时间】:2012-11-17 04:36:04
【问题描述】:

我的任务是将一些数据从 mysql 加载到 h2。我们必须在 UI 级别渲染一棵树,该树有大约 50000 个节点。因此认为从 H2 读取可能会减少延迟。

为此,我必须将大约 1M(每个客户都有自己的树)记录从 MySQL 加载到 H2。加载部分由应用程序处理。它从 MySQL 读取并对 H2 进行批量更新。它在一次执行时处理 40000 条记录。但是随着迁移过程的继续,服务器内存不足。

我尝试过使用“SET LOG 0, SET LOCK_MODE 0, SET UNDO_LOG 0”来有效地加载数据,但服务器内存不足仍然是一样的。

我已经为堆设置了 512M 内存。

H2 文档说使用“create table ... as select ...”来更快地加载数据,但我认为这不会减少加载时间,因为应用程序必须读取 1M 记录并创建 CSV 文件。

有人可以推荐一个方法吗?

【问题讨论】:

    标签: h2


    【解决方案1】:

    为避免创建 CSV 文件,您可以使用 CREATE LINKED TABLE 语句或使用 CALL LINK_SCHEMA 创建 linked tables。然后使用CREATE TABLE ... AS SELECT复制数据。

    至于内存问题,你是否创建了内存数据库?如果是,您可以使用in-memory file system, or the compressed in-memory file systemjdbc:h2:memFS:testjdbc:h2:memLZF:test 而不是jdbc:h2:mem:test 来节省内存(以牺牲一些速度为代价)。如果您没有使用内存数据库,那么我不确定问题出在哪里。

    【讨论】:

    • 嗨,托马斯。感谢您的宝贵意见。我正在使用嵌入式数据库。我修改了代码以支持从链接表加载数据。幸运的是,通过链接表加载所需的时间和我目前的实现大致相同。我还为将来的情况集成了对链接表的支持。谢谢。
    猜你喜欢
    • 2013-07-12
    • 2021-01-03
    • 2012-03-07
    • 2011-09-04
    • 2011-03-21
    • 1970-01-01
    • 2020-08-12
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多