Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为所有用户更新的反应式计时器_R_Caching_Shiny - Fatal编程技术网

R 为所有用户更新的反应式计时器

R 为所有用户更新的反应式计时器,r,caching,shiny,R,Caching,Shiny,我有一个闪亮的应用程序,可以从我的mongo数据库中提取数据并以表格格式显示。数据库中的数据每30分钟更改一次。目前,每次新用户登录时,都会为该用户提取数据。我想缓存数据,但每30分钟为所有用户更新一次。这样,每次有人登录数据时都不会被拉入(因为R是单线程的,所以速度很慢)。下面是我目前拥有的一个例子 library(shiny) ui <- fluidPage( titlePanel("Old Faithful Geyser Data"),

我有一个闪亮的应用程序,可以从我的mongo数据库中提取数据并以表格格式显示。数据库中的数据每30分钟更改一次。目前,每次新用户登录时,都会为该用户提取数据。我想缓存数据,但每30分钟为所有用户更新一次。这样,每次有人登录数据时都不会被拉入(因为R是单线程的,所以速度很慢)。下面是我目前拥有的一个例子

library(shiny)


ui <- fluidPage(

    titlePanel("Old Faithful Geyser Data"),

   
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30)
        ),

      
        mainPanel(
           plotOutput("distPlot")
        )
    )
)

# create connection to mongo       
mongo.db = mongo(collection, db, url)

server <- function(input, output) {

    #pull data from mongo
      mydata = reactive({
          df = mongo.db$find()
       })
   

    output$distPlot <- renderPlot({
       mydata()
    })
}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)

ui您可以将数据更新和数据使用分开

数据更新 使用
crontab
定期运行数据更新脚本,请参阅。
脚本应从数据库读取数据并将结果保存在服务器上:

conn <- dbConnect(...)
DBdata <- dbGetQuery(conn,...)
saveRDS(DBdata,'data\DBdata.rds')

如果数据库查询足够快,您可以跳过数据更新部分,使用
reactivePoll
直接查询数据库。

waldi感谢您的帮助!我将对此进行调查,并检查解决方案是否有效。瓦尔迪,我已经更新了我的问题。最后有一个编辑。我仍然有一些问题,
passwords$find()
需要多少时间?这是一个很长的查询还是只需要几秒钟?我不确定是否可以在shinyapp.io上使用
crontab
,因此我们必须使用reactivePoll.Waldi,使用reactivePoll是解决方案。谢谢,很高兴我能帮忙!另见新的。
DBdata = passwords$find()
saveRDS(DBdata,'DBdata.rds')
mydata <- reactiveFileReader(interval = 1000 * 60 * 2, 
                             session = NULL,
                             'DBdata.rds',
                              readRDS)

# Define server logic required to draw a histogram
shinyServer(function(input, output, session) {

  
  output$volscanner = renderDataTable(
    mydata()
  )
 })
  
conn <- dbConnect(...)
DBdata <- dbGetQuery(conn,...)
saveRDS(DBdata,'data\DBdata.rds')
mydata <- reactiveFileReader(interval = 1000 * 60 * 30, 
                             session = NULL,
                             'data\DBdata.rds',
                              readRDS)
server <- function(input, output) {
    output$distPlot <- renderPlot({
       mydata()
    })
...
}