我有一个5gig的文本文件,需要按字母顺序排序 什么是最好的算法?
约束:
速度 - 尽可能快
内存 - 运行Windows XP的1 Gig Ram的Pc
答案 0 :(得分:11)
我通常使用sort
linux命令对文本文件> 2GB进行排序。通常需要15 - 30秒,具体取决于服务器负载。
只要这样做,就不会想你想的那么久。
更新由于您使用的是Windows XP,因此可以在UnxUtils中获取sort命令。我使用的那个可能比linux版本更多,而且速度同样快。
巨大文件的瓶颈真的是磁盘速度..我的服务器上面有一个快速的sata raid。如果您的计算机是台式机(或笔记本电脑),则7200 RPM(或5400)RPM IDE驱动器将为作业添加几分钟。
答案 1 :(得分:5)
对于文本文件sort
,至少Linux和其他版本的GNU Coreutils版本的工作速度非常快。
查看--buffer-size
及相关选项,如果--temporary-directory
目录太小,请设置/tmp
。
或者,如果您真的担心可能需要多长时间,可以将文件拆分为较小的块,然后单独排序,然后将它们合并在一起(使用sort --merge
)。对每个块进行排序可以在不同的系统上并行完成。
答案 2 :(得分:1)
我想说的是拿一小部分数据然后尝试一下,看看哪种方法效果最好,然后再去做。 This article might help you get started
答案 3 :(得分:1)
排序的参数是什么?你有时间限制或空间限制吗?文件已经接近订购了多少?你必须一次性完成吗?
答案 4 :(得分:0)
合并排序是您最好的选择。
答案 5 :(得分:0)
如何使用批量插入命令将数据导入SQL Server?
这可以非常快速地将数据导入SQL Server,然后允许您根据导入的数据执行各种有效的SQL排序。
您还可以使用SQL Server SSIS将其设置为自动化任务。