R语言与数据库交互效率问题

 

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 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值