sql >> Base de Datos >  >> RDS >> Database

¿Qué tan rápido es ODBC? Una comparación "cargada".

La pregunta de apertura

A veces, ODBC tiene una mala reputación por la velocidad... pero ¿debería tenerla? Por lo que se publica en línea, uno pensaría que ODBC es intrínsecamente lento:

Microsoft no está de acuerdo en el caso de SQL Server. En Uso de ODBC con Microsoft SQL Server , Amrish Kumar y Alan Brewer dicen que ODBC es tan bueno como nativo:

Uno de los rumores persistentes sobre ODBC es que es inherentemente más lento que una API de DBMS 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 declaraciones ODBC provenientes de la aplicación a las funciones API DBMS nativas 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. … Las pruebas de Microsoft han demostrado que el rendimiento de las aplicaciones SQL Server basadas en ODBC y DB-Library es aproximadamente igual.

Según Oracle, su controlador ODBC, en promedio, se ejecuta solo un 3 % más lento que el acceso nativo de Oracle. Pero es posible que su controlador ODBC no sea el suyo y su millaje variará.

Nuestros usuarios a menudo preguntan cuándo es mejor usar ODBC o un enfoque de archivo plano sin conexión para el manejo de datos, por el cual IRI es mejor conocido, durante operaciones de bases de datos muy grandes (VLDB) como:

  • ETL (extracción, transformación y carga)
  • reorganizaciones fuera de línea
  • migración y replicación
  • enmascaramiento de datos
  • generación/población de datos de prueba 

Nuestra respuesta general es que el volumen de datos debe determinar el paradigma de movimiento de datos. Nos propusimos probar ese consejo con un punto de referencia de población (carga) de base de datos simple.

Comparando Dos Paradigmas

Tenga en cuenta que aquí solo estamos analizando ODBC frente al movimiento masivo de datos basado en archivos, y no JDBC u otros medios de distribución de datos, como Hadoop. Tampoco consideramos otras vías promocionadas para mejorar la adquisición de datos, como NoSQL, o la entrega, como Teradata FastLoad.


ODBC (conectividad abierta de bases de datos)

ODBC proporciona una manera para que los programas de los clientes accedan convenientemente a una amplia gama de bases de datos y fuentes de datos que son compatibles con ODBC.

ODBC logra la independencia de DBMS mediante el uso de un controlador ODBC como capa de traducción entre la aplicación y el DBMS. La aplicación utiliza funciones ODBC a través de un administrador de controladores ODBC con el que está vinculado, y el controlador pasa el comando de consulta o actualización al DBMS.

Para llenar una tabla mediante ODBC en software IRI como el programa CoSort SortCL, especifique el tipo de proceso de salida como ODBC. Una secuencia de comandos de muestra dirigida a columnas en una tabla, en lugar de un archivo o procedimiento, podría contener este diseño:

/OUTFILE="QA.MILLION_TEST_NEW_ROW;DSN=OracleTwisterQA"
   /PROCESS=ODBC
   /ALIAS=QA_MILLION_TEST_NEW_ROW
      /FIELD=(ACCTNUM, POSITION=1, SEPARATOR="|", TYPE=ASCII)
      /FIELD=(DEPTNO,  POSITION=2, SEPARATOR="|", TYPE=ASCII)
      /FIELD=(QUANTITY,  POSITION=3, SEPARATOR="|", TYPE=NUMERIC)
      /FIELD=(TRANSTYPE, POSITION=4, SEPARATOR="|", TYPE=ASCII)
      /FIELD=(TRANSDATE, POSITION=5, SEPARATOR="|", TYPE=ISODATE)
      /FIELD=(NAME, POSITION=6, SEPARATOR="|", TYPE=ASCII)
      /FIELD=(STREETADDRESS,  POSITION=7, SEPARATOR="|", TYPE=ASCII)
      /FIELD=(STATE, POSITION=8, SEPARATOR="|", TYPE=ASCII)
      /FIELD=(CITY,  POSITION=9, SEPARATOR="|", TYPE=ASCII)

El comportamiento de llenado de ODBC predeterminado en SortCL dentro de los trabajos para:IRI CoSort (transformación masiva y clasificación previa a la carga), IRI NextForm (migración y replicación de base de datos), IRI FieldShield (enmascaramiento y cifrado de datos de base de datos), IRI RowGen (generación de datos de prueba de base de datos) , o IRI Voracity (todas las anteriores) es /APPEND, que agrega filas a una tabla existente. Las opciones adicionales son /CREATE, para inserción truncada y completa, y /UPDATE para inserción selectiva.


SQL*Loader 

SQL*Loader es una utilidad de base de datos de Oracle que carga datos de un archivo externo (plano) en una tabla existente en el mismo sistema o en una red. SQL*Loader es compatible con varios formatos de tabla de destino y puede gestionar la carga selectiva y múltiple de tablas.

Los datos pueden cargarse desde cualquier archivo de texto e insertarse en la base de datos. Se puede cargar de forma masiva una tabla desde el shell mediante el comando sqlldr (sqlload en algunas plataformas). Ejecútelo sin argumentos para obtener una lista de los parámetros disponibles.

En escenarios de reorganización y ETL de IRI en los que los datos del archivo sin formato se ordenan previamente en la clave de índice más larga de la tabla de destino, la sintaxis del comando de carga es:

C:\IRI\CoSort10>sqlldr scott/tiger control=ODBC_ONEMILLION_TEST.ctl DIRECT=TRUE

donde el archivo de control del cargador .ctl contiene:

INFILE 'C:\IRI\CoSort10\workbench\workspace\CM\twofiftym ilfinalcm.out'
APPEND INTO TABLE ODBC_ONEMILLION_TEST
REENABLE
FIELDS TERMINATED BY "|"
(
ACCTNUM NULLIF(ACCTNUM="{NULL}") ,
DEPTNO NULLIF(DEPTNO="{NULL}") ,
QUANTITY NULLIF(QUANTITY="{NULL}") ,
TRANSTYPE NULLIF(TRANSTYPE="{NULL}") ,
TRANSDATE NULLIF(TRANSDATE="{NULL}") ,
NAME NULLIF(NAME="{NULL}") ,
STREETADDRESS NULLIF(STREETADDRESS="{NULL}") ,
STATE NULLIF(STATE="{NULL}") ,
CITY NULLIF(CITY="{NULL}")

El siguiente gráfico compara el tiempo promedio que tardó Oracle XE 11gR2 en un servidor de Windows en completarse con cinco archivos preordenados diferentes mediante inserciones ODBC y SQL*Loader:

# de Registros Relleno de base de datos a través de SQL*Loader Población de base de datos a través de ODBC
2,5 millones 10,25 segundos 58,25 segundos
2 millones 6,25 segundos 24,25 segundos
1 millón 5,25 segundos 11,5 segundos
1/2 millón 4 segundos 5,5 segundos
1/4 millón 2,75 segundos 4,25 segundos

Conclusión para usuarios de IRI

Descubrimos que los usuarios de IRI FieldShield generalmente están de acuerdo con ODBC porque es más conveniente y lo suficientemente rápido para enmascarar datos dinámicos y estáticos de tablas con menos de un millón de filas. Lo mismo se aplica a las operaciones de generación de informes, federación o mapeo de datos menos grandes en IRI CoSort o IRI NextForm.

Sin embargo, para las operaciones masivas de ETL y reorganización en IRI Voracity, lo que continúa funcionando mejor son estos componentes compatibles:

  1. IRI FACT (Fast Extract) para descargas utilizando controladores nativos como OCI
  2. IRI CoSort para la transformación de big data y la clasificación previa a la carga [o IRI RowGen para la generación de datos de prueba ordenados y referencialmente correctos]
  3. Su utilidad de carga de base de datos para cargas masivas de rutas directas

Tan tímido con paradigmas complejos y costosos como NoSQL y Hadoop: el método confiable de archivo plano sigue siendo el camino a seguir.