假设我有四个大文件(太大了,不能单独输入内存),这些文件都有我需要处理的信息。我打算从文件#1中的每一行生成一个应用程序级对象( Record )。每个文件2-4都有组成该记录对象所需的附加信息。例如,文件结构可能如下:
文件#1:
密钥,描述
文件2:
键,元数据,大小
文件#3:
原点,速率,键
文件#4:
key,startDate,endDate
每个文件都有一个表示唯一键的列(行中已知的位置)。该密钥在文件之间共享,但不能保证存在于任何一个文件中的每个密钥都存在于其他文件中,这意味着我们将只处理存在于所有文件中的密钥子集。文件的行没有排序。您能通过处理这些文件来设计一个生成应用程序级对象的算法吗?
发布于 2011-08-11 14:02:52
使用键值存储数据库
数据库是处理大于内存的数据集的最佳工具。将您的文件放入键值存储区(NoSQL DB,如CouchDB或Cassandra将非常好)。使用关键查询解决问题。
使用排序和二进制搜索
如果不能使用数据库,请根据键列对文件进行排序(这可以很容易地使用GNU排序)。无法使用密钥在nlogn时间访问您的文件。遍历最大的文件,并使用对其他文件的调用来处理每个记录。这样,您的磁盘读取很可能是ba缓存的。
发布于 2011-08-11 14:19:45
您可以将所有内容转储到数据库中(实际上,普通的SQL数据库很好),然后删除“不完整”的记录。
要对文件执行此操作,您可以这样做:
https://stackoverflow.com/questions/7027165
复制相似问题