Así que aquí está el por qué nunca me fue bien en la clase de algoritmos.
Si los datos eventuales encajarán en DRAM, simplemente asigne el tamaño máximo de la lista y use una matriz. Obtener datos en caché será más rápido que extraer datos de un nodo de cómputo remoto.
Pero, ¿qué pasa si los datos son demasiado grandes para DRAM?
- ¿Es una buena idea obtener un doctorado en Data Science si quiero trabajar en la industria?
- ¿Qué problemas empresariales y sociales causa el consumo de energía del centro de datos?
- Dados los datos, ¿qué pasos se toman para elegir qué distribución (poisson, normal, gamma, beta, etc.) deben representar los datos?
- ¿Qué universidades son mejores para la ciencia de datos?
- ¿Qué cosas necesito saber antes de ingresar al análisis de datos?
En lugar de salir al disco, probablemente solo desee que una matriz abarque toda la DRAM de su clúster. En LLNL, eso te llevará al rango de petabytes (1000 terabytes). Cada nodo cuida un subconjunto de la matriz, y puede hacer un poco de equilibrio de carga si su métrica es recuperaciones o agregados por segundo.
Pero, ¿qué pasa si sus datos son más grandes que eso?
Ahora tienes que ir a un sistema de archivos paralelo como lustre. Eso te llevará hasta 512 petabytes. Y ahora las preguntas se convierten en “¿Qué estructura de datos utiliza para volver a implementar un sistema de archivos de grado gubernamental que está optimizado para lecturas y anexos?” Eso será un poco más difícil.
Pero solo estamos a la altura de los petabytes. ¿Cómo cambia su solución si está trabajando con exabytes o zettabytes? ¿Qué tan rápido entran tus apéndices? Cuando tus clientes están haciendo lecturas, ¿cuánta localidad esperas?
Y algunas preguntas más:
¿Cuánta fiabilidad necesitas en el sistema? ¿Es suficiente una incursión? ¿O necesita inventar una estructura de datos que sea aún más rigurosa que eso? (Tenga en cuenta que el tiempo medio entre fallas probablemente será del orden de minutos una vez que se amplíe lo suficiente).
¿Está optimizando el tiempo medio de acceso o está tratando de cumplir con un SLA? ¿O es esto para la computación dura en tiempo real donde nunca puedes llegar tarde?
¿Cuáles son las características de los datos? ¿La compresión va a ser útil?
¿Cuál es la penalización si una lectura es incorrecta o se cae una escritura? ¿Se puede implementar la compresión con pérdida o se pueden usar algoritmos probabilísticos (filtros Bloom)?
Su libro de texto de algoritmos no entra en ninguno de esos detalles desagradables. Si estás estudiando algoritmos como disciplina matemática, está bien. Sin embargo, si está tratando de construir sistemas reales, debe prestar más atención a los coeficientes de lo que sugiere su libro de texto.