2013-11-22 126 views
0

我在磁盘上以随机顺序存储了大量(百万数百万)固定大小的值。我有不同的顺序存储在内存中的相同的一组值。我需要按照它们在内存中的顺序将这些值存储在磁盘上。面临的挑战是:我需要在任何时候至少保留一个磁盘上每个值的副本 - 即它需要持久。在磁盘上对磁盘上的值进行持久重新排序

我有相当多的内存可以使用(值只占60%左右),很多临时存储空间,但只有非常少量的空间,足够少于一百万的价值。

给定磁盘上的值,我可以非常快速地在内存中找到它。但相反的情况并非如此,鉴于内存价值,在磁盘上找到它非常缓慢。

鉴于这些限制,将数值的顺序从内存传输到磁盘的最佳算法是什么?

回答

0

听起来就像你有一个排序问题,其中你的比较器是RAM中元素的顺序(元素x比元素y'更大',如果x出现在RAM中y之后)。

可以使用external sort来解决。

请注意,如果您允许重复,则需要执行一些更多的处理以确保您的比较器是有效的(可以通过枚举相同的值并为每个副本分配'dupe_id'来解决 - 两者都在RAM中和磁盘上)