Shuffle externo: embaralhando uma grande quantidade de dados sem memória

Eu estou procurando uma maneira de embaralhar uma grande quantidade de dados que não cabe na memória (aprox. 40GB).

Eu tenho cerca de 30 milhões de entradas, de tamanho variável, armazenadas em um arquivo grande. Conheço as posições inicial e final de cada entrada nesse arquivo. Eu preciso embaralhar esses dados que não se encaixam na RAM.

A única solução que pensei é embaralhar uma matriz contendo os números de1 paraN, OndeN é o número de entradas, com oAlgoritmo Fisher-Yates e copie as entradas em um novo arquivo, de acordo com este pedido. Infelizmente, esta solução envolve muitas operações de busca e, portanto, seria muito lenta.

Existe uma solução melhor para embaralhar uma grande quantidade de dados com distribuição uniforme?

questionAnswers(6)

yourAnswerToTheQuestion