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