2010-09-23 15 views
9

के साथ बातचीत करें हमने अपनी समस्या का पूर्ण आयामी डेटाबेस मॉडल तैयार करने के लिए कड़ी मेहनत की है, और अब यह कोडिंग शुरू करने का समय है। हमारी पिछली परियोजनाओं ने स्ट्रिंग मैनिपुलेशन द्वारा निर्मित हाथ से तैयार किए गए प्रश्नों का उपयोग किया है।पायथन: जटिल डेटा वेयरहाउस

क्या पाइथन और जटिल डेटाबेस लेआउट के बीच इंटरफेसिंग के लिए कोई सर्वोत्तम/मानक अभ्यास है?

मैंने संक्षेप में एसक्लाक्लेमी, एसक्यूएलबीजेक्ट, और डीजेगो-ओआरएम का मूल्यांकन किया है, लेकिन (मुझे आसानी से कुछ याद आ रहा है) वे छोटे वेब-प्रकार (ओएलटीपी) लेनदेन के लिए देखते हैं, जहां मैं उच्च मात्रा विश्लेषणात्मक (ओलाप) लेनदेन।

मेरी आवश्यकताओं में से कुछ है कि सामान्य से अधिक कुछ अलग हो सकता है:

  1. लोड बड़े अपेक्षाकृत जल्दी
  2. अद्यतन डेटा की मात्रा/जल्दी से डेटा की थोड़ी मात्रा डालने और आसानी से
  3. की बड़ी संख्या को संभालने आसानी से पंक्तियों (5 वर्षों में प्रति मिनट 300 प्रविष्टियों)
  4. भावी आवश्यकताओं
के लिए, स्कीमा में संशोधन के लिए अनुमति देते हैं

इन प्रश्नों को लिखना आसान है, लेकिन सभी पंक्तिबद्ध डेटा प्राप्त करने के लिए कोड लिखना कठिन है, खासकर स्कीमा विकसित होता है। ऐसा लगता है कि एक कंप्यूटर अच्छा हो सकता है?

+1

मैं इसे एक टिप्पणी के रूप में जोड़ूंगा, लेकिन आम तौर पर ओआरएम का उपयोग ओएलटीपी के लिए किया जाता है, और डेटा वेयरहाउस मैपिंग में उन्हें शूहोर्न करने की कोशिश करना आमतौर पर इसके लायक होने से अधिक परेशानी होती है। – nos

+0

जबकि ओआरएम का उपयोग OLTP के लिए किया जा सकता है, वे कुछ प्रकार के डेटा गोदाम प्रसंस्करण को सरल बना सकते हैं। अधिकांश डीडब्ल्यू प्रश्न ** ** सरल 'चयन राशि/गिनती और समूह-द्वारा' संचालन होना चाहिए। इन्हें ओआरएम उपकरण द्वारा उत्पन्न करने के बाद एक बड़ा समय बचा सकता है। –

+0

क्या अंतिम उपयोगकर्ताओं द्वारा प्रश्नों को उत्पन्न किया जा रहा है? आप कौन सा इंटरफेस प्रदान कर रहे हैं, और स्वतंत्रता के स्तर क्या हैं? – shmichael

उत्तर

2

निश्चित रूप से SQLAlchemy। स्क्लाक्लेमी की तुलना में, अन्य सभी ओआरएम बच्चे के खिलौने की तरह दिखते हैं। विशेष रूप से Django-ORM। जावा के लिए हाइबरनेट क्या है, स्क्लेक्लेमी पायथन है।

+0

मैंने एसए ओआरएम को तीन बार सीखने की कोशिश की है और हर बार जब मैं पूरी तरह से विचित्र त्रुटियों के खिलाफ आती हूं जो मुझे इसे फिर से छूना नहीं चाहती हैं। आपने इसे कैसे सीखा? – bukzor

+0

दस्तावेज़ीकरण और कोडिंग। – dekomote

+0

"पूरी तरह से विचित्र त्रुटियां" या "मेरी धारणाएं जो एसए से असत्य साबित हुईं"? अक्सर, हम धारणाएं बनाते हैं, पाते हैं कि सॉफ्टवेयर हमारी मान्यताओं से मेल नहीं खाता है, और पूरी चीज को "विचित्र" कहता है। विवरण के बिना, आपके दावे का मूल्यांकन करना असंभव है। यदि आपको समस्याएं हैं, तो कृपया उन्हें प्रश्न के रूप में पोस्ट करें। –

6

अपनी आवश्यकताओं से भ्रमित न हों। एक साइज सबके लिए फ़िट नहीं होता है। अपेक्षाकृत जल्दी

क्यों इस के लिए डेटाबेस के मूल लोडर का उपयोग नहीं डेटा की

लोड बड़ी मात्रा में? फ़ाइलों को तैयार करने के लिए पाइथन का प्रयोग करें, लेकिन लोड करने के लिए डेटाबेस टूल्स का उपयोग करें। आप पाएंगे कि यह आश्चर्यजनक रूप से तेज़ है।

अद्यतन/डेटा की थोड़ी मात्रा जल्दी से डाल सकते हैं और आसानी से

एक डेटा गोदाम के नियमों मोड़ के लिए शुरू होता है। जब तक आप एक आयाम की रिपोर्टिंग विशेषताओं को अद्यतन करने के लिए मास्टर डेटा प्रबंधन के बारे में बात नहीं कर रहे हैं।

यही ओआरएम और वेब ढांचे के लिए है।

आसानी से पंक्तियों की बड़ी संख्या (5 वर्षों में प्रति मिनट 300 प्रविष्टियों) संभाल

फिर, यही कारण है कि आप अजगर सामने के अंत प्रसंस्करण की एक पाइप लाइन का उपयोग है, लेकिन वास्तविक सम्मिलित करें के डेटाबेस द्वारा किया जाता है उपकरण। पायथन नहीं

बदलने स्कीमा आसानी से (अजगर इंटरफेस के साथ), भावी आवश्यकताओं

के लिए आप इस स्वचालित के लिए लगभग किसी काम का नहीं है। यह निश्चित रूप से "प्रोग्रामिंग" के लिए आपका सबसे कम प्राथमिक कार्य है।डेटा को सही तरीके से संरक्षित करने के लिए आप अक्सर मैन्युअल रूप से ऐसा करेंगे।

बीटीडब्ल्यू, "स्ट्रिंग मैनिपुलेशन द्वारा निर्मित हाथ से तैयार प्रश्न" शायद सबसे बड़ी गलती है। आरडीबीएमएस पार्सर को संभालने के लिए ये कठिन हैं - वे उन प्रश्नों का उपयोग करने से धीमे हैं जिनमें बाध्य चर डाले गए हैं।

+0

धन्यवाद। "परिवर्तन" से मेरा क्या मतलब था "स्कीमा को लॉक न करें"। कई बार डेटाबेस के साथ बातचीत करते समय, आप संशोधित करने के लिए कोड की रेखाओं की एक निश्चित दहलीज तक पहुंच जाते हैं जहां स्कीमा को संपादित करने के लिए यह उचित नहीं है। यदि संभव हो तो मैं पूरी तरह से उस स्थिति से बचना चाहता हूं। – bukzor

+0

डेटाबेस में लोड करते समय, आप पुराने डेटा को ओवरलैप करने वाले नए डेटा को कैसे प्रबंधित करते हैं? या आप हर बार बस सभी डेटा लोड करते हैं? यह निषिद्ध रूप से अक्षम लगता है। – bukzor

+0

@ बुकर: डेटा वेयरहाउस (लगभग हमेशा) का अर्थ केवल डालने का मतलब है। नया डेटा --- परिभाषा के अनुसार - * नया * है और पुराने * ओवरलैप नहीं करता है। यह कुछ सामान्य कुंजी साझा कर सकता है, लेकिन यह * नया * है। आगे बढ़ने से पहले कृपया Kimball के डेटा वेयरहाउस टूलकिट की एक प्रति पाएं। –

3

मैं एक बहुत बड़े डाटावायरहाउस के साथ स्क्लेक्लेमी का उपयोग कर रहा हूं और मैं सफलतापूर्वक पूर्ण ईटीएल प्रक्रिया के लिए इसका उपयोग कर रहा हूं। विशेष रूप से कुछ स्रोतों में जहां मेरे पास कुछ जटिल परिवर्तन नियम हैं या कुछ विषम स्रोतों (जैसे वेब सेवाएं) हैं। मैं स्क्लेल्चेमी ओआरएम का उपयोग नहीं कर रहा हूं बल्कि इसकी एसक्यूएल अभिव्यक्ति भाषा का उपयोग कर रहा हूं क्योंकि मुझे ईटीएल प्रक्रिया में वस्तुओं के साथ कुछ भी मैप करने की ज़रूरत नहीं है। यह ध्यान देने योग्य है कि जब मैं कुछ स्रोतों की एक क्रियात्मक प्रतिलिपि ला रहा हूं, तो मैं इसके लिए डीबी टूल्स का उपयोग करता हूं - जैसे PostgreSQL डंप उपयोगिता-। आप इसे हरा नहीं सकते। एसक्यूएल अभिव्यक्ति भाषा एसक्यूएलकेमी (या इस मामले के लिए किसी भी ओआरएम) के साथ निकटतम है, जिसे एसक्यूएल लिखने के लिए मिल जाएगा लेकिन चूंकि आप प्रोग्राटिक रूप से पाइथन से SQL उत्पन्न कर सकते हैं, आप समय बचाएंगे, विशेष रूप से यदि आपके पास कुछ जटिल परिवर्तन नियम हैं।

हालांकि, एक बात हालांकि, मैं हाथ से अपनी स्कीमा को संशोधित करता हूं। मुझे उस नौकरी के लिए किसी भी उपकरण पर भरोसा नहीं है।

+0

+1: "हाथ से मेरी स्कीमा संशोधित करें"।इसके लिए एक उपकरण लिखना बहुत मुश्किल है - बहुत से विशेष मामले। –

+0

क्या आपके पास एक ही सर्वर पर स्रोत और लक्ष्य हैं? – hugo24

+0

मुझे देखने दो ...: एक स्रोत एक ही सर्वर में है, और तीन अन्य स्रोत तीन अलग-अलग सर्वरों में हैं (दो postgresql, 1 mysql और 1 oracle मेरे स्रोत हैं)। इसके अलावा मैं एक सेल्सफोर्स एसओएपी डब्ल्यूएस और कुछ Google Apps (Analytics और कैलेंडर) से डेटा एकत्र कर रहा हूं। – Mariano

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