Mysql
 sql >> база данни >  >> RDS >> Mysql

Как се използват реактивните потоци в Slick за вмъкване на данни

Серийни вложки

Най-лесният начин би бил да направите вмъквания в рамките на Sink.foreach .

Ако приемем, че сте използвали генериране на код за схема и освен това да приемем, че вашата таблица се казва "NumberTable"

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

val numberTableDB = Database forConfig "NumberTableConfig"

Можем да напишем функция, която извършва вмъкването

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

И тази функция може да бъде поставена в мивката

val insertSink = Sink[Int] foreach insertIntoDb

Source(0 to 100) runWith insertSink

Пакетни вложки

Можете допълнително да разширите методологията на Sink, като групирате N вмъквания наведнъж:

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

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

Тази партидна мивка може да се захранва от Flow който извършва групирането на партиди:

val batchSize = 10

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавяне на допълнителна стойност на колона с INSERT ... SELECT в MySQL

  2. ПОРЪЧАЙТЕ първо по азбука, след това по номер

  3. изберете всички колони, които не са в друга таблица laravel 5.5

  4. Не може да се стартира mysql сървъра в ubuntu

  5. Най-бързият начин за изхвърляне на обект от речник на Python (dict) в MySQL таблица?