Inserti seriali
Il modo più semplice sarebbe eseguire inserti
all'interno di un Sink.foreach
.
Supponendo che tu abbia utilizzato la generazione del codice dello schema e supponendo inoltre che la tua tabella sia denominata "NumberTable"
//Tables file was auto-generated by the schema code generation
import Tables.{Numbertable, NumbertableRow}
val numberTableDB = Database forConfig "NumberTableConfig"
Possiamo scrivere una funzione che esegua l'inserimento
def insertIntoDb(num : Int) =
numberTableDB run (Numbertable += NumbertableRow(num))
E quella funzione può essere collocata nel Lavello
val insertSink = Sink[Int] foreach insertIntoDb
Source(0 to 100) runWith insertSink
Inserti in batch
Puoi estendere ulteriormente la metodologia Sink raggruppando N inserti alla volta:
def batchInsertIntoDb(nums : Seq[Int]) =
numberTableDB run (Numbertable ++= nums.map(NumbertableRow.apply))
val batchInsertSink = Sink[Seq[Int]] foreach batchInsertIntoDb
Questo lavello in batch può essere alimentato da un Flow
che esegue il raggruppamento batch:
val batchSize = 10
Source(0 to 100).via(Flow[Int].grouped(batchSize))
.runWith(batchInsertSink)