Ordenar 20GB de datos

En el pasado tuve que trabajar con archivos grandes, en algún lugar en el rango de 0.1-3GB. No todas las 'columnas' eran necesarias, por lo que estaba bien ajustar los datos restantes en la RAM. Ahora tengo que trabajar con archivos en el rango de 1-20GB, y probablemente crecerán a medida que pase el tiempo. Eso es totalmente diferente porque ya no puede caber los datos en la RAM.

Mi archivo contiene varios millones de 'entradas' (he encontrado una con 30 mil entradas). En la entrada consta de aproximadamente 10 'columnas': una cadena (50-1000 caracteres unicode) y varios números. Tengo que ordenar los datos por 'columna' y mostrarlos. Para el usuario, solo las entradas principales (1-30%) son relevantes, el resto son datos de baja calidad.

Por lo tanto, necesito algunas sugerencias sobre en qué dirección salir. Definitivamente no quiero poner datos en una base de datos porque son difíciles de instalar y configurar para personas sin conocimientos de informática. Me gusta entregar un programa monolítico.

Mostrar los datos no es difícil en absoluto. Pero ordenar ... sin cargar los datos en la RAM, en PC normales (2-6GB de RAM) ... matará algunas buenas horas.

Estaba buscando un poco en MMF (archivos mapeados en memoria) pero este artículo de Danny Thorpe muestra que puede no ser adecuado:http://dannythorpe.com/2004/03/19/the-hidden-costs-of-memory-mapped-files/

Entonces, estaba pensando en cargar solo los datos de la columna que deben clasificarse en RAM Y un puntero a la dirección (en el archivo de disco) de la 'entrada'. Ordeno la 'columna' y luego uso el puntero para encontrar la entrada correspondiente a cada celda de columna y restaurar la entrada. La 'restauración' se escribirá directamente en el disco, por lo que no se necesitará RAM adicional.

PD: Estoy buscando una solución que funcione tanto en Lazarus como en Delphi porque Lazarus (en realidad FPC) tiene soporte de 64 bits para Mac. 64 bits significa más RAM disponible = clasificación más rápida.

Respuestas a la pregunta(5)

Su respuesta a la pregunta