Example for parallel import of somehow big CSV files
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
lib
test
.gitignore
README.md
mix.exs
mix.lock

README.md

CsvImporter

See blog post "Parallel processing of CSV in Elixir and Golang"

Ziel der Übung ist zu prüfen, wie in Elixir massiv große CSV Datenbestände parallel und zügig importiert werden können.

Testdaten generieren

Mix Task generate mit 2 Parametern:

mix generate test.csv 10000

Lesestoff:

CSV einlesen

Mix Task import mit 1 Parameter:

mix import test.csv

Nutzt optional Paket csv - derzeit zu Demozwecke nicht eingebunden:

Parallelität mit parallel_stream

Tod-einfach Parallelverarbeitung mit 2x Cores Pipes

https://github.com/beatrichartz/parallel_stream

Testszenario Performance-Test

  • Datei enthält 1000 Testdatensätze
  • Je Zeile wird ein INSERT-SQL gefaket und 10ms gewartet
  • Durchlauf mittels Stream.map -> 12 Sek.
  • Durchlauf mittels ParallelStream.map -> 1,2 Sek.

CSV Testdaten generieren mit Faker

CSV Testdateien mit beliebig viel Inhalt:

mix generate test100k.csv 100000

Nutzt faker Paket um Inhalt zu erzeugen.

(Noch bessere Testdaten mit Blacksmith: http://icanmakeitbetter.com/elixir-testing-blacksmith/)