下午好,

在计算了一个相当大的向量(比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/

10-12 14:31
查看更多