【发布时间】:2011-09-30 06:11:51
【问题描述】:
我有一个应用程序,它接收带有 DBF 中的平面表的文件,它标准化并转换并插入到 MySQL 数据库中,文件增长到 250,000 到 270,000 条记录之间,现在消耗大约 1.5 - 2 Gb 我必须重复过程和部分。
如果没有先前的记录,我会检查该过程,请在 HashMaps 中帮助我将唯一记录的键不保存其中的所有信息,这里的问题是要将文件上传到数据库 DBF 总记录数据增长,每次导入内容变得更慢并消耗更多内存,轻松在一个表中获得 770,000 条记录,并调用花费更多的 2,000,000
示例:
DBF 文件有 91 个字段,我已经规范化的数据库给出了 5 个主表,我必须重复记住 DBF 的过程 5 次。
迁移所有包含 250,000 条记录的 DBF 文件大约需要 1 小时。
你怎样才能最大限度地减少时间和内存消耗,除非内存消耗更低,我得到几个Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
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 数据库时,该记录 tamibén 添加到 HashMap,因为其中一个调试过程是重复的。后者在每个进程中完成
【问题讨论】:
标签: java performance memory-management memory-leaks data-migration