首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并大文件的算法

合并大文件的算法
EN

Stack Overflow用户
提问于 2011-08-11 13:57:00
回答 2查看 920关注 0票数 1

假设我有四个大文件(太大了,不能单独输入内存),这些文件都有我需要处理的信息。我打算从文件#1中的每一行生成一个应用程序级对象( Record )。每个文件2-4都有组成该记录对象所需的附加信息。例如,文件结构可能如下:

文件#1:

密钥,描述

文件2:

键,元数据,大小

文件#3:

原点,速率,键

文件#4:

key,startDate,endDate

每个文件都有一个表示唯一键的列(行中已知的位置)。该密钥在文件之间共享,但不能保证存在于任何一个文件中的每个密钥都存在于其他文件中,这意味着我们将只处理存在于所有文件中的密钥子集。文件的行没有排序。您能通过处理这些文件来设计一个生成应用程序级对象的算法吗?

EN

回答 2

Stack Overflow用户

发布于 2011-08-11 14:02:52

使用键值存储数据库

数据库是处理大于内存的数据集的最佳工具。将您的文件放入键值存储区(NoSQL DB,如CouchDB或Cassandra将非常好)。使用关键查询解决问题。

使用排序和二进制搜索

如果不能使用数据库,请根据键列对文件进行排序(这可以很容易地使用GNU排序)。无法使用密钥在nlogn时间访问您的文件。遍历最大的文件,并使用对其他文件的调用来处理每个记录。这样,您的磁盘读取很可能是ba缓存的。

票数 2
EN

Stack Overflow用户

发布于 2011-08-11 14:19:45

您可以将所有内容转储到数据库中(实际上,普通的SQL数据库很好),然后删除“不完整”的记录。

要对文件执行此操作,您可以这样做:

  • 按id键对所有文件进行排序
  • 打开所有排序的文件
  • 从每个文件中读取第一条记录
  • 如果您没有4条“匹配”记录,请丢弃id最低的记录,直到找到为止。
  • 合并4条“匹配”记录
  • 冲洗和重复
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7027165

复制
相关文章

相似问题

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