PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

foreach% dopar% + RPostgreSQL

Sẽ hiệu quả hơn nếu tạo kết nối cơ sở dữ liệu một lần cho mỗi nhân viên, thay vì một lần cho mỗi tác vụ. Thật không may, mclapply không cung cấp cơ chế khởi tạo các worker trước khi thực thi các tác vụ, vì vậy không dễ thực hiện việc này bằng cách sử dụng doMC backend, nhưng nếu bạn sử dụng doParallel backend, bạn có thể khởi tạo worker bằng cách sử dụng clusterEvalQ. Dưới đây là một ví dụ về cách cấu trúc lại mã:

Thư viện
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)
})

Vì doParallel và clusterEvalQ đang sử dụng cùng một đối tượng cụm cl , vòng lặp foreach sẽ có quyền truy cập vào đối tượng kết nối cơ sở dữ liệu con khi thực hiện các nhiệm vụ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Transpose các hàng dưới dạng cột

  2. psql - lưu kết quả của lệnh vào một tệp

  3. Cách chọn bản ghi từ 24 giờ qua trong PostgreSQL

  4. Cách đặt giá trị của trường biến tổng hợp bằng SQL động

  5. Tắt cảnh báo trong sqlalchemy