如何快速将MySQL表读入闪亮的应用程序

时间:2020-10-20 19:29:51

标签: mysql r shiny data.table

我的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加载数据吗?

1 个答案:

答案 0 :(得分:0)

我认为您无法在编程方面做很多事情来加快从SQL加载数据的速度。一些建议:

  • 如果您的SQL Server是远程服务器,请检查连接速度,
  • 优化SQL Server中的表(运行OPTIMIZE TABLE,创建直方图等)
  • 获得更多RAM /更快的处理器。

在数据位于R之内之后,data.framedata.tabledplyr之间的差异起着的作用。