假设我有四个大文件(太大而无法单独存入内存),这些文件包含我需要处理的信息。我打算从文件#1中的每一行生成一个应用程序级别对象(Record)。文件2-4各自具有组成该Record对象所需的附加信息。例如,文件结构可能如下:
文件#1:
密钥,说明
文件#2:
键,元数据,大小
文件#3:
来源,费率,关键
文件#4:
key,startDate,endDate
每个文件都有一个列(一行中已知位置),表示唯一键。此密钥在文件之间共享,但不保证任何一个文件中存在的每个密钥都存在于其他文件中,这意味着我们只会处理所有密钥中存在的密钥子集。文件行未排序。您可以通过处理这些文件来设计算法来生成应用级对象吗?
答案 0 :(得分:2)
数据库是处理大于内存的数据集的最佳工具。将您的文件放入键值存储(像CouchDB或Cassandra这样的NoSQL DB会很棒)。使用关键查询解决您的问题。
如果您无法使用数据库,请根据键列对文件进行排序(这可以使用GNU sort轻松完成)。您可以使用密钥在nlogn
时间内访问您的文件。迭代最大的文件,并使用对其他文件的调用处理每个记录。通过这种方式,您的磁盘读取可能会被缓存。
答案 1 :(得分:1)
您可以将所有内容转储到数据库中(实际上,一个普通的SQL就可以了),然后删除“不完整”的记录。
要按文件执行,您可以这样做: