如果我有一个不适合内存的关系(SQL),我想使用TPMMS(两遍多路合并排序方法)对关系进行排序。我如何将子表中的表(以及多少)除以内存并合并它们? 假设我正在使用C#。
答案 0 :(得分:8)
我没有追求目前两通道多路合并排序的定义,但是“外部排序”理论(数据太大而无法适应内存)几乎是标准的。任何体面的算法书都会涵盖它;在许多其他人中,你可以看看Knuth,Sedgewick或(对于软件考古学家)Kernighan&普劳格Software Tools。
基本技术很简单:
所有标准都非常标准 - 但是有一些挑剔的细节可以做对。
在AT& T的Unix系统读物第二卷中有一篇很好的文章称为“构建工作排序例程中的理论与实践”,如果你认真学习如何处理外部排序,你应该找到并阅读。但是,当你阅读它时,请记住机器自写入以来发生了巨大的变化,主内存为千兆字节(而不是兆字节)和太字节的磁盘空间(或SSD - 而不是兆字节)。