प्रारंभिक प्रश्न
ओडीबीसी को कभी-कभी गति के लिए खराब रैप मिलता है ... लेकिन क्या यह होना चाहिए? आपने जो ऑनलाइन पोस्ट किया है उससे आप सोचेंगे कि ODBC आंतरिक रूप से धीमा है:
Microsoft SQL सर्वर के मामले में असहमत है। Microsoft SQL सर्वर के साथ ODBC का उपयोग करना . में , अमरीश कुमार और एलन ब्रेवर का कहना है कि ODBC मूल निवासी जितना ही अच्छा है:
<ब्लॉकक्वॉट>ODBC के बारे में लगातार अफवाहों में से एक यह है कि यह मूल DBMS API की तुलना में स्वाभाविक रूप से धीमा है। यह तर्क इस धारणा पर आधारित है कि ओडीबीसी ड्राइवरों को मूल डीबीएमएस एपीआई पर एक अतिरिक्त परत के रूप में लागू किया जाना चाहिए, जो आवेदन से आने वाले ओडीबीसी बयानों को मूल डीबीएमएस एपीआई फ़ंक्शंस और एसक्यूएल सिंटैक्स में अनुवादित करता है। यह अनुवाद प्रयास एप्लिकेशन कॉल को सीधे मूल API से करने की तुलना में अतिरिक्त संसाधन जोड़ता है। देशी डीबीएमएस एपीआई पर लागू किए गए कुछ ओडीबीसी ड्राइवरों के लिए यह धारणा सही है, लेकिन माइक्रोसॉफ्ट एसक्यूएल सर्वर ओडीबीसी ड्राइवर इस तरह से लागू नहीं किया गया है। … माइक्रोसॉफ्ट के परीक्षण से पता चला है कि ओडीबीसी-आधारित और डीबी-लाइब्रेरी-आधारित SQL सर्वर अनुप्रयोगों का प्रदर्शन लगभग बराबर है।
Oracle के अनुसार, उनका ODBC ड्राइवर, मूल Oracle एक्सेस की तुलना में औसतन केवल 3% धीमा चलता है। लेकिन हो सकता है कि उनका ODBC ड्राइवर आपका न हो, और आपका माइलेज अलग-अलग होगा।
हमारे उपयोगकर्ता अक्सर पूछते हैं कि ODBC या डेटा प्रबंधन के लिए एक ऑफ़लाइन, फ़्लैट-फ़ाइल दृष्टिकोण का उपयोग करना कब बेहतर है - जिसके लिए IRI सबसे अच्छी तरह से जाना जाता है - जैसे कि बहुत बड़े डेटाबेस (VLDB) संचालन के दौरान:
- ETL (एक्सट्रैक्शन, ट्रांसफ़ॉर्मेशन, और लोडिंग)
- ऑफ़लाइन पुनर्गठन
- प्रवास और प्रतिकृति
- डेटा मास्किंग
- डेटा जनरेशन/जनसंख्या का परीक्षण करें
हमारा सामान्य उत्तर यह है कि डेटा वॉल्यूम को डेटा मूवमेंट प्रतिमान निर्धारित करना चाहिए। हम एक साधारण डेटाबेस आबादी (लोडिंग) बेंचमार्क के साथ उस सलाह का परीक्षण करने के लिए निकल पड़े।
दो प्रतिमान की तुलना करना
ध्यान दें कि यहां हम केवल ODBC बनाम बल्क, फ़ाइल-आधारित डेटा मूवमेंट को देख रहे हैं, न कि JDBC या डेटा वितरित करने के अन्य साधनों, जैसे Hadoop को। हमने डेटा अधिग्रहण को बेहतर बनाने के लिए बताए गए अन्य तरीकों पर भी विचार नहीं किया, जैसे NoSQL, या डिलीवरी, जैसे कि टेराडेटा फास्टलोड।
ODBC (ओपन डेटाबेस कनेक्टिविटी)
ODBC क्लाइंट प्रोग्राम को ODBC के साथ संगत डेटाबेस और डेटा स्रोतों की एक विस्तृत श्रृंखला तक आसानी से पहुंचने का एक तरीका प्रदान करता है।
ODBC एप्लिकेशन और DBMS के बीच अनुवाद परत के रूप में ODBC ड्राइवर का उपयोग करके DBMS स्वतंत्रता प्राप्त करता है। एप्लिकेशन ODBC ड्राइवर मैनेजर के माध्यम से ODBC फ़ंक्शन का उपयोग करता है जिसके साथ यह जुड़ा हुआ है, और ड्राइवर DBMS को क्वेरी या अपडेट कमांड भेजता है।
CoSort SortCL प्रोग्राम जैसे IRI सॉफ़्टवेयर में ODBC के माध्यम से तालिका को पॉप्युलेट करने के लिए, आउटपुट प्रक्रिया प्रकार को 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)
नौकरियों के भीतर SortCL में डिफ़ॉल्ट ODBC जनसंख्या व्यवहार:IRI CoSort (बल्क ट्रांसफ़ॉर्म और प्री-लोड सॉर्टिंग), IRI नेक्स्टफ़ॉर्म (DB माइग्रेशन और प्रतिकृति), IRI फ़ील्डशील्ड (DB डेटा मास्किंग और एन्क्रिप्शन), IRI RowGen (DB टेस्ट डेटा जनरेशन) , या IRI Voracity (उपर्युक्त सभी) /APPEND है, जो मौजूदा तालिका में पंक्तियों को जोड़ता है। अतिरिक्त विकल्प हैं /CREATE, ट्रंकेट और फुल इंसर्ट के लिए, और /UPDATE चुनिंदा इंसर्ट के लिए।
एसक्यूएल*लोडर
SQL*Loader एक Oracle डेटाबेस उपयोगिता है जो किसी बाहरी (फ्लैट) फ़ाइल से डेटा को उसी सिस्टम या नेटवर्क पर मौजूदा तालिका में लोड करती है। SQL*Loader विभिन्न लक्ष्य तालिका स्वरूपों का समर्थन करता है, और चुनिंदा और एकाधिक तालिका लोडिंग दोनों को संभाल सकता है।
डेटा को किसी भी टेक्स्ट फ़ाइल से लोड किया जा सकता है और डेटाबेस में डाला जा सकता है। कोई व्यक्ति sqldr (कुछ प्लेटफ़ॉर्म पर sqlload) कमांड का उपयोग करके शेल से किसी तालिका को बल्क लोड कर सकता है। उपलब्ध मापदंडों की सूची प्राप्त करने के लिए इसे बिना तर्क के चलाएं।
IRI ETL और रीऑर्ग परिदृश्यों में, जिसमें फ़्लैट-फ़ाइल डेटा लक्ष्य तालिका की सबसे लंबी इंडेक्स कुंजी पर पहले से सॉर्ट किया जाता है, लोड कमांड सिंटैक्स होता है:
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}")
नीचे दिया गया ग्राफ़ ओडीबीसी इंसर्शन और SQL*लोडर दोनों का उपयोग करके पांच अलग-अलग प्री-सॉर्ट की गई फाइलों के साथ विंडोज सर्वर पर Oracle XE 11gR2 को पॉप्युलेट करने में लगने वाले औसत समय की तुलना करता है:
# रिकॉर्ड्स | SQL*Loader के माध्यम से DB जनसंख्या | ODBC के माध्यम से DB जनसंख्या |
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 CoSort या IRI NextForm में कम-से-विशाल डेटा मैपिंग, फ़ेडरेशन या रिपोर्टिंग संचालन के लिए भी यही सच है।
आईआरआई वोरासिटी में बल्क ईटीएल और रीऑर्ग संचालन के लिए, हालांकि, जो सबसे अच्छा काम करना जारी रखता है, वे हैं समर्थित घटक:
- IRI FACT (फास्ट एक्सट्रैक्ट) OCI जैसे स्थानीय ड्राइवरों का उपयोग करके अनलोड करने के लिए
- बड़े डेटा ट्रांसफ़ॉर्मेशन और प्री-लोड सॉर्टिंग के लिए IRI CoSort [या सॉर्ट किए गए, रेफ़रेंशियल रूप से सही टेस्ट डेटा जनरेशन के लिए IRI RowGen]
- बल्क, डायरेक्ट पाथ लोड के लिए आपकी डीबी लोड उपयोगिता
NoSQL और Hadoop जैसे जटिल और महंगे प्रतिमानों से शर्मीला है — भरोसेमंद फ़्लैट-फ़ाइल पद्धति अभी भी जाने का रास्ता है।