2011-08-15 18 views
9

मैं एक SQL सर्वर डेटाबेस से एक MYSQL डेटाबेस पर निरंतर और निरंतर थोक डेटा को स्थानांतरित करने का प्रयास कर रहा हूं। मैं एसक्यूएल सर्वर के एसएसएमएस की प्रतिकृति का उपयोग करना चाहता था लेकिन यह स्पष्ट रूप से केवल SQL सर्वर के लिए ओरेकल या आईबीएम डीबी 2 कनेक्शन के लिए है। वर्तमान में हम डेटा को बदलने के लिए एसएसआईएस का उपयोग कर रहे हैं और इसे MYSQL डेटाबेस पर एक अस्थायी स्थान पर धक्का दे रहे हैं जहां इसकी प्रतिलिपि बनाई गई है। मैं डेटा स्थानांतरित करने का सबसे तेज़ तरीका चाहता हूं और कई तरीकों से जटिलता चाहता हूं।SQL सर्वर से MySQL डेटा स्थानांतरण

मेरे पास एक नया तरीका है जो मैं डेटा को बदलने पर योजना बना रहा हूं जो मुझे यकीन है कि ज्यादातर समय के मुद्दों को हल करेंगे लेकिन मैं यह सुनिश्चित करना चाहता हूं कि हम भविष्य में समय की समस्याओं में भाग न लें। मैंने एक लिंक किया हुआ सर्वर स्थापित किया है जो SQL सर्वर और MYSQL के बीच बात करने के लिए एक MYSQL ODBC ड्राइवर का उपयोग करता है। यह बहुत धीमा लगता है। मेरे पास कुछ कोड है जो माइक्रोसॉफ्ट के ओडीबीसी ड्राइवर का भी उपयोग करता है लेकिन इतना छोटा उपयोग किया जाता है कि मैं प्रदर्शन को गेज नहीं कर सकता। क्या किसी को इन दो डेटाबेस के बीच संवाद करने के तेज तरीकों को हल्का करने का पता है? मैं MYSQL के डेटा प्रदाताओं का शोध कर रहा हूं जो ओलेडीबी परत के साथ संवाद करने लगते हैं। मुझे यकीन नहीं है कि क्या विश्वास करना है और किसी भी विचार की दिशा में आगे बढ़ने का तरीका क्या है?

उत्तर

1

मैंने जावा में जेडीबीसी-ओडीबीसी पुल का उपयोग अतीत में ऐसा करने के लिए किया था, लेकिन ओडीबीसी के माध्यम से प्रदर्शन बहुत अच्छा नहीं है।

import groovy.sql.Sql 
sql = Sql.newInstance('jdbc:jtds:sqlserver://serverName/dbName-CLASS;domain=domainName',  
'username', 'password', 'net.sourceforge.jtds.jdbc.Driver') 
sql.eachRow('select * from tableName') { 
    println "$it.id -- ${it.firstName} --" 
    // probably write to mysql connection here or write to file, compress, transfer, load 
} 

निम्नलिखित प्रदर्शन नंबर आप यह कैसे प्रदर्शन कर सकते हैं के लिए एक महसूस: http://jtds.sourceforge.net/benchTest.html मैं http://jtds.sourceforge.net/ की तरह कुछ है कि आप की तरह निम्नलिखित एक सरल ग्रूवी स्क्रिप्ट में ड्रॉप कर सकते हैं एक शुद्ध जावा ड्राइवर है पर देख रहे हैं सुझाव है कि

आपको डेटा को एक एमएसक्यूएल डंपफाइल प्रारूप में डंप करने और पंक्ति द्वारा पंक्ति लिखने के बजाय mysql loaddata का उपयोग करने के कुछ प्रदर्शन लाभ मिल सकते हैं। यदि आप इन्फाइल लोड करते हैं और परमाणु तालिका स्वैप जैसी चीजें करते हैं तो MySQL में बड़े डेटा सेट के लिए कुछ महत्वपूर्ण प्रदर्शन सुधार होते हैं।

हम इस तरह कुछ उपयोग करते हैं ताकि बड़े डेटाफाइल को एक सिस्टम से दूसरे सिस्टम में mysql में तेज़ी से लोड किया जा सके। MySQL में डेटा लोड करने के लिए यह सबसे तेज़ तंत्र है। लेकिन पंक्ति से वास्तविक समय पंक्ति क्या हो सकती है, यह जानने के लिए कि कुछ पंक्तियों को स्थानांतरित किया गया है, इस बात को ध्यान में रखते हुए ग्रोवी + कुछ टेबल में करने के लिए एक साधारण पाश हो सकता है।

mysql>

select * from table into outfile 'tablename.dat'; 
myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename' 
load data infile 'tablename.dat' into table tablename; 
myisamchk -rq /data/mysql/schema_name/tablename 
flush tables; 
exit; 

rm 'tablename.dat

1

SQL डेटा को स्थानांतरित करने के लिए मुझे सबसे अच्छा तरीका मिला है (यदि आपके पास स्थान है) एक भाषा में एक एसक्यूएल डंप है और उसके बाद SQL डंप को परिवर्तित करने के लिए कनवर्टिंग सॉफ़्टवेयर टूल (या पर्ल स्क्रिप्ट, दोनों प्रचलित हैं) का उपयोग करने के लिए एमएसएसक्यूएल से MySQL तक। this पर मेरा उत्तर देखें कि आपको किस कनवर्टर में दिलचस्पी हो सकती है :)।

0

हमने एसएसआईएस में mysql के लिए ads.net ड्राइवर का उपयोग काफी सफलता के साथ किया है। असल में, एकीकरण सेवाओं के साथ मशीन पर ड्राइवर स्थापित करें, बोलियां पुनरारंभ करें, और जब आप ado.net कनेक्शन प्रबंधक बनाते हैं तो इसे ड्राइवर सूची में दिखाना चाहिए।

प्रतिकृति के लिए, आप वास्तव में क्या करने की कोशिश कर रहे हैं?

यदि आप परिवर्तनों की निगरानी कर रहे हैं, तो इसे धीरे-धीरे बदलते आयाम (डेटा वेयरहाउस शब्दावली, लेकिन एक ही प्रिंसिपल लागू होता है) के रूप में इसका इलाज करें। नए रिकॉर्ड डालें, बदले गए रिकॉर्ड अपडेट करें।

यदि आप केवल नए रिकॉर्ड में रुचि रखते हैं और पहले लोड किए गए डेटा को अपडेट करने की कोई योजना नहीं है, तो वृद्धिशील लोड रणनीति का प्रयास करें। रिकॉर्ड डालें जहां source.id> अधिकतम (destination.id)।

पैकेज का परीक्षण करने के बाद, प्रत्येक एक्स मिनट में पैकेज चलाने के लिए एसक्यूएल सर्वर एजेंट में नौकरी निर्धारित करें।

0

कू निम्नलिखित भी कोशिश कर सकता है। http://kofler.info/english/mssql2mysql/

मैंने इसे लंबे समय से पहले करने की कोशिश की और यह मेरे लिए काम किया। लेकिन मैंने आपको इसकी सिफारिश नहीं की है। असली समस्या क्या है, आप क्या करने का प्रयास करते हैं? क्या आपको एक एमएसएसएलएल डीबी कनेक्शन नहीं मिलता है, उदाहरण के लिए लिनक्स से?

संबंधित मुद्दे