I have no experience with noSQL databases, but here is how I combine brilliant information with an Oracle database to speed up my applications:
User inputs are transferred to an SQL query, which is sent to an extremely fast database, and only the output of this query is read in R. In many cases (especially if sql includes a group by expression), this reduces the number of observations read from several million to several hundreds. Therefore, data loading is very fast.
In the example below, users first select questionnaires and a date range. This generates a sql statement that filters the relevant observations and counts the frequency of answers to the question and questionnaire. These frequencies are read in R and displayed as data in a brilliant application.
library(shiny) library(ROracle) library(DT) drv <- dbDriver("Oracle") con <-dbConnect(drv, username = "...", password = '...', dbname = "...") query <- 'select distinct questionnaire from ... order by questionnaire' questionnaire.list <- dbGetQuery(con, query)$questionnaire ui <- fluidPage( selectInput('questionnaire_inp','Questionnaire', choices=questionnaire.list,selected=questionnaire.list,multiple=T), dateRangeInput("daterange_inp", "Date range", start='2016-01-01', end=Sys.Date()), dataTableOutput('tbl') ) server <- function(input, output) { output$tbl <- renderDataTable({ query <- paste0( "select questionnaire, question, answer, count(*) from ... where title in (", paste0(shQuote(input$questionnaire_inp), collapse=","), ") and date between to_date('", input$daterange_inp[1] ,"','YYYY-MM-DD') and to_date ('", input$daterange_inp[1] ,"','YYYY-MM-DD') group by questionnaire, question, answer") dt <- dbGetQuery(con, query) datatable(dt) }) shinyApp(ui = ui, server = server)