PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

foreach %dopar% + RPostgreSQL

प्रति कार्य एक बार के बजाय, प्रति कार्यकर्ता एक बार डेटाबेस कनेक्शन बनाना अधिक कुशल है। दुर्भाग्य से, mclapply कार्यों को निष्पादित करने से पहले श्रमिकों को प्रारंभ करने के लिए एक तंत्र प्रदान नहीं करता है, इसलिए doMC बैकएंड का उपयोग करके ऐसा करना आसान नहीं है, लेकिन यदि आप doParallel बैकएंड का उपयोग करते हैं, तो आप क्लस्टरइवलक्यू का उपयोग करके श्रमिकों को प्रारंभ कर सकते हैं। कोड को पुन:व्यवस्थित करने का एक उदाहरण यहां दिया गया है:

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)
})

चूंकि doParallel और क्लस्टरEvalQ एक ही क्लस्टर ऑब्जेक्ट का उपयोग कर रहे हैं cl , फ़ोरैच लूप के पास डेटाबेस कनेक्शन ऑब्जेक्ट तक पहुंच होगी con कार्यों को निष्पादित करते समय।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मैं Postgresql को लेन-देन में त्रुटियों को अनदेखा करने के लिए कह सकता हूँ?

  2. अज्ञात से पाठ में रूपांतरण फ़ंक्शन खोजने में विफल

  3. विंडोज के लिए पोस्टग्रेएसक्यूएल विकसित करना, भाग 2

  4. पोस्टग्रेस्क्ल में जहां क्लॉज में कॉलम एलियासेस तक पहुंचें

  5. विंडोज के लिए पोस्टग्रेएसक्यूएल विकसित करना, भाग 3