2009-07-23 24 views
6

Entiendo que algunas bases de datos tienen soporte nativo en R (por ejemplo, MySQL) pero puede conectarse a otras bases de datos como MS SQL Server utilizando RODBC. ¿Cuánta mejora de velocidad se gana para leer/escribir con los controladores nativos frente a RODBC? ¿Qué otros DB tienen controladores nativos en R? ¿Leer es más rápido o más lento que escribir en general?Conexiones de base de datos nativas vs ODBC

Respuesta

1
  • Es una pregunta empírica, ¿por qué no la mides para la combinación que te interesa?
  • El código público no está oculto, entonces ¿por qué no cuenta qué otras interfaces de DB tiene CRAN? Para DBI solo, tenemos SQLite, MySQL, Postgresql, Oracle; para backends personalizados db hay cosas como Vhayu.
  • Existen foros especializados, ¿por qué no preguntas en r-sig-db?
  • Por último, tan pronto como hay una API y una necesidad, la gente tiende a combinar ambas. He escrito dos paquetes diferentes (en el trabajo y, por lo tanto, inéditos) para dos backends altamente especializados y rápidos.
+0

Buen punto en la pregunta empírica pero no puedo probarlos todos. Si alguien más tiene buena experiencia y evidencia para cambiar los motores DB, cambiaría. –

+0

Bueno, puede tener la opción de comparar nativo a ODBC (por ejemplo, con MySQL o PostgreSQL, en lugar de MS SQL donde solo es ODBC). Así que simule el tipo de caso de prueba que está buscando y vea cómo se comporta. –

2

Si está interesado específicamente en SQL Server, la referencia a continuación está un poco desactualizada, pero me imagino que probablemente todavía se mantenga.

Using ODBC with Microsoft SQL Server

Rendimiento de ODBC como una API nativa

Uno de los rumores persistentes sobre ODBC es que es inherentemente más lento que un DBMS API nativa. Este razonamiento se basa en la suposición de que los controladores ODBC deben implementarse como una capa adicional sobre una API DBMS nativa, traduciendo las sentencias ODBC provenientes de la aplicación a las funciones nativas de la API DBMS y la sintaxis SQL. Este esfuerzo de traducción agrega un procesamiento adicional en comparación con hacer que la aplicación llame directamente a la API nativa. Esta suposición es cierta para algunos controladores ODBC implementados sobre una API DBMS nativa, pero el controlador ODBC de Microsoft SQL Server no se implementa de esta manera.

El controlador ODBC de Microsoft SQL Server es un reemplazo funcional de DB-Library. El controlador ODBC de SQL Server funciona con las bibliotecas de red subyacentes exactamente de la misma manera que la DLL de DB-Library. El controlador ODBC de Microsoft SQL Server no depende de la DLL de DB-Library, y el controlador funcionará correctamente si DB-Library no está presente en el cliente.

Las pruebas de Microsoft han demostrado que el rendimiento de las aplicaciones basadas en ODBC y DB-Library basadas en SQL Server es aproximadamente igual.

+0

Esa es una muy buena referencia para tener. ¡Gracias! Desafortunadamente también tengo que lidiar con el lado R de las cosas. Parece que pasar de R a la capa RODBC es particularmente lento para las escrituras. Pero es bueno saber que la ralentización es probablemente en RODBC y no en la capa de ODBC a SQL Server. Gracias de nuevo. –

+0

Por curiosidad, ¿qué tan grande son sus dataframes que está guardando? ¿Has intentado hacer un perfil para ver si estás insertando datos de 1 fila a la vez o por lotes? Si está insertando 1 hilera, el tiempo lo retrasará mucho. Recientemente también he tenido algunos problemas con las funciones de guardado en RODBC. sqlQuery() cuando se ejecuta solo un INSERT/UPDATE arroja un error y funciona, al menos para SQL Server. –

Cuestiones relacionadas