Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment les flux réactifs sont-ils utilisés dans Slick pour insérer des données

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)