a***a 发帖数: 149 | 1 硬盘有个文件,1G左右,有千万行数据,每行数据大概格式为:
user id, user name, user age, etc;
现在文件中的数据是按照 user id 排列的,想重新生成一个文件由 user age 排序。
请问该如何实现最好,机器的内存在 1.5G左右。 java 环境。
我感觉最笨的方法放到 Mysql 里面,让 database 帮忙做。 | T**********n 发帖数: 480 | 2 内存比数据大直接在内存里排不就行了?
【在 a***a 的大作中提到】 : 硬盘有个文件,1G左右,有千万行数据,每行数据大概格式为: : user id, user name, user age, etc; : 现在文件中的数据是按照 user id 排列的,想重新生成一个文件由 user age 排序。 : 请问该如何实现最好,机器的内存在 1.5G左右。 java 环境。 : 我感觉最笨的方法放到 Mysql 里面,让 database 帮忙做。
| a***a 发帖数: 149 | 3 还得留点给操作系统不是?
【在 T**********n 的大作中提到】 : 内存比数据大直接在内存里排不就行了?
| N**D 发帖数: 10322 | 4 unix sort
【在 a***a 的大作中提到】 : 硬盘有个文件,1G左右,有千万行数据,每行数据大概格式为: : user id, user name, user age, etc; : 现在文件中的数据是按照 user id 排列的,想重新生成一个文件由 user age 排序。 : 请问该如何实现最好,机器的内存在 1.5G左右。 java 环境。 : 我感觉最笨的方法放到 Mysql 里面,让 database 帮忙做。
| a****y 发帖数: 1035 | 5 merge sort
【在 a***a 的大作中提到】 : 硬盘有个文件,1G左右,有千万行数据,每行数据大概格式为: : user id, user name, user age, etc; : 现在文件中的数据是按照 user id 排列的,想重新生成一个文件由 user age 排序。 : 请问该如何实现最好,机器的内存在 1.5G左右。 java 环境。 : 我感觉最笨的方法放到 Mysql 里面,让 database 帮忙做。
| w***g 发帖数: 5958 | 6 给0-N岁分别开一个文件,然后往各个文件里写,最后再合并。也算是merge sort吧。
【在 a****y 的大作中提到】 : merge sort
| e**a 发帖数: 26 | 7 你这个好像叫bucket sort. O(n)的,比merge sort还好
【在 w***g 的大作中提到】 : 给0-N岁分别开一个文件,然后往各个文件里写,最后再合并。也算是merge sort吧。
| c*****e 发帖数: 210 | | f*****y 发帖数: 444 | 9 this should work for you, but you have to figure out how to use it ;-)
http://code.activestate.com/recipes/546524/ | c******u 发帖数: 105 | 10 1.5G其实够了,毕竟还有虚拟内存吗,有Cache也不会有太多硬盘读取。但是运行时候jvm的memory估计要调高。分开文件最后再merge我觉得很好。安全又直白。 | C*******n 发帖数: 56 | 11 用unix命令,如果不行,让DB帮忙,还是不行,想自己写段程序,用外排序.
但注意,最好使用java.nio中的MappedByteBuffer来读取文件,以前,用标准java IO在
400M的文本文件查找关键字段,大概用4分钟的时间(普通笔记本,512内存),换了用NIO,
同样的代码,好像不到半分钟就可以了. |
|