PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

foreach %dopar% + RPostgreSQL

Lebih efisien untuk membuat koneksi database sekali per pekerja, daripada sekali per tugas. Sayangnya, mclapply tidak menyediakan mekanisme untuk menginisialisasi pekerja sebelum menjalankan tugas, jadi tidak mudah untuk melakukan ini menggunakan backend doMC, tetapi jika Anda menggunakan backend doParallel, Anda dapat menginisialisasi pekerja menggunakan clusterEvalQ. Berikut ini contoh cara menyusun ulang kode:

library(doParallel)
cl <- makePSOCKcluster(detectCores())
registerDoParallel(cl)

clusterEvalQ(cl, {
  library(DBI)
  library(RPostgreSQL)
  drv <- dbDriver("PostgreSQL")
  con <- dbConnect(drv, dbname="nsdq")
  NULL
})

id.qed.foreach <- foreach(i=1588:3638, .inorder=FALSE,
                          .noexport="con",
                          .packages=c("DBI", "RPostgreSQL")) %dopar% {
  lst <- eval(expr.01)  #contains the SQL query which depends on 'i'
  qry <- dbSendQuery(con, lst)
  tmp <- fetch(qry, n=-1)
  dt <- dates.qed2[i]
  list(date=dt, idreuters=tmp$idreuters)
}

clusterEvalQ(cl, {
  dbDisconnect(con)
})

Karena doParallel dan clusterEvalQ menggunakan objek cluster yang sama cl , loop foreach akan memiliki akses ke objek koneksi database con saat menjalankan tugas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membulatkan rata-rata menjadi 2 tempat desimal di PostgreSQL?

  2. Rails:Memasang permata PG di OS X - kegagalan membangun ekstensi asli

  3. Ikat param array ke kueri asli

  4. Ikhtisar Berbagai Node Paket Tambahan di PostgreSQL

  5. PostgreSQL - Menulis sql dinamis dalam prosedur tersimpan yang mengembalikan kumpulan hasil