RODBC versus odbc

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

RODBC versus odbc

Messagepar jean lobry » 03 Mai 2018, 18:24

Bonjour à tous,

je quiers une base de données distante (sous ORACLE) à partir de mon serveur shiny via le paquet RODBC. Rien, à dire, ça marche très bien, c'est juste pénible de configurer les fichiers de configuration qui vont bien.

J'ai ouïe-dire que le paquet odbc serait plus performant, mais je me méfie de mes sources.

Quelqu'un a-t-il déjà fait des expériences comparatives entre RODBC et odbc ?

Bien amicalement,

jean

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: RODBC versus odbc

Messagepar Mickael Canouil » 03 Mai 2018, 19:54

Bonjour,

personnellement, j'ai opté pour DBI/odbc pour le SQL (mongolite pour le noSQL utilisé par mongoDB).
J'utilise odbc conjointement à dplyr et dbplyr.

rstudio propose une documentation assez exhaustive sur les problématiques lié aux bases de données :
http://db.rstudio.com/

je n'ai cependant pas fait de benchmark pour tester RODBC versus DBI/odbc.
La vraie différence, c'est que RODBC fonctionne seul, alors que odbc nécessite l'interface DBI pour fonctionner.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: RODBC versus odbc

Messagepar jean lobry » 04 Mai 2018, 18:30

Bonjour Mickael,
merci pour le lien, je vais continuer à creuser.
Amicalement,

Jean

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: RODBC versus odbc

Messagepar jean lobry » 02 Juin 2018, 14:46

Bonjour,

je vous fait un petit retour de mes expériences. J'ai testé 3 paquets qui implémentent DBI : ROracle, odbc et RODBCDBI et le paquet RODBC. J'ai comparé le temps de chargement d'une table de la taille typique qui m'intéresse (200 K lignes, une dizaine de colonnes de types variés pour un poids total de 20 MiB après import). C'est ROracle qui gagne haut la main, avec odbc qui est en moyenne 3.2 fois plus lent et RODBCDBI et RODBC qui font jeu égal en étant 5.9 fois plus lent, mais avec plus de variabilité pour RODBC :

Code : Tout sélectionner

structure(list(Roracle = c(1.668, 1.567, 1.594, 1.743, 1.306,
1.282, 1.286, 1.411, 1.544, 1.508, 1.285, 1.368, 1.274, 1.238,
1.266, 1.298, 1.61, 1.314, 1.402, 1.39, 1.272, 1.192, 1.403,
1.36, 1.256, 1.457, 1.224, 1.663, 1.379, 1.37), odbc = c(4.849,
4.178, 4.371, 4.177, 3.962, 4.098, 4.609, 4.303, 3.173, 3.515,
4.681, 4.558, 4.62, 3.994, 4.263, 4.67, 5.054, 4.59, 4.556, 4.74,
4.642, 3.146, 4.664, 3.945, 3.315, 4.137, 4.023, 4.571, 4.491,
4.404), RODBCDBI = c(8.496, 7.599, 8.145, 8.138, 8.202, 7.69,
7.797, 8.424, 7.89, 7.632, 7.864, 8.429, 8.307, 7.597, 8.053,
7.208, 8.329, 8.296, 7.964, 8.136, 7.912, 8.204, 8.021, 8.121,
8.11, 8.021, 8.055, 8.005, 8.031, 7.809), RODBC = c(9.878, 9.866,
10.167, 9.886, 9.575, 7.902, 8.075, 8.051, 8.393, 8.11, 9.833,
9.869, 7.628, 8.058, 7.271, 8.213, 10.002, 9.486, 7.937, 8.103,
7.503, 8.029, 8.121, 8.169, 8.111, 7.952, 8.301, 8.235, 7.997,
8.008)), .Names = c("Roracle", "odbc", "RODBCDBI", "RODBC"), class = "data.frame", row.names = c(NA,
-30L))
boxplot(bench, ylim = c(0, max(bench)), col = "lightblue",
 las = 1, notch = FALSE, ylab = "Temps [s]", xlab = "Paquet R",
 main = paste("n =", nrow(bench), "répétitions"))


Je vais donc me tourner vers ROracle, ce qui est assez logique vu que j'attaque une base Oracle, même si je n'ai pas encore réussi à lui faire utiliser les fichiers odbcinst.ini et odbc.ini, je suis obligé de me palucher des lignes et des lignes de code juste pour la connexion, genre :

Code : Tout sélectionner

library(DBI)
library(ROracle)
drv <- dbDriver("Oracle")
host <- "mamachine.univ-lyon1.fr"
port <- monport
sid <- "monSID"
connect.string <- paste(
      "(DESCRIPTION=",
      "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
        "(CONNECT_DATA=(SID=", sid, ")))", sep = "")
con <- dbConnect(drv, username = "utilisateur", password = "mot de passe",
                     dbname = connect.string)


Amicalement,

jean

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: RODBC versus odbc

Messagepar Mickael Canouil » 06 Juin 2018, 19:38

Bonjour,

Merci pour ce petit benchmark.

Est-ce nécessaire que la table soit téléchargée en local ? La plupart des bases de données disposent d'outils/fonctions de calcul interne (ces outils différent d'une base à l'autre), bien plus performants que les mêmes fonctions dans R.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: RODBC versus odbc

Messagepar jean lobry » 14 Juin 2018, 17:15

Bonjour Mickael,

absolument, tout l'intérêt de coupler R avec un SGBD est de ne rapatrier en local que les données d'intérêt. J'ai fait mes tests avec une table dont la taille est de l'ordre de grandeur de ce qui est attendu après filtrage en amont.

Bien amicalement,

jean


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité