如何用回忆录缓存查询数据结果?
我已经用我的数据试过了,它一点也没有区别。
这是我的职责
runQuery <- function(DB, query, site) {
# Match the pattern and replace it.
dataQuery <- sub("SITE", as.character(site), query)
# Store the result in data1.
data = dbGetQuery(DB, dataQuery)
return(data)
}
memoise_data <- memoise(runQuery)
data1 <- memoise_data(DB, dataQuery, site1)无论是否使用和,情节仍然要花费21.61824秒的时间。
有什么想法吗?
发布于 2015-09-19 14:56:39
在回忆录函数的第二次调用和后续调用中,您只会得到一个加速。在第一次调用中,它运行“包装”函数并缓存其输出。您应该注意到第二次调用memoise_data()时的不同之处。
例如:
f <- function() {
a <- rnorm(1e5)
5
}
system.time(f())
user system elapsed
0.05 0.00 0.05
mf <- memoise::memoise(f)
system.time(mf())
user system elapsed
0.05 0.00 0.05
system.time(mf())
user system elapsed
0 0 0 发布于 2018-09-28 05:17:44
为了缓存计算结果,函数中包含data.table类型的输入,我在回忆录中遇到了类似的问题。猜测一下,我会说回忆录是根据与函数输入相关的键存储函数结果,问题是密钥生成算法。这个问题要么是:
这两种方法都意味着您正在重新计算/重新处理每个函数调用。这当然与我所目睹的情况相吻合。函数(字符串)很好地缓存,而函数(data.table,string)则不缓存。
发布于 2017-10-18 15:36:36
您的代码的瓶颈是什么?
不过,我不认为缓存数据库查询是个好主意,但根据定义,如果DB更新,您可以得到完全相同的DB名称和相同的查询的不同结果。这是不安全的缓存。
数据库本身可能有一些缓存机制来加速重复查询。
https://stackoverflow.com/questions/31490378
复制相似问题