sql >> Databasteknik >  >> RDS >> Mysql

Hur används reaktiva strömmar i Slick för att infoga data

Serial Inserts

Det enklaste sättet skulle vara att göra infogningar inom en Sink.foreach .

Förutsatt att du har använt generering av schemakoder och vidare förutsatt att din tabell heter "NumberTable"

//Tables file was auto-generated by the schema code generation
import Tables.{Numbertable, NumbertableRow} 

val numberTableDB = Database forConfig "NumberTableConfig"

Vi kan skriva en funktion som gör insättningen

def insertIntoDb(num : Int) = 
  numberTableDB run (Numbertable += NumbertableRow(num))

Och den funktionen kan placeras i diskbänken

val insertSink = Sink[Int] foreach insertIntoDb

Source(0 to 100) runWith insertSink

Satsade inlägg

Du kan utöka Sink-metoden ytterligare genom att satsa N inlägg åt gången:

def batchInsertIntoDb(nums : Seq[Int]) = 
  numberTableDB run (Numbertable ++= nums.map(NumbertableRow.apply))

val batchInsertSink = Sink[Seq[Int]] foreach batchInsertIntoDb

Denna batchade Sink kan matas av ett Flow som gör batchgrupperingen:

val batchSize = 10

Source(0 to 100).via(Flow[Int].grouped(batchSize))
                .runWith(batchInsertSink)


  1. Hur man använder MySQL användarvariabler med ADO.NET

  2. mysqli:kan det förbereda flera frågor i ett uttalande?

  3. Hur man extraherar en delsträng i MySQL

  4. Importera CSV-fil till SQL Server