Proyecto 2: Concurrencia
Utilizando el proyecto base en Elixir (revisar github) se debe generar un archivo de un millón de registros (1.000.000)
con datos aleatorios separados por un símbolo |
.
Los datos son:
Teléfono (9 números incluyendo el prefixo 569), Nombre 1, Nombre 2, Apellido 1, Apellido 2, Email, RUT (DNI).
La generación de este archivo debe tomar máximo 6 minutos más una desviación estándar de 60 segundos.
Ejemplo:
$ mix input
56983728372|José|Miguel|Carrera|Verdugo|jmc@husares.chile|1-9
Luego se debe leer este archivo usando el proyecto base en Elixir y generar un archivo CSV ordenado de la siguiente forma: Nombre Completo, RUT (DNI), Email, Teléfono. Este output puede tomar cerca de 60 minutos.
Ejemplo:
$ mix output
Nombre Completo, RUT (DNI), Email, Teléfono
José Miguel Carrera Verdugo,1-9,jmc@husares.chile,56983728372
Para ambas tareas se debe utilizar las capacidades de concurrencia de Elixir.
Tips
-
Para obtener los elementos de una posición específica usar:
Enum.at(elementos, posicion)
-
Usar las opciones de
max_concurrency
ytimeout: :infinity
-
Al finalizar usar un Log que anuncie el término del proceso.
|> then(fn _ ->
Logger.info("Generation Complete")
end)
Evaluación
Se debe elaborar un script en Python que lea el archivo input.txt y genere el archivo output.py.csv de forma secuencial. Evaluar ¿Cúanto tiempo demora en comparación?. ¿Qué dificultades se encontraron?. ¿Qué diferencias hay con el archivo generado con Elixir y Concurrencia?. Realizar un informe comparativo sobre la importancia de la concurrencia y como un lenguaje de programación concurrente ayuda en resolver problemas de alta escala.
-
Elaborar creador del archivo input.txt en Elixir con Concurrencia.
-
Elaborar creador del archivo output.csv en Elixir con Concurrencia.
-
Elaborar creador del archivo output.py.csv en Python sin Concurrencia (Secuencial).
-
Elaborar informe y presentación en video comparando ambas soluciones y presentando los descubrimientos.