Serielle indlæg
Den nemmeste måde ville være at lave indsættelser
inden for en Sink.foreach
.
Forudsat at du har brugt generering af skemakode og yderligere forudsat at din tabel hedder "NumberTable"
//Tables file was auto-generated by the schema code generation
import Tables.{Numbertable, NumbertableRow}
val numberTableDB = Database forConfig "NumberTableConfig"
Vi kan skrive en funktion, der udfører indsættelsen
def insertIntoDb(num : Int) =
numberTableDB run (Numbertable += NumbertableRow(num))
Og den funktion kan placeres i vasken
val insertSink = Sink[Int] foreach insertIntoDb
Source(0 to 100) runWith insertSink
Batch-indlæg
Du kan udvide Sink-metoden yderligere ved at samle N indstik ad gangen:
def batchInsertIntoDb(nums : Seq[Int]) =
numberTableDB run (Numbertable ++= nums.map(NumbertableRow.apply))
val batchInsertSink = Sink[Seq[Int]] foreach batchInsertIntoDb
Denne batchede vask kan fodres med en Flow
som udfører batchgrupperingen:
val batchSize = 10
Source(0 to 100).via(Flow[Int].grouped(batchSize))
.runWith(batchInsertSink)