我的Shiny应用当前使用
从MySQL中的表中读取cn <- dbConnect(drv = RMySQL::MySQL(),
username = "my_username",
password = "my_password",
host = "host_address",
port = 3306,
dbname = 'schema_name'
)
df <- dbReadTable(cn, 'table_name')#reads as a data.frame
ui<- dashboardPage(...)
server<- function(input, output, session){...}
shinyApp(ui=ui, server=server)
但是,表的长度为500万行,大约有10列,因此,每次我启动该应用程序时,加载它都需要几分钟。
我知道很多人建议通过使用data.table
而不是data.frame
来使用fread
,但是fread
似乎不适用于dbConnect
-我见过的大多数示例都涉及fread
读取本地存储的csv文件,并且由于该表有时会更改,因此我不想在本地导出该SQL表。
似乎还有另一种方式,当我完成等待df <- dbReadTable(cn, 'table_name')#reads as a data.frame
之后,我可以调用as.data.table(df)
将其转换为datatable
。虽然这可能会提高以后dplyr
的运行速度,但我仍然在等待dbReadTable
首次打开应用程序时加载。
可以这么说,我也已经对数据进行了预处理,所以我认为我无法进一步减小表的大小。
这里有任何建议/最佳实践建议,可以快速从SQL加载数据吗?
答案 0 :(得分:0)
我认为您无法在编程方面做很多事情来加快从SQL加载数据的速度。一些建议:
OPTIMIZE TABLE
,创建直方图等)在数据位于R之内之后,data.frame
,data.table
和dplyr
之间的差异起着的作用。