对总计超过200万条记录(行)的多个输入文件(固定空格分隔的42列txt文件)进行合并排序和合并

Posted

技术标签:

【中文标题】对总计超过200万条记录(行)的多个输入文件(固定空格分隔的42列txt文件)进行合并排序和合并【英文标题】:To combine sort and consolidate multiple input files(fixed space separated txt file with 42 columns) with more than 2 million records(lines) in total 【发布时间】:2015-11-03 08:30:47 【问题描述】:

我正在以多个输入文件的形式处理两百万条记录(固定空间分隔为 45 列)我必须对它们进行排序,然后将它们合并在一起,以前我使用数组列表,生成存储在这些数组中的 bean列表,排序和合并,当记录较少时它工作正常,但是当我合并所有输入文件时,它抛出堆空间内存异常。 现在我开始使用数据库 MS Access 来解决这个问题,并使用 JDBC ODBC 连接读取所有输入文件并将其放入访问表中,现在仅此一项就需要 5 个小时来读取文件并将它们存储在 DB 中 我还必须对这些文件进行合并和排序

请指点我正确的方向 对超过200万条记录的多个输入文件进行合并排序合并,并根据规范生成输出文件

【问题讨论】:

【参考方案1】:

对于初学者,您可以研究一个更强大的数据库。 mysql(或它的一个分支,MariaDB)应该更适合处理您所追求的数据量。

读取文件也可以异步完成,这应该会进一步加快进程。

作为额外说明,根据您所追求的合并类型,您还可以查看 External Sorting 算法,这些算法明确设计用于对无法全部放入内存的数据进行排序。

【讨论】:

以上是关于对总计超过200万条记录(行)的多个输入文件(固定空格分隔的42列txt文件)进行合并排序和合并的主要内容,如果未能解决你的问题,请参考以下文章

learning_curve没有绘制超过200万条记录

超过 500 万条记录的 MongoDB 查询性能

如何以超过 15 秒的速度对超过 300 万条记录的表进行此查询?

如果在单个请求中与 Oracle 和 PostgreSql 交互以处理超过 20 万条记录,如何提高 EF Core 性能

从固定宽度的平面文件获取数百万条记录到 SQL 2000

多个度量的运行总计