有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数据库Java内存限制?

我正在开发一个java程序,该程序将文件解析为列表,然后将数据插入数据库。它运行在一个有大量内存的服务器上。我需要注意java的局限性吗

比如,我不应该在将GB数据插入数据库之前将其解析到列表中


共 (3) 个答案

  1. # 1 楼答案

    你可能需要注意的限制是

    • 列表不能有2^31个或更多条目
    • JVM确实可以扩展到32GB,但随着堆大小的增加,GC的成本也会增加(除非你有Azul的Zing)

    现在大量的内存是256-512GB,如果一个JVM(或Zing)需要超过32GB的内存,我建议使用堆外内存

  2. # 2 楼答案

    您需要担心的限制不仅仅是Java

    还有网络带宽使用率、占用数据库服务器CPU、填充数据库事务日志、JDBC性能(用于大规模插入)、数据库更新索引或生成人工密钥时的缓慢性

    如果你的输入太大,你需要将它们分割成块,并分别提交。有多大取决于你的数据库

    人工密钥的分配方式可能会降低过程的速度,您可能需要提前创建一批值,例如使用hilo生成器

    启动一堆线程并用它们敲打数据库服务器只会导致争用,并使数据库服务器更难工作,因为它必须整理事务并确保它们不会相互干扰

    考虑写入某种分隔文件,然后运行大容量插入工具将其内容加载到数据库中。通过这种方式,数据库实际上可以进行合作,它可以暂停更新索引和检查约束,序列和事务也不是问题。它比JDBC快几个数量级

  3. # 3 楼答案

    这取决于为JVM分配了多少内存

    您可以分配给JVM的内存量同样取决于客户机VM(或)服务器VM类型

    选中-Xmx-Xms{a1}