数据库Java内存限制? 1 周,6 日 Questions & Answers 266 我正在开发一个java程序,该程序将文件解析为列表,然后将数据插入数据库。它运行在一个有大量内存的服务器上。我需要注意java的局限性吗 比如,我不应该在将GB数据插入数据库之前将其解析到列表中
# 1 楼答案 你可能需要注意的限制是 列表不能有2^31个或更多条目李> JVM确实可以扩展到32GB,但随着堆大小的增加,GC的成本也会增加(除非你有Azul的Zing) 现在大量的内存是256-512GB,如果一个JVM(或Zing)需要超过32GB的内存,我建议使用堆外内存
# 2 楼答案 您需要担心的限制不仅仅是Java 还有网络带宽使用率、占用数据库服务器CPU、填充数据库事务日志、JDBC性能(用于大规模插入)、数据库更新索引或生成人工密钥时的缓慢性 如果你的输入太大,你需要将它们分割成块,并分别提交。有多大取决于你的数据库 人工密钥的分配方式可能会降低过程的速度,您可能需要提前创建一批值,例如使用hilo生成器 启动一堆线程并用它们敲打数据库服务器只会导致争用,并使数据库服务器更难工作,因为它必须整理事务并确保它们不会相互干扰 考虑写入某种分隔文件,然后运行大容量插入工具将其内容加载到数据库中。通过这种方式,数据库实际上可以进行合作,它可以暂停更新索引和检查约束,序列和事务也不是问题。它比JDBC快几个数量级
# 1 楼答案
你可能需要注意的限制是
现在大量的内存是256-512GB,如果一个JVM(或Zing)需要超过32GB的内存,我建议使用堆外内存
# 2 楼答案
您需要担心的限制不仅仅是Java
还有网络带宽使用率、占用数据库服务器CPU、填充数据库事务日志、JDBC性能(用于大规模插入)、数据库更新索引或生成人工密钥时的缓慢性
如果你的输入太大,你需要将它们分割成块,并分别提交。有多大取决于你的数据库
人工密钥的分配方式可能会降低过程的速度,您可能需要提前创建一批值,例如使用hilo生成器
启动一堆线程并用它们敲打数据库服务器只会导致争用,并使数据库服务器更难工作,因为它必须整理事务并确保它们不会相互干扰
考虑写入某种分隔文件,然后运行大容量插入工具将其内容加载到数据库中。通过这种方式,数据库实际上可以进行合作,它可以暂停更新索引和检查约束,序列和事务也不是问题。它比JDBC快几个数量级
# 3 楼答案
这取决于为JVM分配了多少内存
您可以分配给JVM的内存量同样取决于客户机VM(或)服务器VM类型
选中
-Xmx
和-Xms
{a1}