Inserciones en serie
La forma más fácil sería hacer inserciones
dentro de un Sink.foreach
.
Suponiendo que haya utilizado la generación de código de esquema y suponiendo además que su tabla se llame "NumberTable"
//Tables file was auto-generated by the schema code generation
import Tables.{Numbertable, NumbertableRow}
val numberTableDB = Database forConfig "NumberTableConfig"
Podemos escribir una función que haga la inserción
def insertIntoDb(num : Int) =
numberTableDB run (Numbertable += NumbertableRow(num))
Y esa función se puede colocar en el fregadero
val insertSink = Sink[Int] foreach insertIntoDb
Source(0 to 100) runWith insertSink
Inserciones por lotes
Puede ampliar aún más la metodología Sink agrupando N inserciones a la vez:
def batchInsertIntoDb(nums : Seq[Int]) =
numberTableDB run (Numbertable ++= nums.map(NumbertableRow.apply))
val batchInsertSink = Sink[Seq[Int]] foreach batchInsertIntoDb
Este sumidero por lotes puede ser alimentado por un Flow
que hace la agrupación por lotes:
val batchSize = 10
Source(0 to 100).via(Flow[Int].grouped(batchSize))
.runWith(batchInsertSink)