我有一项任务是将一些数据从mysql加载到h2。我们必须在UI级别渲染树,其中树具有大约50000个节点。所以认为从H2读取可能会减少延迟。
为此,我必须从MySQL加载大约1M(每个客户都有自己的树)记录到H2。装载部件由应用程序处理。它从MySQL读取并批量更新到H2。它在执行执行时处理40000条记录。但随着迁移过程的继续,服务器内存不足。
我尝试使用“SET LOG 0,SET LOCK_MODE 0,SET UNDO_LOG 0”来有效地加载数据,但服务器的内存仍然相同。
我为堆设置了512M内存。
H2文档说使用“create table ... as select ...”来加快数据加载但我认为这不会减少加载时间,因为应用程序必须读取1M记录并创建CSV文件。
有人可以建议吗?
答案 0 :(得分:2)
为避免创建CSV文件,您可以使用linked tables语句或使用CREATE LINKED TABLE
创建CALL LINK_SCHEMA
。然后使用CREATE TABLE ... AS SELECT
复制数据。
至于内存问题,你是否创建了一个内存数据库?如果是,如果您使用in-memory file system, or the compressed in-memory file system:jdbc:h2:memFS:test
或jdbc:h2:memLZF:test
而不是jdbc:h2:mem:test
,则可以节省内存(代价是某些速度)。如果您没有使用内存数据库,那么我不确定问题是什么。