数据:
我有一个闪亮的仪表板应用程序,我的数据集大小约为600 MB.它每月膨胀100 MB.我的数据驻留在MySQL本地.
的MenuItems:
我的仪表板上有6到7个侧边栏menuItem,每个都有10-12个不同的输出 - 图表和表格.这些选项卡中的每一个都有3到6个输入,例如selectizeInput,滑块,日期范围等,以过滤数据.
数据子集:
由于我无法将所有数据加载到内存中,因此对于每个菜单项,我都会根据日期范围创建数据子集,方法是将日期范围保持为系统日期后的2-3天.
例如:
df1 <- reactive({df[df$date >- dateinput[1] & df$date <- dateinput[2], ]})
以上获取我的第一个菜单项的数据,并根据selectInput或其他输入,我进一步过滤数据.例如,如果我有一个selectInput Gender (male and female)
然后我进一步子集df1
到:
df2 <- reactive({
if(is.null(input$Gender)){
df1
} else if(input$Gender == "Male")
{df1[df1$Gender == "Male",]}
)}
Run Code Online (Sandbox Code Playgroud)
如果我有超过1个输入,我进一步将这个df1子集化并将值传递给df2.df2成为该MenuItem中所有图表和表的反应数据集.
menuItem的数量越多,我就会创建更多的子集以适应过滤器和分析.
我面临两个问题:
在第一组数据加载后,图表和表在响应性更改时呈现得更快.
为了解决这个问题,我尝试将所有常见和重复的参数和库移动到global.R.
我有两个问题:
1.在R中挖掘数据时需要记住的任何基本卫生因素,特别是通过闪亮(R中的采矿速度非常快).
2.我已经阅读了关于并行处理的内容,但几乎所有的例子都谈到分配一个较重的计算.我们可以通过并行处理,分组数据或分发图表/表格准备来分发.
请注意,我是研究员而不是程序员,但他们已经学会在云上或最近在本地使用闪亮和主机应用程序.
对于像我这样的R的许多新手用户,这方面的指导将非常有用.
Enz*_*nzo 13
这是一个非常有趣的问题,应该得到更多适当的回答而不是评论.我想谈谈我的经历和想法.我R+shiny
用Shiny Server Pro 构建了一个商业应用程序,使用数据库和其他技巧.
延迟的UI加载时间
我的应用程序需要超过30秒才能加载,即将控制权交还给用户.
问题
Shiny
是单页面应用程序.因此,一个复杂的应用程序,带有大量标签,加载数据以填充某些菜单和选择器等受到影响,这从初始加载时间开始.
UI可能的缓解措施
insertUI
,removeUI
当我的应用程序差不多完成时,我没有使用它们,但它们也可以为更简单的启动页面做出贡献.使用数据库
用我的应用程序MonetDB
和以后PostgreSQL
.性能MonetDB
很好,但是我遇到了多个用户冲突(复杂的问题,这里我不详细说明),这迫使我转而PostgreSQL
选择.
PostgreSQL
很好,但由于缓存预热问题,它花了很多时间才开始.在启动数据加载到DB时需要进行设计:糟糕的设计.
RDBMS延迟了可能的缓解措施
我想我尝试了大多数技巧并取得了不同的成功.
data.table
加速数据操作而不受复制限制,我也fread
用于任何类型的csv读取.当时
fwrite
(仍然是data.table
)甚至没有出现在地平线上,否则值得认真考虑.R+shiny
(主要R
)限制的设计可以节省时间.MonetDB
已将R
函数嵌入到代码中,因此它应该比以前更快.它当然值得一看.另一方面,应该彻底测试多用户功能:大多数R
数据库代码没有考虑在多用户环境中使用shiny
.也许RStudio
应该做更多关于这个的事情.老实说他们已经开始了,实验性的介绍,connection pools
这很棒.过度使用反应性
我认为使用类似的高级框架非常棒shiny
,而且反应性很有趣.另一方面,在广泛而复杂的应用程序中,事情很容易失控.
过度反应可能缓解
shiny
调用特定函数的时间,并且通常不止一次调用任何反应函数.当然这一切都会耗费CPU时间,至少需要控制住.observeEvent
现在这样的构造具有如下参数ignoreInit
:明智地使用这些参数可以在初始化时节省至少一个空隙循环.根据我的经验,我们只是触及了可能的表面shiny
.另一方面,由于单一工艺性质,存在限制R
.通过Shiny Server Pro
它可以设想使用负载平衡器并在不同服务器之间分布多个用户.另一方面,为了进入这些领域,我们需要在各种实例中使用某种消息传递系统.我已经知道在复杂的Shiny Server Pro
应用程序中需要这样做(例如,当需要管理不同类别的用户,但同时在它们之间进行通信时).但这超出了这个SO问题的范围.
归档时间: |
|
查看次数: |
6582 次 |
最近记录: |