下午好,
在计算了一个相当大的向量(比2 ^ 20个元素短一点)之后,我必须将结果存储在数据库中。
该脚本大约需要4个小时的时间来执行一个简单的代码,例如:
#Do the processing
myVector<-processData(myData)
#Sends every thing to the database
lapply(myVector,sendToDB)
您认为最有效的方法是什么?
我曾考虑过使用相同的查询来插入多个记录(多个插入),但是它只是回到“删除”数据。
是否有任何向量化函数将其发送到数据库?
有趣的是,该代码在开始处理向量的第一个元素之前需要花费大量时间。就是说,如果我在
browser()
内放置一个sendToDB
调用,则第一次需要20分钟才能到达(并且我的意思是20分钟,而没有考虑到处理数据的前一行)。所以我想知道R在这段时间内在做什么?还有另一种我可能会错过的在R中执行此类操作的方法(也许是并行处理吗?)
谢谢!
PS:这是sendToDB函数的骨架:
sendToDB<-function(id,data) {
channel<-odbcChannel(...)
query<-paste("INSERT INTO history VALUE(",id,",\"",data,"\")",sep="")
sqlQuery(channel,query)
odbcClose(channel)
}
那是主意。
更新
我目前正在尝试
LOAD DATA INFILE
命令。我仍然不知道为什么要花这么长时间才能第一次使用
lapply
的内部功能。解
LOAD DATA INFILE
确实要快得多。使用write
逐行写入文件很容易,而write.table
更快。我在
lapply
上遇到的开销来自我在POSIXct
对象上循环的事实。使用seq(along.with=myVector)
然后从循环内处理数据要快得多。 最佳答案
将其写入某个文件并调用LOAD DATA INFILE怎么样?这至少应该给出一个基准。顺便说一句:您使用哪种DBMS?
关于optimization - 将巨大的向量发送到R中的数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3183639/