बैच एपीआई संचालन को गति देने के लिए कैसे?


12

मैं इस 3 पार्टी contrib मॉड्यूल के साथ ही अपने खुद के कुछ संचालन के साथ दोनों में भाग लिया है। मैं अपने / contrib बैच संचालन को गति देने के लिए विभिन्न तरीकों से उत्सुक हूं ?

मान लें कि वे नोड्स (आयात / अपडेट आदि) के साथ काम करते हैं और हम 10,000+ रेंज में नोड्स की पार्सिंग सूचियों के साथ काम कर रहे हैं (हालांकि मुझे 15 मिलियन पंक्तियों से निपटना पड़ा है .. जो कि हां - मैं अभी खराब कर रहा हूं। ।)

क्या ड्रूपल क्रोन.एफ़पी नौकरी से जुड़ना और "हेडलेस" चलाना जल्दी है? Drush का उपयोग करना? या यह केवल एक सवाल है कि मैं अपने कोड को कैसे प्रभावी और त्वरित पार्स कर सकता हूं और कोई बाहरी प्रभाव या बैच विशिष्ट अनुकूलन युक्तियाँ नहीं हैं ...

वर्तमान में मैं ऐसे ऑपरेशनों में भाग ले रहा हूं (जो कुछ कठिन गणना का उपयोग करके) 24+ घंटे ले सकता है ...

धन्यवाद!

जवाबों:


9

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

इसके अलावा, माइग्रेट मॉड्यूल की हिम्मत की जाँच करें। मैं नहीं जानता कि यह कैसे होता है मोजो (इसे ग्रॉक करने में कभी समय नहीं लगा), लेकिन यह बहुत जल्दी नोड्स के विशाल बैचों के माध्यम से विस्फोट कर सकता है।


इनपुट के लिए धन्यवाद - मैं माइग्रेट मॉड्यूल में अधिक देख रहा हूँ और वह ड्रुपल_बॉस्ट्रैप एक महान टिप के रूप में अच्छी तरह से था;)
इलेक्टेक

8

हर बैच कॉल एक HTTP अनुरोध है। तो आपको एक और HTTP अनुरोध के निकाल दिए जाने से पहले कितने पुनरावृत्तियों को संसाधित करने का सही मिश्रण खोजने की आवश्यकता है। दो बातों पर ध्यान देना स्मृति और अधिकतम निष्पादन का समय है। आप HTTP अनुरोधों की संख्या को कम करने के लिए प्रति बैच जितना संभव हो उतने पुनरावृत्तियों को संसाधित करना चाहते हैं क्योंकि वे आपके धीमे बैच के अपराधी होने की सबसे अधिक संभावना है।

यदि आपका बैच कुशलता से चलाने के लिए बहुत भारी है, तो आप इसके बजाय एक कतार का उपयोग करने की कोशिश कर सकते हैं। यहाँ एक अच्छा बैच बनाम कतार प्रस्तुति है http://sf2010.drupal.org/conference/session/batch-vs-queue-api-smackdown । कतार उपयोगकर्ता प्रतिक्रिया प्रदान नहीं करती हैं और इसे समानांतर में चलाया जा सकता है।

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


2

जैसा कि दूसरों ने कहा है कि ड्रश एक अच्छा समाधान है, लेकिन एक कतार उपयोग करने के लिए एक महान उपकरण है। Drupal 7 में बैच API अंतर्निहित कोर कतार API का उपयोग करता है इसलिए यदि आप MySQL का उपयोग कर रहे हैं तो आपकी प्रक्रिया वहां अड़चन हो सकती है। लेकिन, Drupal 7 की कतार एपीआई प्लग करने योग्य है, इसलिए आप बीनस्टॉक की तरह दूसरी कतार प्रणाली का उपयोग कर सकते हैं।


1

यदि आप इसे समानांतर बना सकते हैं तो यह एक अच्छी शुरुआत है। इस पर मेरे कुछ विचार इस प्रकार हैं कि मैंने एक लाख पन्नों पर क्रॉल करने के लिए ४ धागे का इस्तेमाल किया है (बूस्ट के माध्यम से)। इसे अब सामान्य बनाने की तलाश है। http://groups.drupal.org/node/126624

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