Database
 sql >> база данни >  >> RDS >> Database

Колко бърз е ODBC? „Заредено“ сравнение.

Началният въпрос

Понякога ODBC получава лоши оценки за скорост... но трябва ли? От публикуваното онлайн бихте си помислили, че ODBC по своята същност е бавен:

Microsoft не е съгласен в случая със SQL Server. В Използване на ODBC с Microsoft SQL Server , Амриш Кумар и Алън Брюър казват, че ODBC е толкова добър, колкото е натив:

Един от постоянните слухове за ODBC е, че по своята същност е по-бавен от естествения DBMS API. Това разсъждение се основава на предположението, че ODBC драйверите трябва да бъдат внедрени като допълнителен слой върху собствен DBMS API, превеждайки ODBC изразите, идващи от приложението в собствените функции на DBMS API и SQL синтаксис. Това усилие за превод добавя допълнителна обработка в сравнение с извикването на приложението директно към естествения API. Това предположение е вярно за някои ODBC драйвери, внедрени върху собствен API на DBMS, но ODBC драйверът на Microsoft SQL Server не е внедрен по този начин. … Тестването на Microsoft показа, че производителността на базираните на ODBC и базирани на DB приложения на SQL Server е приблизително еднаква.

Според Oracle техният ODBC драйвер средно работи само с около 3% по-бавно от естествения достъп на Oracle. Но техният ODBC драйвер може да не е ваш и пробегът ви ще  варира.

Нашите потребители често питат кога е по-добре да се използва ODBC или офлайн подход с плосък файл за обработка на данни — с който IRI е най-известен — по време на операции с много голяма база данни (VLDB) като:

  • ETL (извличане, трансформиране и зареждане)
  • офлайн реорганизации
  • миграция и репликация
  • маскиране на данни
  • генериране/популация на тестови данни 

Общият ни отговор е, че обемът на данните трябва да определя парадигмата за движение на данните. Поставихме се да тестваме този съвет с обикновен сравнителен тест за популация на база данни (зареждане).

Сравняване на две парадигми

Имайте предвид, че тук разглеждаме само ODBC срещу групово, базирано на файлове движение на данни, а не JDBC или други средства за разпространение на данни, като Hadoop. Също така не разгледахме други начини, рекламирани за подобряване на събирането на данни, като NoSQL, или доставката, като Teradata FastLoad.


ODBC (свързване с отворена база данни)

ODBC предоставя начин на клиентските програми за удобен достъп до широк набор от бази данни и източници на данни които са съвместими с ODBC.

ODBC постига независимост на СУБД, като използва ODBC драйвер като транслационен слой между приложението и СУБД. Приложението използва ODBC функции чрез ODBC мениджър на драйвери, с който е свързано, и драйверът предава заявката или командата за актуализиране към СУБД.

За да попълните таблица чрез ODBC в IRI софтуер като програмата CoSort SortCL, посочете типа на изходния процес като ODBC. Примерен скрипт, насочен към колони в таблица, а не във файл или процедура, може да съдържа това оформление:

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

Поведението на популацията на ODBC по подразбиране в SortCL в рамките на работни места за:IRI CoSort (групови трансформации и сортиране с предварително зареждане), IRI NextForm (миграция и репликация на DB), IRI FieldShield (маскиране и криптиране на DB данни), IRI RowGen (генериране на тестови данни от DB) , или IRI Voracity (всички изброени по-горе) е /APPEND, което добавя редове към съществуваща таблица. Допълнителни опции са /CREATE за съкращаване и пълно вмъкване и /UPDATE за селективно вмъкване.


SQL*Loader 

SQL*Loader е помощна програма за база данни на Oracle, която зарежда данни от външен (плосък) файл в съществуваща таблица в същата система или в мрежа. SQL*Loader поддържа различни формати на целеви таблици и може да обработва както селективно, така и множествено зареждане на таблици.

Данните могат да бъдат заредени от всеки текстов файл и вмъкнати в базата данни. Човек може да зареди групово таблица от обвивката с помощта на командата sqlldr (sqlload на някои платформи). Изпълнете го без аргументи, за да получите списък с налични параметри.

В сценарии на IRI ETL и reorg, при които данните от плоския файл са предварително сортирани по най-дългия индексен ключ на целевата таблица, синтаксисът на командата за зареждане е:

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

където контролният файл за зареждане .ctl съдържа:

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

Графиката по-долу сравнява средното време, необходимо на Oracle XE 11gR2 на сървър на Windows, за да бъде попълнен с пет различни предварително сортирани файла, като се използват както ODBC вмъквания, така и SQL*Loader:

# записи Попълване на DB чрез SQL*Loader Популация на DB чрез ODBC
2,5 милиона 10,25 секунди 58,25 секунди
2 милиона 6,25 секунди 24,25 секунди
1 милион 5,25 секунди 11,5 секунди
1/2 милиона 4 секунди 5,5 секунди
1/4 милиона 2,75 секунди 4,25 секунди

Заключение за потребители на IRI

Открихме, че потребителите на IRI FieldShield обикновено се справят добре с ODBC, защото е по-удобен и достатъчно бърз за динамично маскиране на данни и статично маскиране на данни на таблици с по-малко от милион реда. Същото важи и за операциите за картографиране, обединяване или отчитане на по-малко от огромни данни в IRI CoSort или IRI NextForm.

За групови операции по ETL и reorg в IRI Voracity обаче това, което продължава да работи най-добре, са тези поддържани компоненти:

  1. IRI FACT (Бързо извличане) за разтоварвания с помощта на естествени драйвери като OCI
  2. IRI CoSort за трансформиране на големи данни и сортиране с предварително зареждане [или IRI RowGen за сортирано, референтно правилно генериране на тестови данни]
  3. Вашата помощна програма за зареждане на DB за групови зареждания по директен път

Толкова срамежлив от сложни и скъпи парадигми като NoSQL и Hadoop — надеждният метод за плосък файл все още е правилният начин.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изследване на Java Unit Testing с JUnit Test Framework

  2. SQL BETWEEN оператор за начинаещи

  3. Таблица за промяна на SQL

  4. Как да инсталирате Nextcloud 15 на Ubuntu 18.04

  5. Проследяване на актуализации на синхронни статистически данни