Sono nuovo a R ma sono interessato all'utilizzo di Shiny per creare grafici dinamici utilizzando i dati memorizzati in un database SQL Server. Per abilitare l'interattività, voglio inserire i dati grezzi dal database ed eseguire i calcoli entro R
piuttosto che fare in modo che il database riepiloghi i dati.R: Prestazioni di lettura estremamente lente con RODBC e SQL Server
Sono in grado di connettersi al database utilizzando RODBC
, eseguire una query e ricevere risultati in un data.frame
. Tuttavia, il tempo di lettura in R
è circa 12 volte più lungo della stessa query eseguita in SQL Server Management Studio (SSMS). SSMS richiede ~ 600 ms, mentre R
richiede circa 7,6 secondi. La mia domanda è se sto facendo qualcosa di sbagliato, o R
è davvero lento con l'accesso al database? E se sì, ci sono alternative più veloci (ad esempio scrivere l'output del database in un file e leggere il file)?
Alcune informazioni sulla query che possono aiutare: La query recupera circa 250K righe con 4 colonne. La prima colonna è una data e gli altri tre sono valori numerici. La macchina che esegue R
e SSMS è una workstation Win 7 di fascia alta con 32 GB di memoria. Il comando R
che io sono in esecuzione è:
system.time(df <- sqlQuery(cn, query))
che restituisce:
user system elapsed
7.17 0.01 7.58
È interessante notare, sembra che il trasferimento dei dati da SQL alla mia macchina è veloce, ma che R
è occupato a fare le cose internamente per alcuni secondi prima di restituire il data.frame
. Lo vedo perché l'utilizzo della rete aumenta nel primo secondo e quasi immediatamente ritorna a vicino a 0. Quindi, alcuni secondi dopo, viene restituito lo R
data.frame
.
Piuttosto sicuro che sia solo così lento, l'abbiamo valutato qualche tempo fa e abbiamo deciso di fare un altro percorso usando RODBC, è solo un modo per rallentare tranne che per query molto semplici. – Hansi