R語言在進行數據庫查詢時,每執行一條語句,都會阻塞。直到查詢語句返回結果之后,才會進行下一條語句。
為了能夠實現同時對多個數據庫進行查詢,以節省順序執行下來的時間,首先考慮通過多線程來進行數據庫查詢。
不過多數據庫同時查詢,多個結果合並起來過大的話,本地機器的內存可能是一個風險點,心里要對可能需要的內存有所把握。
R下進行多線程依賴與doParallel包和foreach包。
> install.packages('doParallel') > install.packages('foreach') > library(doParalled) > library(foreach) > library(RMySQL)
# 生成2個集群,多少個集群結合本地機器硬件配置和自己需要
> cl <- makeCluster(2)
# 注冊多線程,個人理解,parallel包應該是聲明在后端開啟多核處理模式,讓硬件准備環境,分配資源
> registerDoParallel(cl)
# %dopar%是foreach包的語法格式,表示多線程運行.
# foreach默認返回一個list,也可以指定一個函數,在線程處理完成后直接對結果進行rbind,sum等組合操作。更多查看?foreach
> qdata <- foreach(i=1:2) %dopar% { if (i == 1) conn <- connectdb_1() else conn <- connectdb_2()
re <- dbGetQuery(conn, query) dbDisconnect(conn)
return(re) } # 關閉集群 > stopCluster(cl)
