首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闪亮的应用程序-使用回忆录缓存R值

闪亮的应用程序-使用回忆录缓存R值
EN

Stack Overflow用户
提问于 2015-07-18 10:48:22
回答 3查看 1.6K关注 0票数 1

如何用回忆录缓存查询数据结果?

我已经用我的数据试过了,它一点也没有区别。

这是我的职责

代码语言:javascript
复制
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秒的时间。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-19 14:56:39

在回忆录函数的第二次调用和后续调用中,您只会得到一个加速。在第一次调用中,它运行“包装”函数并缓存其输出。您应该注意到第二次调用memoise_data()时的不同之处。

例如:

代码语言:javascript
复制
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 
票数 5
EN

Stack Overflow用户

发布于 2018-09-28 05:17:44

为了缓存计算结果,函数中包含data.table类型的输入,我在回忆录中遇到了类似的问题。猜测一下,我会说回忆录是根据与函数输入相关的键存储函数结果,问题是密钥生成算法。这个问题要么是:

  1. 无法根据特定的输入类型形成键,因此不会缓存结果,或者
  2. 关键算法是在每次调用中创建一个可变的密钥。

这两种方法都意味着您正在重新计算/重新处理每个函数调用。这当然与我所目睹的情况相吻合。函数(字符串)很好地缓存,而函数(data.table,string)则不缓存。

票数 2
EN

Stack Overflow用户

发布于 2017-10-18 15:36:36

您的代码的瓶颈是什么?

  • 这是数据库查询本身吗?
  • 是在发送和接收上花费的时间吗?

不过,我不认为缓存数据库查询是个好主意,但根据定义,如果DB更新,您可以得到完全相同的DB名称和相同的查询的不同结果。这是不安全的缓存。

数据库本身可能有一些缓存机制来加速重复查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31490378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档