首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在低内存和更快的java中迁移和处理数据

如何在低内存和更快的java中迁移和处理数据
EN

Stack Overflow用户
提问于 2011-09-30 06:11:51
回答 3查看 334关注 0票数 0

我有一个应用程序,它接收带有DBF中的平面表的文件,该文件规范并转换并插入到MySQL数据库,这些文件将增长到250,000至270,000条记录,而且现在消耗1.5 -2 Gb左右--我必须重复这个过程,并将其分成几个部分。

如果没有先前的记录,我在HashMaps中检查,帮助那些是唯一记录的键不能保存其中的所有信息,这里的问题是,当上传文件到数据库DBF总记录数据增长,每次您导入的东西变得更慢,消耗更多内存时,很容易在一个表中获得77万条记录,并调用2,000,000条记录中的更多的部分。

示例:

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

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

如何将时间和内存消耗降到最低,除非内存消耗较低,并且我得到了几个Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

有许多冗余数据的DBF文件结构如下(列):

  • 调查代码
  • 总体调查数据
  • 附件中的组数据
  • 有关人士的详情

示例:

代码语言:javascript
复制
| 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数据库的结构如下:

代码语言:javascript
复制
Survery (table)
  id
  survey_data

Group_in_survey (table)
  survey_id      
  group_data

Person (table)
  group_id
  person_details   

根据表及其依赖定义的顺序划分的导入过程(对于每个表)运行在DBF文件中的所有记录中。

在提出启动数据库的请求之前,在将记录添加到HashMap中的数据库之前,加载到执行验证所必需的MySQL信息。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-30 06:24:33

据我所知,您首先将记录插入到HashMap中,以摆脱重复的记录,然后将其复制到MySQL数据库。如果是这样,您可以尝试使用HugeCollections库及其HugeMap,而不是简单的HashMap。

票数 1
EN

Stack Overflow用户

发布于 2011-09-30 06:28:12

我想我更喜欢处理平面文件,先剥离副本,然后保存到临时文件中,然后执行完整的批量导入。这样,您就不会遇到内存问题,如果有任何问题,您将对第一步进行备份。

票数 0
EN

Stack Overflow用户

发布于 2011-09-30 09:03:28

似乎您正在做一些奇怪的事情,看起来您正在解析整个dbf文件,将其加载到内存中,然后一个一个地插入到数据库中(希望每次都不会创建连接)。

现在,据我所知,dbf很容易被流读取器读取,因此没有必要将所有内容加载到内存中,我认为最好是分批读取100条记录,将所有记录插入数据库,或者您可以使用insert创建sql文件,然后在mysql上运行整个文件(但这会导致hdd空间的大量增加)。

现在,整个进程应该只占用与处理一行相同的内存,这应该是稳定的。

我需要更多地了解dbf文件和表的结构,才能说更多的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7606558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档