在闪亮的服务器上部署应用程序;一次加载数据并随时可供多个 users/sessions
Deploying an app on a shiny server; load data once and make readily available to multiple users/sessions
我正在开发一个闪亮的应用程序,它通过虚拟机部署在闪亮的服务器上。这是一个探索性数据分析应用程序。数据是通过 ODBC 从数据库中检索的,我使用 RODBC
库。
我希望该应用程序能够 运行 并发会话和用户(这无论如何都是闪亮应用程序的一部分),我是这种部署的新手。检索数据和整理数据的过程大约需要 2 分钟。这是我采用的两种方法:-
第一种方法:服务器代码外的数据检索
library(shiny)
library(DT)
library(RODBC)
library(dplyr)
#creating the driver connection variable
conn<-odbcConnect("<name of ODBC driver that I am using>")
#the sql query for pulling the data from the database
sql<- "SELECT * FROM <name of database>"
#retrieving and creating the dataframe
df<-sqlQuery(conn,sql)
#data wrangling sequence takes place
df%>%
...
...
...
ui<-fluidPage(
#rest of ui
...
)
server<-function(input, output,session){
#rest of server
...
}
shinyApp(ui,server)
这在本地有效,但在服务器上,此方法的问题是超时,然后浏览器页面崩溃。
第二种方法:服务器代码内部检索数据
ui<-fluidPage(
#rest of ui
...
)
server<-function(input, output,session){
# have the data retrieval process in the server
#creating the driver connection variable
conn<-odbcConnect("<name of ODBC driver that I am using>")
#the sql query for pulling the data from the database
sql<- "SELECT * FROM <name of database>"
#retrieving and creating the dataframe
df<-sqlQuery(conn,sql)
#data wrangling sequence takes place
df%>%
...
...
...
#rest of server
...
}
shinyApp(ui,server)
这里的问题是每次新用户访问应用程序时,数据检索过程都会重新开始。这是次优的,因为它使它变慢并且意味着它不能很容易地使用。
我想要的结果是数据被检索一次(作为静态数据集),之后,每次新用户访问应用程序(或启动新会话)时,数据都准备好待分析。
这是我在服务器上部署的第一个应用程序,因此我需要一些指导。我需要做什么才能调用一次数据,然后在新用户访问应用程序时立即为用户准备好?
非常感谢:)
您可以检索 global.R
文件中的数据。在 global.R
中创建的所有对象将可用于您应用的所有会话。
Here 是对 Shiny 应用程序范围规则的解释。
另一种解决方案,因为您的数据似乎一直都一样,所以是手动检索数据并将其保存在本地文件中。然后直接从本地文件加载 server
里面的数据,这样会比访问 DB 更快。
我正在开发一个闪亮的应用程序,它通过虚拟机部署在闪亮的服务器上。这是一个探索性数据分析应用程序。数据是通过 ODBC 从数据库中检索的,我使用 RODBC
库。
我希望该应用程序能够 运行 并发会话和用户(这无论如何都是闪亮应用程序的一部分),我是这种部署的新手。检索数据和整理数据的过程大约需要 2 分钟。这是我采用的两种方法:-
第一种方法:服务器代码外的数据检索
library(shiny)
library(DT)
library(RODBC)
library(dplyr)
#creating the driver connection variable
conn<-odbcConnect("<name of ODBC driver that I am using>")
#the sql query for pulling the data from the database
sql<- "SELECT * FROM <name of database>"
#retrieving and creating the dataframe
df<-sqlQuery(conn,sql)
#data wrangling sequence takes place
df%>%
...
...
...
ui<-fluidPage(
#rest of ui
...
)
server<-function(input, output,session){
#rest of server
...
}
shinyApp(ui,server)
这在本地有效,但在服务器上,此方法的问题是超时,然后浏览器页面崩溃。
第二种方法:服务器代码内部检索数据
ui<-fluidPage(
#rest of ui
...
)
server<-function(input, output,session){
# have the data retrieval process in the server
#creating the driver connection variable
conn<-odbcConnect("<name of ODBC driver that I am using>")
#the sql query for pulling the data from the database
sql<- "SELECT * FROM <name of database>"
#retrieving and creating the dataframe
df<-sqlQuery(conn,sql)
#data wrangling sequence takes place
df%>%
...
...
...
#rest of server
...
}
shinyApp(ui,server)
这里的问题是每次新用户访问应用程序时,数据检索过程都会重新开始。这是次优的,因为它使它变慢并且意味着它不能很容易地使用。
我想要的结果是数据被检索一次(作为静态数据集),之后,每次新用户访问应用程序(或启动新会话)时,数据都准备好待分析。
这是我在服务器上部署的第一个应用程序,因此我需要一些指导。我需要做什么才能调用一次数据,然后在新用户访问应用程序时立即为用户准备好?
非常感谢:)
您可以检索 global.R
文件中的数据。在 global.R
中创建的所有对象将可用于您应用的所有会话。
Here 是对 Shiny 应用程序范围规则的解释。
另一种解决方案,因为您的数据似乎一直都一样,所以是手动检索数据并将其保存在本地文件中。然后直接从本地文件加载 server
里面的数据,这样会比访问 DB 更快。