我有一个应用程序,该应用程序在DBF中接收带有平面表的文件,这些文件进行规范化并将其转换并插入到MySQL数据库中,文件增长到250,000至270,000条记录,现在消耗约1.5-2 Gb,我必须重复该过程,并分部分。
我检查过程中是否没有先前的记录,在HashMap中帮助我将唯一记录的键保存为不包含所有信息的问题,这里的问题是要上传文件到数据库DBF总记录数据会增加,每次导入时,事情变慢并且消耗更多的内存,轻松地在一张表中获得770,000条记录,并致电以花费更多的2,000,000
例:
DBF文件有91个字段,我的归一化数据库给出了5个主表,我必须重复5次记住DBF的过程。
没有什么可以花我大约1个小时来迁移250,000条记录的所有DBF文件。
除非RAM消耗较低并且我得到几个Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
,如何才能最大程度地减少时间和RAM消耗
DBF文件结构具有许多冗余数据,如下所示(列):
调查代码
总体调查数据
枚举内的分组数据
人员的详细信息
例:
| 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文件中的所有记录。
在我提出启动数据库的请求之前,然后在将记录添加到MySQL中的数据库之前,如果存在记录,我将执行验证所需的信息加载到HashMap中。
同样,每当您向MySQL数据库添加一条将tamibén添加到HashMap的记录时,由于重复了其中一个调试过程。后者在每个过程中都完成
最佳答案
据我了解,您是将记录首先插入到HashMap中,以消除重复项,然后将它们复制到MySQL数据库中。如果是这种情况,您可以尝试使用HugeCollections库及其HugeMap而不是简单的HashMap