sql >> Database >  >> RDS >> Mysql

Hoe worden reactieve streams in Slick gebruikt voor het invoegen van gegevens?

Seriële bijlagen

De gemakkelijkste manier is om inserts te doen binnen een Sink.foreach .

Ervan uitgaande dat u de schemacodegeneratie hebt gebruikt en verder ervan uitgaande dat uw tabel "NumberTable" heet

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

val numberTableDB = Database forConfig "NumberTableConfig"

We kunnen een functie schrijven die de invoeging doet

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

En die functie kan in de gootsteen worden geplaatst

val insertSink = Sink[Int] foreach insertIntoDb

Source(0 to 100) runWith insertSink

Batched bijlagen

Je zou de Sink-methodologie verder kunnen uitbreiden door N inserts tegelijk te batchen:

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

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

Deze batched Sink kan worden gevoed door een Flow wat doet de batchgroepering:

val batchSize = 10

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


  1. Waarom retourneert dit Resource-id #2?

  2. Integreer Firebase met PHP voor realtime communicatie

  3. waar mysql fulltext stopwoordenlijsten bewerken?

  4. Mysql - Hoe de opgeslagen procedure af te sluiten/af te sluiten?