¿Cuáles son las mejores prácticas para hacer que la aplicación brillante se ejecute más rápido?
Datos:
Tengo una aplicación de panel brillante y mi conjunto de datos tiene un tamaño de alrededor de 600 MB. Se hincha en 100 MB cada mes. Mis datos residen localmente en MySQL.
Elementos de menú:
Tengo 6 - 7 elementos de menú de barra lateral en mi tablero y cada uno de ellos tiene 10 - 12 salidas diferentes: gráficos y tablas. Cada una de estas pestañas tiene 3 a 6 entradas, como selectizeInput, control deslizante, rango de fechas, etc. para filtrar los datos.
Subconjuntos de datos:
Como no puedo cargar todos los datos en la memoria, para cada elemento del menú creo un subconjunto de datos basado en el rango de fechas manteniendo el rango de fechas a solo 2 a 3 días desde la fecha del sistema.
Por ejemplo:
df1 <- reactive({df[df$date >- dateinput[1] & df$date <- dateinput[2], ]})
Lo anterior obtiene los datos para mi primer elemento de menú y, dependiendo de selectInput u otras entradas, estoy filtrando aún más los datos. Por ejemplo, si tengo un selectInput paraGender (male and female)
entonces subconjunto másdf1
a:
df2 <- reactive({
if(is.null(input$Gender)){
df1
} else if(input$Gender == "Male")
{df1[df1$Gender == "Male",]}
)}
Si tengo más de 1 entrada, subconjunto este df1 aún más y paso los valores a df2. df2 se convierte en el conjunto de datos reactivo para todos los gráficos y tablas en ese MenuItem.
Cuanto mayor sea el número de menuItem, creo más subconjuntos para adaptarlos a los filtros y análisis.
Me enfrento a dos problemas:
En máquinas más antiguas, la aplicación no se carga. yEn las máquinas más nuevas, la aplicación se carga muy lentamente a veces de 5 a 6 minutosDespués del primer conjunto de carga de datos, los gráficos y las tablas se procesan más rápido en los cambios reactivos.
Para contrarrestar esto, he intentado mover todos los parámetros y bibliotecas comunes y repetitivos a global.R.
Tengo dos preguntas:
1. Existen algunos factores básicos de higiene que uno debe tener en cuenta al extraer datos en R, especialmente a través del brillo (la minería en R es extremadamente rápida).
2.He leído sobre el procesamiento en paralelo, pero casi siempre todos los ejemplos hablan sobre la distribución de un solo cálculo más pesado. ¿Podemos distribuir a través de procesamiento paralelo, subconjunto de datos o distribución de gráficos / preparación de tablas?
Tenga en cuenta que soy un investigador y no un programador, pero recientemente he aprendido a usar aplicaciones brillantes y de host en la nube o localmente.
La orientación sobre esto será muy útil para muchos usuarios novatos de R como yo.