2013-11-22 58 views
0

我在磁盤上以隨機順序存儲了大量(百萬數百萬)固定大小的值。我有不同的順序存儲在內存中的相同的一組值。我需要按照它們在內存中的順序將這些值存儲在磁盤上。面臨的挑戰是:我需要在任何時候至少保留一個磁盤上每個值的副本 - 即它需要持久。在磁盤上對磁盤上的值進行持久重新排序

我有相當多的內存可以使用(值只佔60%左右),很多臨時存儲空間,但只有非常少量的空間,足夠少於一百萬的價值。

給定磁盤上的值,我可以非常快速地在內存中找到它。但相反的情況並非如此,鑑於內存價值,在磁盤上找到它非常緩慢。

鑑於這些限制,將數值的順序從內存傳輸到磁盤的最佳算法是什麼?

回答

0

聽起來就像你有一個排序問題,其中你的比較器是RAM中元素的順序(元素x比元素y'更大',如果x出現在RAM中y之後)。

可以使用external sort來解決。

請注意,如果您允許重複,則需要執行一些更多的處理以確保您的比較器是有效的(可以通過枚舉相同的值併爲每個副本分配'dupe_id'來解決 - 兩者都在RAM中和磁盤上)