Shiny

时间:2018-03-14 02:13:04

标签: r shiny shiny-server

由于我不熟悉Shiny,我对自动数据库查询的最佳实践感兴趣。在撰写本文时,有许多不同的来源有不同的信息。

如果我每10分钟查询一次我的postgres数据库,如下例所示,我想确保a)在会话退出时关闭连接并且b)由于太多而无法连接许多开放的联系。我的仪表板将来一次最多可以容纳十几个用户。

做了一些研究之后,我确信最好的方法不一定是使用池,而是使用Shiny here记录的“每个查询一个连接”方法

正在使用reactivePoll()以下正确的方法来实现一个每10分钟刷新一次渲染表的查询?我将要查询的数据库肯定会在每次调用时返回不同的数据。这是否意味着checkFuncvalueFunc应该相同,或者checkFunc可以完全保留为空函数?

library(shiny)
library(DBI)

args <- list(
  drv = dbDriver("PostgreSQL"),
  dbname = "shinydemo",
  host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com",
  username = "guest",
  password = "guest"
)

ui <- fluidPage(
  textInput("ID", "Enter your ID:", "5"),
  tableOutput("tbl"),
  numericInput("nrows", "How many cities to show?", 10),
  plotOutput("popPlot")
)

server <- function(input, output, session) {
  output$tbl <- renderTable({
    conn <- do.call(DBI::dbConnect, args)
    on.exit(DBI::dbDisconnect(conn))

    sql <- "SELECT * FROM City WHERE ID = ?id;"
    query <- sqlInterpolate(conn, sql, id = input$ID)

    data <- reactivePoll(10000, session,
   checkFunc = function() {}
   valueFunc = function() {
  dbGetQuery(conn, query)
     })
  })
}

shinyApp(ui, server)

0 个答案:

没有答案