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 y timeout: :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.

  1. Elaborar creador del archivo input.txt en Elixir con Concurrencia.

  2. Elaborar creador del archivo output.csv en Elixir con Concurrencia.

  3. Elaborar creador del archivo output.py.csv en Python sin Concurrencia (Secuencial).

  4. Elaborar informe y presentación en video comparando ambas soluciones y presentando los descubrimientos.