Java 大型文件排序方法研究

Java 大型文件排序方法研究,java,multithreading,sorting,unix,Java,Multithreading,Sorting,Unix,我决定,作为一个辅助项目,尝试编写一个大文件的排序方法。不幸的是,我现在只有我的4芯笔记本电脑可用于研究。对于数据,我只对每条记录使用字符。典型的记录如下所示: AAAAM_EL,QMOIXYGB,LAD_HNTU,BYFKKHWY,AVVCIXMC,KWVGCIUB,YWD_LQNU,HDTKUFK_,W_E_LT_M,MW_HEQKE,VHEDHK_U,SAIUAVGH,DQTSMK_L,RNUBFKUX,OXEVMHNR,EMEEJHJB,BKYQWYAP,MKMWKAAT,MIAEDTD

我决定,作为一个辅助项目,尝试编写一个大文件的排序方法。不幸的是,我现在只有我的4芯笔记本电脑可用于研究。对于数据,我只对每条记录使用字符。典型的记录如下所示:

AAAAM_EL,QMOIXYGB,LAD_HNTU,BYFKKHWY,AVVCIXMC,KWVGCIUB,YWD_LQNU,HDTKUFK_,W_E_LT_M,MW_HEQKE,VHEDHK_U,SAIUAVGH,DQTSMK_L,RNUBFKUX,OXEVMHNR,EMEEJHJB,BKYQWYAP,MKMWKAAT,MIAEDTDY,RANAGVOM
所有字段都是随机生成的。但是,我只是使用完整的记录作为键进行排序。包含100万条记录的文件等于1.81亿字节。我注意到我的笔记本电脑上有以下内容:

  • 使用unixshell并对该文件执行unixsort命令,对该文件进行排序并将其作为另一个文件写回磁盘大约需要15到22秒
  • 我尝试将unix sort命令与parallel=cores选项一起使用,但在widows bash中不起作用
  • 使用我用java实现的快速排序算法:将文件读入内存、排序并写回新文件需要3秒钟
  • 使用我实现的实验性多线程java应用程序所需的时间与“unix排序”命令所需的时间相同

  • 是否有人有一些可靠的近似时间来对这样大小的文件进行排序?一旦我研究了目前已经实现的多线程方法,我计划对更大的文件进行排序。我相信这需要很多改进。然而,我需要一些好的目标时间来尝试和实现。有人知道这样的目标时间吗。网络上的任何例子,或任何分类研究论文,都会给我一个提示,告诉我需要多少时间

    我不知道unix排序是否与gnu排序相同。gnu排序是一个大型程序,主要是由于所有的命令行选项。Mutli线程只在读取大“块”数据、对块进行排序并为每个块写入一个临时文件的初始过程中使用。如果有足够的ram,每个数据块可以达到1GB左右。然后,它对临时文件重复执行16路(默认为16路,可以覆盖)合并,直到确定达到最终合并步骤,在这种情况下,它将最终的临时文件集合并到指定的输出文件。继续,对于181 MB的文件(假设有足够的ram),gnu排序只需将文件作为单个块读取,对块进行排序,然后编写一个排序文件,而不涉及外部合并排序。