व्यू 3 इंटीग्रेशन के साथ ड्रुपल 7 के साथ बड़े फ्लैट-फाइल डेटा स्रोतों को आयात करना


13

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

कार्य के लिए अनुकूल मॉड्यूल और विधियों को नियमबद्ध करने में मदद करने के लिए, यहां उन फाइलों पर आंकड़े दिए गए हैं जिनके साथ मैं काम कर रहा हूं:

  • वार्षिक आयात: 8,500,000 लाइन सीएसवी फ़ाइल। (पुरस्कृत और पुनः लोड किया गया। प्राथमिक कुंजी है।)
  • साप्ताहिक आयात: 350,000 लाइन निश्चित चौड़ाई की फ़ाइल। (Purged और reloaded साप्ताहिक। कोई प्राथमिक कुंजी नहीं ।)
  • प्रति घंटा आयात: 3,400 लाइन सीएसवी फ़ाइल। (जितनी बार संभव हो अपडेट और सिंक करना चाहते हैं, लेकिन हर 20 मिनट से अधिक नहीं। प्राथमिक कुंजी है)
  • दैनिक आयात: 200 आइटम XML फ़ाइल। (प्रतिदिन शुद्ध और पुनः लोड किया गया। प्राथमिक कुंजी है)

तीन प्रारूपों के बीच परिवर्तित करना कोई समस्या नहीं है और यह किया जा सकता है अगर यह आयात प्रदर्शन में सुधार करेगा या बेहतर उपकरण उपलब्ध कराने की अनुमति देगा। ( एडब्ल्यूके के लिए फिक्स्ड चौड़ाई के लिए AWK ,) क्रोन और स्क्रिप्ट के माध्यम से पुनर्प्राप्ति और रूपांतरण स्वचालन आसान है , लेकिन अभी भी ड्रुपल 7 एकीकरण को स्वचालित करने की आवश्यकता है। कस्टम तालिकाओं का उपयोग तब भी संभव है जब तक कि वीजे रिश्तों का उपयोग करके डेटा को संदर्भित कर सकते हैं।

Drupal 7 के साथ इस प्रकार के डेटा एकीकरण को पूरा करने के लिए सबसे अच्छा अभ्यास क्या होगा? इसके अलावा, क्या मैं डेटा के संबंध में कोई महत्वपूर्ण विवरण छोड़ रहा हूं या क्या मैं पूरा करने की कोशिश कर रहा हूं?


यहां कुछ परियोजनाएं हैं जो मैं वर्तमान में एक समाधान खोजने के लिए देख रहा हूं। मैं इस पर विस्तार करना चाहूंगा कि दूसरों को यह निर्णय लेने में मदद मिले कि बड़े डेटा आयात के साथ काम करते समय कौन सा मार्ग लेना है।

नोड्स में डेटा आयात करना:

  • फ़ीड्स (वर्तमान में D7 के लिए अल्फा)

फ़ीड डेटा को मज़बूती से आयात करेगा। गति छोटे डेटा स्रोतों के लिए उचित है, लेकिन 300k + तालिकाओं के लिए बहुत धीमी है।

क्रोन और जॉब शेड्यूलर (वर्तमान में डी 7 के लिए अल्फा) का उपयोग करके स्वचालन उपलब्ध है ।

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

स्वचालन ड्रश और क्रोन के माध्यम से उपलब्ध है।

नोड्स के बजाय कस्टम टेबल्स

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

इसे संदर्भ के लिए जोड़ा गया। इस बिंदु पर कोई D7 उम्मीदवार नहीं है, लेकिन एक कस्टम मॉड्यूल के लिए शुरुआती बिंदु के रूप में काम कर सकता है।

इसे संदर्भ के लिए जोड़ा गया। ऐसा लगता है कि ड्रुपल में टेबल विजार्ड द्वारा अवशोषित कर लिया गया है 6. फिर से, केवल संदर्भ के लिए जोड़ा गया।

व्यू इंटीग्रेशन के लिए टेबल विजार्ड (केवल D6) की आवश्यकता होती है । संदर्भ के लिए जोड़ा गया, लेकिन दृश्य आवश्यकता को पूरा नहीं करता है।


@MPD - संभव समाधान और विस्तारित मॉड्यूल के रूप में "कस्टम टेबल्स" जोड़ा गया। इस जोड़ के लिए धन्यवाद।

जवाबों:


8

मेरे कण्ठ ने मुझे बताया कि इस योजना से आपके सर्वर में आग लग जाएगी ...

गंभीरता से, यदि आप उस डेटा को मंथन कर रहे हैं, तो मुझे लगता है कि आपको डेटा को एक बाहरी डेटा स्रोत में रखने की आवश्यकता है और फिर इसे Drupal के साथ एकीकृत करें।

मेरा प्रारंभिक विचार बाहरी डेटा के लिए दो डेटाबेस का उपयोग करना होगा, ताकि आप साप्ताहिक आयात w / o परेशान चीजों को बहुत अधिक कर सकें। दूसरे शब्दों में, डेटाबेस ए को ऊपर और चालू करें, और फिर बी में आयात करें। जब आयात किया जाता है, तो बी को लाइव स्रोत बनाएं। फिर पोंछकर ए में आयात करें।

मैंने Drupal में बाहरी डेटा स्रोत का बहुत एकीकरण किया है, और यह वास्तव में उतना कठिन नहीं है। मैं Drupal के लिए PHP5 घृणा के लिए संक्रमण योजना में एक सिंहावलोकन दिया । यह Drupal 6 के लिए था, लेकिन यही बात मूल रूप से Drupal 7 पर लागू होती है। अनिवार्य रूप से, आप अनुकरण करते हैं कि CCK / फील्ड्स API आपके स्वयं के इंटरफेस के साथ क्या करता है।

साप्ताहिक डेटाबेस के लिए यूयूआईडी नहीं होना वास्तव में कामों में एक कमी है, हालांकि। हालांकि, इस भाग को बहुत अधिक की आवश्यकता होती है, और इस तरह क्यू / ए फोरम में प्रदान किया जा सकता है।

यदि आप वास्तव में आयात मार्ग से नीचे जाना चाहते हैं, तो मैं फीड्स और माइग्रेट पर जमानत करूंगा और अपनी खुद की आयात स्क्रिप्ट लिखूंगा। मूल रूप से, आप index.php से प्रारंभिक बुकस्ट्रैप प्रक्रिया करते हैं, अपने डेटा स्रोत से क्वेरी करते हैं, अपना नोड बनाते हैं, और फिर उन्हें सहेजते हैं। प्रोग्रामेटिक रूप से नोड्स बनाना आसान है।

इसके साथ शुरू करने का सबसे अच्छा तरीका यूआई के साथ एक नोड बनाना है, फिर इसे प्रिंट करें, और अपने आयात स्क्रिप्ट में कोड के साथ ऑब्जेक्ट को दोहराएं। टैक्सोनॉमी, फाइलें और नोडेरेफ़्स, हार्ड पार्ट्स हैं, लेकिन आपको इन ऑब्जेक्ट गुणों को बनाने के लिए एपीआई के इन हिस्सों से परिचित होना चाहिए। एक बार जब आपके पास एक वैध नोड ऑब्जेक्ट होता है, तो आप बस एक नोड_सेवे () कर सकते हैं। सुनिश्चित करें कि आपने set_time_limit () के साथ एक बहुत बड़ी सीमा निर्धारित की है, इसलिए आपकी स्क्रिप्ट चलती है।

एडिटेस क्लैरिएशन / विस्तार के लिए संपादित करें:

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

यदि आपको वास्तव में Drupal में डेटा की आवश्यकता है, तो एक कस्टम आयात स्क्रिप्ट के बारे में मेरी राय नहीं बदली है। आपके द्वारा संदर्भित मॉड्यूल में से एक का उपयोग नोड ऑब्जेक्ट बनाने के लिए एक प्रारंभिक बिंदु के रूप में किया जा सकता है, फिर बस अपने डेटा नोड्स के माध्यम से लूप करें और उन्हें सहेजें। यदि आपके पास पीके है, तो आप डेटाबेस और नोड_लोड () को खोजने, संशोधित करने और बचाने के लिए तर्क में आसानी से जोड़ सकते हैं। यदि आप Drupal API को जानते हैं तो आयात स्क्रिप्ट वास्तव में केवल कुछ घंटों का काम है।

यदि दृश्य एकीकरण एक कुंजी है (और यह ऐसा लगता है जैसे यह संपादन पर आधारित है) और आप बाहरी तालिकाओं का दृष्टिकोण करना चाहते हैं, तो आपका सबसे अच्छा विकल्प एक कस्टम मॉड्यूल करना है और अपने डेटा को विचारों में लाने के लिए hook_views_data को लागू करना है। संभावना से अधिक, आप अपने डेटा स्रोत का समर्थन करने के लिए वैसे भी कस्टम मॉड्यूल करेंगे, इसलिए इस हुक को जोड़ना अधिक काम नहीं होना चाहिए। TW और डेटा मॉड्यूल को आपके पास जाने के लिए कुछ उदाहरण होना चाहिए।

व्यक्तिगत रूप से, हालांकि, मुझे बाहरी डेटा के साथ विचारों के एकीकरण को वास्तव में सार्थक नहीं मिला है। उन मामलों में जहां मैंने इस पर विचार किया है, डेटा आधारित दृष्टिकोण के साथ अच्छी तरह से काम करने के लिए सिर्फ "अलग" था। मैं बस ऊपर दिए गए "एबोमिनेशन" लिंक में वर्णित विधि का उपयोग करके समाप्त करता हूं।


आप तीन उत्कृष्ट अंक लाए हैं, और मैं अपने प्रश्न को तदनुसार समायोजित करने जा रहा हूं। बड़े पैमाने पर आयात और निर्यात करना अच्छा होगा, लेकिन जब सैकड़ों, या संभवतः इस बिंदु पर लाखों नोड्स आयात करना सबसे अच्छा, अवास्तविक लगता है। अगर वे विचारों के साथ एकीकृत हो सकते हैं तो कस्टम टेबल भी बहुत उपयोगी हो सकते हैं। आपकी प्रतिक्रिया के लिए धन्यवाद @MPD।
सिट्रिकगुई

2

मुझे लगता है कि एक नोड आधारित (या यहां तक ​​कि इकाई आधारित) दृष्टिकोण आपके सर्वर को लाखों नोड के साथ जला देगा। इसके अलावा, आपके प्रति घंटा आयात को देखते हुए, इसका मतलब है कि आपका दूसरा एक बार में एक बार एक नोड_सेवे () बना देगा। यह Drupal के लिए बहुत अधिक है और एक प्रदर्शन समस्या का कारण बनता है।

इसके पीछे का कारण उन सामग्री के लिए है, आपको किसी हुक तंत्र की आवश्यकता नहीं होगी, आपको pathauto की आवश्यकता नहीं होगी (लेकिन आप मैन्युअल रूप से उपनाम बना सकते हैं, यह pathauto की तुलना में बहुत सस्ता है), आपको फ़ील्ड की आवश्यकता नहीं होगी ... एक लिखें सरल "INSERT" क्वेरी नोड_सेवे () या एंट्री_सेवे () से 100 गुना तेज है।

1 / IMHO सबसे अच्छा विकल्प एक कस्टम टेबल और आपके डेटा आयात के लिए एक कस्टम मॉड्यूल है, फिर Drupal एकीकरण के लिए व्यू हैंडलर लिखें।

2 / डेटाबेस कैश प्रति घंटा आयात के दौरान अमान्य है। यदि इसमें बहुत अधिक समय लगता है, तो आप एक प्रतिकृति के बारे में सोच सकते हैं। सबसे आसान रूप में, दो समान तालिकाओं का निर्माण करें, पहले वाले का उपयोग करें, दूसरे का आयात करें, दूसरे तालिका का उपयोग करने के लिए अपने ड्रुपल कॉन्फ़िगरेशन को स्विच करें, दूसरी तालिका को 1 से सिंक करें (फिर वैकल्पिक रूप से पहले पर वापस स्विच करें)। एक अन्य समाधान आपके कस्टम आयात स्क्रिप्ट में है, INSERT / UPDATE प्रश्नों को तैयार और समूहित करें, उसके बाद डेटाबेस लेखन समय को कम करने के लिए इसे केवल एक लेनदेन में अंत में भेजें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.