Performance 如何对非常大的日志文件进行排序,因为它太大而无法加载到主内存中?

Performance 如何对非常大的日志文件进行排序,因为它太大而无法加载到主内存中?,performance,data-structures,Performance,Data Structures,考虑到我有一个非常大的日志文件,大到无法加载到我的主存中,我想以某种方式对其进行排序,最推荐的排序技术和算法是什么?如果您有GNU排序,请使用它。它知道如何处理大文件。有关详细信息,请参阅关于Unix SE的解答。当然,您需要足够的可用磁盘空间。如果您有GNU排序,请使用它。它知道如何处理大文件。有关详细信息,请参阅关于Unix SE的解答。当然,您需要足够的可用磁盘空间。这取决于操作系统。如果在Linux/Unix上,可以使用sed命令打印特定行 sed -n -e 120p /var/log

考虑到我有一个非常大的日志文件,大到无法加载到我的主存中,我想以某种方式对其进行排序,最推荐的排序技术和算法是什么?

如果您有GNU
排序
,请使用它。它知道如何处理大文件。有关详细信息,请参阅关于Unix SE的解答。当然,您需要足够的可用磁盘空间。

如果您有GNU
排序
,请使用它。它知道如何处理大文件。有关详细信息,请参阅关于Unix SE的解答。当然,您需要足够的可用磁盘空间。

这取决于操作系统。如果在Linux/Unix上,可以使用sed命令打印特定行

sed -n -e 120p /var/log/syslog
这将打印系统日志文件的第120行。你也可以用头

head -n 15 /var/log/syslog
它将打印syslog文件的前15行。还有grep、tail等用于查看大文件的部分。有关这些和更多信息,请参见此处:


对于Windows,这取决于操作系统。如果在Linux/Unix上,可以使用sed命令打印特定行

sed -n -e 120p /var/log/syslog
这将打印系统日志文件的第120行。你也可以用头

head -n 15 /var/log/syslog
它将打印syslog文件的前15行。还有grep、tail等用于查看大文件的部分。有关这些和更多信息,请参见此处:


对于Windows,如果您正在寻找算法,则可以应用


从本质上讲,您可以将数据分割成更小的数据块,并对每个数据块进行排序。然后取两个已排序的块并合并它们(这可以通过流式方式完成,只需取两个块中的最小值并递增),这将产生一个更大的块。继续这样做,直到合并了所有块

如果您正在寻找算法,您可以应用


从本质上讲,您可以将数据分割成更小的数据块,并对每个数据块进行排序。然后取两个已排序的块并合并它们(这可以通过流式方式完成,只需取两个块中的最小值并递增),这将产生一个更大的块。继续这样做,直到合并了所有块

可能重复的可能重复的:可能重复的可能重复的:这是问题的答案吗?这是问题的答案吗?普通合并排序不起作用。块在每次迭代中都会变大,因此经过一段时间后,它们就不能存储在内存中了。正确的,您必须将它们存储在磁盘上。使用基本方法时,您需要两倍的磁盘空间,但如果日志存储在最大大小为X的文件中,则您最多需要2*X的额外磁盘空间,即使是合并最后和最大的2个数据块。普通合并排序也无法完成此任务。块在每次迭代中都会变大,因此经过一段时间后,它们就不能存储在内存中了。正确的,您必须将它们存储在磁盘上。使用基本方法时,您需要两倍的磁盘空间,但如果日志存储在最大大小为X的文件中,则您最多需要2*X的额外磁盘空间,即使是合并最后和最大的2个块。