Database
 sql >> Datenbank >  >> RDS >> Database

Wie schnell ist ODBC? Ein „geladener“ Vergleich.

Die Eröffnungsfrage

ODBC bekommt manchmal einen schlechten Ruf für Geschwindigkeit … aber sollte es das? Aufgrund dessen, was online gepostet wird, könnte man meinen, dass ODBC von Natur aus langsam ist:

Microsoft widerspricht im Fall von SQL Server. In ODBC mit Microsoft SQL Server verwenden , Amrish Kumar und Alan Brewer sagen, dass ODBC so gut wie nativ ist:

Eines der hartnäckigen Gerüchte über ODBC ist, dass es von Natur aus langsamer als eine native DBMS-API ist. Diese Argumentation basiert auf der Annahme, dass ODBC-Treiber als zusätzliche Schicht über einer nativen DBMS-API implementiert werden müssen, um die ODBC-Anweisungen, die von der Anwendung kommen, in die nativen DBMS-API-Funktionen und die SQL-Syntax zu übersetzen. Dieser Übersetzungsaufwand fügt im Vergleich zu einem direkten Aufruf der Anwendung an die native API eine zusätzliche Verarbeitung hinzu. Diese Annahme gilt für einige ODBC-Treiber, die über eine native DBMS-API implementiert werden, aber der Microsoft SQL Server-ODBC-Treiber wird nicht auf diese Weise implementiert. … Tests von Microsoft haben gezeigt, dass die Leistung von ODBC-basierten und DB-Library-basierten SQL Server-Anwendungen ungefähr gleich ist.

Laut Oracle läuft der ODBC-Treiber im Durchschnitt nur etwa 3 % langsamer als der native Oracle-Zugriff. Aber ihr ODBC-Treiber gehört möglicherweise nicht Ihnen und Ihre Laufleistung variiert.

Unsere Benutzer fragen oft, wann es besser ist, ODBC oder einen Offline-Flatfile-Ansatz für die Datenverarbeitung zu verwenden – für den IRI am besten bekannt ist – bei Vorgängen mit sehr großen Datenbanken (VLDB) wie:

  • ETL (Extraktion, Transformation und Laden)
  • Offline-Reorgs
  • Migration und Replikation
  • Datenmaskierung
  • Generierung/Population von Testdaten 

Unsere allgemeine Antwort lautet, dass das Datenvolumen das Paradigma der Datenbewegung bestimmen sollte. Wir haben uns vorgenommen, diesen Ratschlag mit einem einfachen Benchmark zum Auffüllen (Laden) von Datenbanken zu testen.

Vergleich zweier Paradigmen

Beachten Sie, dass wir uns hier nur mit ODBC im Vergleich zu dateibasierter Massendatenverschiebung und nicht mit JDBC oder anderen Mitteln zur Verteilung von Daten wie Hadoop befassen. Wir haben auch keine anderen Wege in Betracht gezogen, die zur Verbesserung der Datenerfassung angepriesen werden, wie NoSQL, oder Bereitstellung, wie Teradata FastLoad.


ODBC (Open Database Connectivity)

ODBC bietet eine Möglichkeit für Client-Programme, bequem auf eine Vielzahl von Datenbanken und Datenquellen zuzugreifen, die mit ODBC kompatibel sind.

ODBC erreicht DBMS-Unabhängigkeit, indem es einen ODBC-Treiber als Übersetzungsschicht zwischen der Anwendung und dem DBMS verwendet. Die Anwendung verwendet ODBC-Funktionen über einen ODBC-Treibermanager, mit dem sie verknüpft ist, und der Treiber übergibt den Abfrage- oder Aktualisierungsbefehl an das DBMS.

Um eine Tabelle über ODBC in IRI-Software wie dem Programm CoSort SortCL zu füllen, geben Sie den Ausgabeprozesstyp als ODBC an. Ein Beispielskript, das auf Spalten in einer Tabelle statt auf eine Datei oder Prozedur ausgerichtet ist, könnte dieses Layout enthalten:

/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)

Das standardmäßige ODBC-Auffüllungsverhalten in SortCL innerhalb von Jobs für:IRI CoSort (Massentransformationen und Sortierung vor dem Laden), IRI NextForm (DB-Migration und -Replikation), IRI FieldShield (DB-Datenmaskierung und -verschlüsselung), IRI RowGen (DB-Testdatengenerierung) , oder IRI Voracity (alle oben genannten) ist /APPEND, wodurch Zeilen zu einer vorhandenen Tabelle hinzugefügt werden. Zusätzliche Optionen sind /CREATE zum Abschneiden und vollständigen Einfügen und /UPDATE zum selektiven Einfügen.


SQL*Loader 

SQL*Loader ist ein Oracle-Datenbankdienstprogramm, das Daten aus einer externen (flachen) Datei in eine vorhandene Tabelle auf demselben System oder über ein Netzwerk lädt. SQL*Loader unterstützt verschiedene Zieltabellenformate und kann sowohl das selektive als auch das Laden mehrerer Tabellen handhaben.

Die Daten können aus einer beliebigen Textdatei geladen und in die Datenbank eingefügt werden. Mit dem Befehl sqlldr (auf einigen Plattformen sqlload) kann eine Tabelle per Bulk-Load aus der Shell geladen werden. Führen Sie es ohne Argumente aus, um eine Liste der verfügbaren Parameter zu erhalten.

In IRI ETL- und Reorg-Szenarien, in denen die Flatfile-Daten nach dem längsten Indexschlüssel der Zieltabelle vorsortiert sind, lautet die Ladebefehlssyntax:

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

wobei die .ctl-Loader-Steuerdatei Folgendes enthält:

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}")

Das folgende Diagramm vergleicht die durchschnittliche Zeit, die Oracle XE 11gR2 auf einem Windows-Server benötigte, um mit fünf verschiedenen vorsortierten Dateien unter Verwendung von ODBC-Einfügungen und SQL*Loader gefüllt zu werden:

Anzahl Datensätze DB-Auffüllung über SQL*Loader DB-Auffüllung über ODBC
2,5 Millionen 10,25 Sekunden 58,25 Sekunden
2 Millionen 6,25 Sekunden 24,25 Sekunden
1 Million 5,25 Sekunden 11,5 Sekunden
1/2 Million 4 Sekunden 5,5 Sekunden
1/4 Million 2,75 Sekunden 4,25 Sekunden

Schlussfolgerung für IRI-Nutzer

Wir haben festgestellt, dass IRI FieldShield-Benutzer normalerweise mit ODBC zufrieden sind, da es bequemer und schnell genug für die dynamische Datenmaskierung und die statische Datenmaskierung von Tabellen mit weniger als einer Million Zeilen ist. Dasselbe gilt für weniger als große Datenzuordnungen, Föderationen oder Berichtsvorgänge in IRI CoSort oder IRI NextForm.

Für Massen-ETL- und Reorganisationsvorgänge in IRI Voracity funktionieren jedoch weiterhin die folgenden unterstützten Komponenten am besten:

  1. IRI FACT (Fast Extract) zum Entladen mit nativen Treibern wie OCI
  2. IRI CoSort für Big-Data-Transformation und Pre-Load-Sortierung [oder IRI RowGen für sortierte, referenziell korrekte Testdatengenerierung]
  3. Ihr DB-Ladedienstprogramm für Massenladevorgänge auf direktem Pfad

So schüchtern vor komplexen und kostspieligen Paradigmen wie NoSQL und Hadoop – die bewährte Flat-File-Methode ist immer noch der richtige Weg.