Database
 sql >> Baza danych >  >> RDS >> Database

Jak szybki jest ODBC? Porównanie „załadowane”.

Pytanie otwierające

ODBC czasami źle ocenia szybkość… ale czy powinien? Można by pomyśleć z tego, co zostało opublikowane online, że ODBC jest z natury powolne:

Microsoft nie zgadza się w przypadku SQL Server. W Korzystanie z ODBC z Microsoft SQL Server , Amrish Kumar i Alan Brewer twierdzą, że ODBC jest równie dobre, jak natywne:

Jedną z uporczywych plotek na temat ODBC jest to, że jest z natury wolniejszy niż natywne API DBMS. To rozumowanie opiera się na założeniu, że sterowniki ODBC muszą być zaimplementowane jako dodatkowa warstwa w stosunku do natywnego API DBMS, tłumacząc instrukcje ODBC pochodzące z aplikacji na natywne funkcje API DBMS i składnię SQL. Ten wysiłek związany z tłumaczeniem zapewnia dodatkowe przetwarzanie w porównaniu z bezpośrednim wywoływaniem aplikacji do natywnego interfejsu API. To założenie jest prawdziwe w przypadku niektórych sterowników ODBC zaimplementowanych przez natywny interfejs API DBMS, ale sterownik ODBC Microsoft SQL Server nie jest zaimplementowany w ten sposób. … Testy firmy Microsoft wykazały, że wydajność aplikacji SQL Server opartych na ODBC i DB-Library jest mniej więcej taka sama.

Według Oracle, ich sterownik ODBC działa średnio tylko o około 3% wolniej niż natywny dostęp do Oracle. Ale ich sterownik ODBC może nie być Twój, a Twój przebieg będzie się różnić.

Nasi użytkownicy często pytają, kiedy lepiej jest używać ODBC lub podejścia offline do obsługi danych w postaci plików płaskich — z którego IRI jest najbardziej znana — podczas operacji na bardzo dużych bazach danych (VLDB), takich jak:

  • ETL (rozpakowywanie, transformacja i ładowanie)
  • reorganizacje offline
  • migracja i replikacja
  • maskowanie danych
  • Generowanie/populowanie danych testowych

Naszą ogólną odpowiedzią jest to, że ilość danych powinna określać paradygmat przenoszenia danych. Postanowiliśmy przetestować tę poradę za pomocą prostego testu porównawczego populacji (ładowania) bazy danych.

Porównanie dwóch paradygmatów

Pamiętaj, że tutaj patrzymy tylko na ODBC i masowe, oparte na plikach przenoszenie danych, a nie na JDBC lub inne sposoby dystrybucji danych, takie jak Hadoop. Nie braliśmy również pod uwagę innych reklamowanych sposobów poprawy pozyskiwania danych, takich jak NoSQL lub dostarczanie, takich jak Teradata FastLoad.


ODBC (Open Database Connectivity)

ODBC zapewnia programom klienckim wygodny dostęp do szerokiej gamy baz danych i źródeł danych zgodnych z ODBC.

ODBC zapewnia niezależność od DBMS, używając sterownika ODBC jako warstwy translacji między aplikacją a DBMS. Aplikacja korzysta z funkcji ODBC poprzez menedżera sterowników ODBC, z którym jest połączona, a sterownik przekazuje zapytanie lub polecenie aktualizacji do DBMS.

Aby wypełnić tabelę za pomocą ODBC w oprogramowaniu IRI, takim jak program CoSort SortCL, określ typ procesu wyjściowego jako ODBC. Przykładowy skrypt kierujący na kolumny w tabeli, a nie na plik lub procedurę, może zawierać następujący układ:

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

Domyślne zachowanie populacji ODBC w SortCL w ramach zadań dla:IRI CoSort (przekształcenia zbiorcze i sortowanie wstępnego ładowania), IRI NextForm (migracja i replikacja DB), IRI FieldShield (maskowanie i szyfrowanie danych DB), IRI RowGen (generowanie danych testowych DB) lub IRI Voracity (wszystkie powyższe) to /APPEND, który dodaje wiersze do istniejącej tabeli. Dodatkowe opcje to /CREATE, dla obcinania i pełnego wstawiania oraz /UPDATE dla selektywnego wstawiania.


Program ładujący SQL*

SQL*Loader to narzędzie bazy danych Oracle, które ładuje dane z zewnętrznego (płaskiego) pliku do istniejącej tabeli w tym samym systemie lub w sieci. SQL*Loader obsługuje różne formaty tabel docelowych i może obsługiwać zarówno ładowanie selektywne, jak i wielokrotne.

Dane można wczytać z dowolnego pliku tekstowego i wstawić do bazy danych. Można zbiorczo załadować tabelę z powłoki za pomocą polecenia sqlldr (sqlload na niektórych platformach). Uruchom go bez argumentów, aby uzyskać listę dostępnych parametrów.

W scenariuszach IRI ETL i reorg, w których dane w postaci pliku płaskiego są wstępnie sortowane według najdłuższego klucza indeksu tabeli docelowej, składnia polecenia ładowania wygląda następująco:

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

gdzie plik kontrolny programu ładującego .ctl zawiera:

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

Poniższy wykres porównuje średni czas potrzebny do wypełnienia Oracle XE 11gR2 na serwerze Windows pięcioma różnymi wstępnie posortowanymi plikami przy użyciu zarówno wstawek ODBC, jak i programu SQL*Loader:

Liczba rekordów Populacja bazy danych przez program ładujący SQL* Populacja DB przez ODBC
2,5 miliona 10,25 sekundy 58,25 sekundy
2 miliony 6,25 sekundy 24,25 sekundy
1 milion 5,25 sekundy 11,5 sekundy
1/2 miliona 4 sekundy 5,5 sekundy
1/4 miliona 2,75 sekundy 4,25 sekundy

Wniosek dla użytkowników IRI

Odkryliśmy, że użytkownicy IRI FieldShield zazwyczaj dobrze sobie radzą z ODBC, ponieważ jest to wygodniejsze i wystarczająco szybkie rozwiązanie do dynamicznego maskowania danych i statycznego maskowania danych w tabelach zawierających mniej niż milion wierszy. To samo dotyczy mniej niż dużych operacji mapowania danych, federacji lub raportowania w IRI CoSort lub IRI NextForm.

Jednak w przypadku masowych operacji ETL i reorg w IRI Voracity nadal najlepiej działają te obsługiwane komponenty:

  1. IRI FACT (szybka ekstrakcja) dla wyładowań przy użyciu natywnych sterowników, takich jak OCI
  2. IRI CoSort do transformacji dużych zbiorów danych i sortowania wstępnego ładowania [lub IRI RowGen do posortowanego, referencyjnego generowania danych testowych]
  3. Twoje narzędzie do ładowania bazy danych do zbiorczego, bezpośredniego ładowania ścieżki

Tak więc nieśmiały wobec skomplikowanych i kosztownych paradygmatów, takich jak NoSQL i Hadoop — godna zaufania metoda plików płaskich jest nadal do zrobienia.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klucze SQL, unikalne i podstawowe

  2. Uzupełnianie SQL. Historie sukcesu i porażki

  3. Kilka sposobów na wstawienie dzielonych ciągów rozdzielanych w kolumnie

  4. Jak analizować stan indeksów bazy danych

  5. Tworzenie środowiska testowego z repozytorium produkcyjnego