"Out-of-core" se refiere a algoritmos y técnicas que permiten a un sistema procesar o manipular conjuntos de datos que exceden la capacidad de la memoria principal (RAM) disponible. En lugar de cargar todo el dataset en RAM, los algoritmos out-of-core operan sobre porciones del dataset, cargándolas y descargándolas del almacenamiento secundario (como discos duros o SSDs) según sea necesario. Esto implica una gestión cuidadosa de I/O y la optimización de accesos a disco para minimizar la latencia y maximizar el rendimiento, a menudo utilizando estrategias como el "chunking", "paging" o "streaming" de datos.
Numerosos sistemas y herramientas implementan técnicas out-of-core. Apache Spark utiliza "spilling" a disco cuando los datos intermedios de las transformaciones no caben en memoria. Bases de datos como PostgreSQL y MySQL emplean estrategias out-of-core para operaciones como "sorts" o "joins" en tablas grandes, escribiendo datos temporales a disco. Bibliotecas de computación científica como Dask en Python permiten procesar "arrays" y "dataframes" que no caben en RAM, distribuyendo el cómputo y gestionando la carga/descarga de bloques de datos. Los "compilers" también pueden usar técnicas out-of-core para manejar grandes archivos fuente o tablas de símbolos.
Para un arquitecto, comprender las capacidades out-of-core es crucial para diseñar sistemas escalables y robustos. Permite procesar volúmenes masivos de datos sin requerir cantidades prohibitivas de RAM, lo que impacta directamente en el costo de infraestructura y la viabilidad de ciertas operaciones. La decisión de implementar o utilizar soluciones out-of-core implica un "trade-off" entre el rendimiento (mayor latencia debido a I/O de disco) y la capacidad de manejar datasets ilimitados. Un arquitecto debe evaluar si la complejidad adicional y la penalización de rendimiento son aceptables frente a los beneficios de escalabilidad, y seleccionar las herramientas o diseñar los algoritmos que gestionen eficientemente los accesos a disco y minimicen los cuellos de botella de I/O.