gpt4 book ai didi

java - 超 SQL (HSQLDB) : massive insert performance

转载 作者:行者123 更新时间:2023-12-02 01:18:48 28 4
gpt4 key购买 nike

我有一个应用程序,必须将大约 1300 万行、大约 10 个平均长度的字符串插入到嵌入式 HSQLDB 中。我一直在调整一些东西(批量大小、单线程/多线程、缓存/非缓存表、MVCC 事务、log_size/无日志、定期调用 检查点,...),但它仍然需要在 16 核、12 GB 机器上运行 7 小时。

我选择 HSQLDB 是因为我认为如果我充分利用所有这些核心,我可能会获得显着的性能提升,但我开始严重怀疑我的决定。

谁能告诉我 Elixir 吗?

最佳答案

对于 CACHED 表,磁盘 IO 占用了大部分时间。不需要多个线程,因为您要插入到同一个表中。显着提高性能的一件事是重用单个参数化的PreparedStatment,为每行插入设置参数。

在您的计算机上,您可以通过对内存映射 IO 使用较大的 NIO 限制来显着提高 IO。例如设置文件 NIO SIZE 8192。较大的尺寸需要 64 位 JVM 才能发挥作用。

http://hsqldb.org/doc/2.0/guide/management-chapt.html

要减少批量插入期间的 IO,请使用SET FILES LOG FALSE,并且在插入结束之前不要执行检查点。详细信息在这里讨论:

http://hsqldb.org/doc/2.0/guide/deployment-chapt.html#dec_bulk_operations

更新:下面的 1600 万行插入测试生成了 1.9 GB 的 .data 文件,并且在平均 2 核处理器和 7200 RPM 磁盘上只花费了几分钟。关键是大量的NIO分配。

connection time -- 47
complete setup time -- 78 ms
insert time for 16384000 rows -- 384610 ms -- 42598 tps
shutdown time -- 38109

关于java - 超 SQL (HSQLDB) : massive insert performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10293517/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com