用于排序大于可用内存(大约10千兆字节)并包含可变长度记录的文本文件的算法是什么?我见过的所有算法都假设1)数据适合内存,或者2)记录是固定长度的。但想象一下我想按“BirthDate”字段(第4个字段)排序的大型CSV文件:
Id,UserId,Name,BirthDate
1,psmith,"Peter Smith","1984/01/01"
2,dmehta,"Divya Mehta","1985/11/23"
3,scohen,"Saul Cohen","1984/08/19"
...
99999999,swright,"Shaun Wright","1986/04/12"
100000000,amarkov,"Anya Markov","1984/10/31"
我知道:
谢谢! ♥
答案 0 :(得分:3)
这类算法称为外部排序。我首先查看Wikipedia entry。它包含一些讨论和指示。
答案 1 :(得分:1)
建议以下资源:
合并排序:http://en.wikipedia.org/wiki/Merge_sort
“数字算法”,计算机程序设计艺术第2卷:Knuth:Addison Wesley:ISBN 0-201-03822-6(v.2)
答案 2 :(得分:0)
标准合并排序方法可行。常见架构是
答案 3 :(得分:0)
无需排序。读取文件ALL.CSV并将每个读取行每天附加到文件,如19841231.CSV。对于包含数据的每个现有日期,按数字顺序读取该CSV文件并将这些行附加到新文件。例如,可以通过多次处理原始文件或记录ALL.CSV文件中实际发生的日期来进行优化。
因此,应将包含“1985/02/28”的行添加到文件19850228.CSV中。在将文件19850227.CSV附加到NEW.CSV之后,文件19850228.CSV应附加到NEW.CSV。数字顺序避免使用所有排序算法,尽管它可能会折磨文件系统。
实际上,文件ALL.CSV可以按文件分割,例如,年份。 1984.CSV,1985.CSV,等等。