在很多应用场景中,我们都会面临着排序需求,可以说是见怪不怪。我们也看过许多的排序算法:从最简单的冒泡排序、选择排序,到稍微好点的插入排序、希尔排序,再到有点理论的堆排序、快速排序,再到高级的归并排序、桶排序、基数排序。
而实际工作中我们可能用到的排序有哪些呢?而且,大部分时序,相信大家都是使用一个现有库API直接就完成了排序功能。所以,讲真,大家还真不一定会很好排序。
不过本文的目的不是基础排序算法,而是如何处理数据量的文件的内容排序问题?
1. 多大的文件算大文件?多大的文件算大文件?这是个定义的问题,当我每天处理的都是几百几千的数据,那么我遇到几万的数据后,我可以认为这个数据量是大的。
但总体来说,我们还是需要定义一个量级的,不然无法评估处理能力问题。
比如我们定义超过200M的文件算大文件可以不?我们定义超过5000w行的数据算大文件可以不?
好了,基于这样大的数据量的时候,也许我们就不能简单的调用几个库函数就解决问题了,至少你load到内存也将存在一定的风险了。
所以,是时候想想优化的事了!
2. 如何利用好现有的工具?
针对一些问题,我们可以自己做,也可以找别人帮忙做。具体谁来做,这是个问题!
比如,你自己花个一两天的时间,写了个排序算法,搞定了。但是,你能保证你的稳定性吗?你能经受住生产环境复杂的环境考验吗?
再比如,你可以现有的工具进行操作,如果有人提供了稳定的api函数供调用的话,你可以这么干。如果你的服务是跑在linux环境下,那么,我们有必要试一下系统提供的排序功能。 sort . 这工具绝对是经过无数的考验的,可以放心使用。它也有丰富的参数供选择,这对我们的日常工作非常有帮助,但对于一个普通的排序也许我们并不需要。
比如最简单的,自然排序:
sort 1-merged.txt -o 1-sorted.txt