sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bruges reaktive strømme i Slick til at indsætte data

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)


  1. Beregn alder baseret på fødselsdato

  2. Top måder at øge databaseeffektiviteten

  3. Hvordan opbevares WooCommerce-kuponer i databasen?

  4. Opsætning af MySQL InnoDB Cluster med MySQL Shell (plus MySQL Router)