Inserts en série
Le plus simple serait de faire des insertions
dans un Sink.foreach
.
En supposant que vous avez utilisé la génération de code de schéma et en supposant en outre que votre table s'appelle "NumberTable"
//Tables file was auto-generated by the schema code generation
import Tables.{Numbertable, NumbertableRow}
val numberTableDB = Database forConfig "NumberTableConfig"
Nous pouvons écrire une fonction qui fait l'insertion
def insertIntoDb(num : Int) =
numberTableDB run (Numbertable += NumbertableRow(num))
Et cette fonction peut être placée dans le lavabo
val insertSink = Sink[Int] foreach insertIntoDb
Source(0 to 100) runWith insertSink
Insertions groupées
Vous pouvez étendre davantage la méthodologie Sink en regroupant N insertions à la fois :
def batchInsertIntoDb(nums : Seq[Int]) =
numberTableDB run (Numbertable ++= nums.map(NumbertableRow.apply))
val batchInsertSink = Sink[Seq[Int]] foreach batchInsertIntoDb
Ce Sink batch peut être alimenté par un Flow
qui effectue le regroupement par lots :
val batchSize = 10
Source(0 to 100).via(Flow[Int].grouped(batchSize))
.runWith(batchInsertSink)