gpt4 book ai didi

java - 如何在java中以低内存且更快的方式迁移和处理数据

转载 作者:行者123 更新时间:2023-12-01 15:43:26 26 4
gpt4 key购买 nike

我有一个应用程序,它接收带有 DBF 中的平面表的文件,这些文件会规范化、转换并插入到 MySQL 数据库中,这些文件会增长到 250,000 到 270,000 条记录,现在消耗大约 1.5 - 2 Gb 我必须重复一遍整个过程和各个部分。

我检查进程中是否没有先前的记录,请在HashMaps中帮助我将唯一记录的键保存到其中,以不保存其中的所有信息,这里的问题是要上传文件到数据库DBF总记录数据增长,每次导入内容都会变得更慢并且消耗更多内存,轻松地在一个表中获取 770,000 条记录,并且调用花费更多的 2,000,000

示例:

DBF文件有91个字段,我标准化的数据库给出了5个主表,我必须重复记住DBF的过程5次。

没有什么可以花费我大约 1 小时来迁移包含 250,000 条记录的所有 DBF 文件。

如何才能最大限度地减少时间和 RAM 消耗,除非 RAM 消耗较低并且我在线程“main”java.lang.OutOfMemoryError 中收到几个异常:Java 堆空间

<小时/>

DBF文件结构有很多冗余数据是这样的(列):

  • 调查代码
  • 总体调查数据
  • 在 encuenta 中对数据进行分组
  • 人员详细信息

示例:

| survey_code | survey_columns | group_survey    | more_data | person_details |
|:------------|:---------------|:----------------|:----------|:---------------|
| 1 | ... | 1 | ... |1-oscar |
| 1 | ... | 1 | ... |2-juan |
| 1 | ... | 2 | ... |1-catalina |
| 2 | ... | 1 | ... |7-john |

注意:正如您所看到的,有足够的数据冗余

MySQL数据库的结构是这样的:

Survery (table)
id
survey_data

Group_in_survey (table)
survey_id
group_data

Person (table)
group_id
person_details
<小时/>

导入过程按照表和依赖关系定义的顺序划分,对于每个表,都会遍历DBF文件中的所有记录。

在我请求启动数​​据库之前,我将必要的信息加载到 HashMap 中,以便在将记录添加到 MySQL 中的数据库之前执行验证是否存在记录。

此外,每次向 MySQL 数据库添加一条记录时,该记录都会添加到 HashMap,因为其中一个调试过程是重复的。后者在每个进程中完成

最佳答案

据我了解,您首先将记录插入到 HashMap 中以消除重复项,然后将其复制到 MySQL 数据库。如果是这种情况,您可以尝试使用 HugeCollections图书馆及其HugeMap而不是简单的HashMap

关于java - 如何在java中以低内存且更快的方式迁移和处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606558/

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