1.数据读取速度
sqlQuery(RODBC)与dbGetQuery(DBI)几乎无差别
但二者均没tbl(dbplyr)快,且速度差别巨大(100w数据仅需要不到1s),但tbl的问题在于数据没存在R内存中,只能在远程内存中进行简单处理,若加载进R内存则与上述两种方式速度差别不大
RODBC方式读入数据100w条
> suppressMessages(library(RODBC))
> con<-odbcConnect("****",uid = "****",pwd = "****")
> system.time({
+ UserOfflineAction<-sqlQuery(con,"select UserId,ExhibitorId,CardExchange,RequestInfo,BoothStayMinutes from User_Visit_Action")
+ })
用户 系统 流逝
1.78 0.09 41.81
DBI方式读入数据100w条
> suppressMessages(library(dplyr))
> suppressMessages(library(DBI))
> conn<-dbConnect(odbc::odbc(),dsn="****",uid="****",pwd = "****")
> system.time({
+ UserOfflineAction<-dbGetQuery(conn,"select UserId,ExhibitorId,CardExchange,RequestInfo,BoothStayMinutes from User_Visit_Action")
+ })
用户 系统 流逝
3.22 0.25 41.75
dbplyr方式读入数据100w条
> suppressMessages(library(dbplyr))
> suppressMessages(library(dplyr))
> suppressMessages(library(DBI))
> conn<-dbConnect(odbc::odbc(),dsn="****",uid="****",pwd = "****")
> system.time({
+ UserOfflineAction<-tbl(conn,"User_Visit_Action")%>%
+ select(UserId,ExhibitorId,CardExchange,RequestInfo,BoothStayMinutes)%>%
+ data.frame
+
+ })
用户 系统 流逝
2.45 0.08 42.26
2.数据存储速度
RODBC方式存入数据4.5w条
> system.time({
+ create_table<-sqlQuery(con,"create table Company_company_sim_temp (
+ Exhibit_company1_id int not null,
+ Exhibit_company2_id int not null,
+ Similirity decimal(5,2) not null,
+ Update_time datetime not null
+
+ )")
+ save_data<-sqlSave(con,sim_list,tablename = "Company_company_sim_temp",rownames = F,append = T)
+ })
用户 系统 流逝
0.82 0.83 66.69
DBI方式存入数据4.5w条
> system.time({
+ create_table<-dbGetQuery(conn,"create table Company_company_sim_temp (
+ Exhibit_company1_id int not null,
+ Exhibit_company2_id int not null,
+ Similirity decimal(5,2) not null,
+ Update_time datetime not null
+
+ )")
+
+ dbWriteTable(conn,"Company_company_sim_temp",sim_list,row.names = F,append = T,temporary=FALSE)
+ })
用户 系统 流逝
0.14 0.00 8.40
dbplyr方式存入数据4.5w条
> system.time({
+ copy_to(conn,sim_list,test=deparse(substitute(sim_list)) ,temporary = FALSE,overwrite=TRUE)
+ })
用户 系统 流逝
0.19 0.01 8.39