4

我的任务是将一些数据从 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 文件。

有人可以建议一种方法吗?

4

1 回答 1

2

To avoid having to create CSV files, you could create linked tables using the CREATE LINKED TABLE statement or using CALL LINK_SCHEMA. Then copy the data using CREATE TABLE ... AS SELECT.

As for the memory problem, do you create an in-memory database? If yes, you could conserve memory (at the expense of some speed) if you use the in-memory file system, or the compressed in-memory file system: jdbc:h2:memFS:test or jdbc:h2:memLZF:test instead of jdbc:h2:mem:test. If you are not using an in-memory database then I'm not sure what the problem is.

于 2012-11-17T08:31:29.580 回答