13000 नोड्स हटाएँ


9

मेरे पास Drupal 7 साइट में हटाने के लिए लगभग 13000 नोड्स हैं। मैंने एक बार में 500 नोड्स को हटाने के लिए व्यू बल्क ऑपरेशन मॉड्यूल की कोशिश की है , लेकिन यह कई बार खत्म हो गया है। मैं केवल 50 नोड्स को समय पर हटा सकता हूं।

मैं समय पर 50 से अधिक नोड कैसे हटा सकता हूं?


"बल्क डिलीट" मॉड्यूल हुआ करता था, लेकिन VBO awyay के पक्ष में अप्रचलित हो गया। लेकिन VBO बैच प्रोसेसिंग का समर्थन करता है। क्या आपने इसका उपयोग करने की कोशिश की है?
मोलॉट

1
VBO, जैसा कि नीचे दिए गए जवाबों में बताया गया है, शायद जाने का रास्ता है। मैंने इस मामले की तुलना में अधिक परिमाण को नष्ट करने की आवश्यकता के समय क्या किया है, हैक मॉड्यूल को बहुत सारे हुक इनवॉइस को अनदेखा करने के लिए आह्वान किया जाता है जिनकी मुझे आवश्यकता नहीं है। (मेरा सबसे बुरा अपराधी अपाचे सोल था)। यह काम को काफी तेज कर सकता है, लेकिन जाहिर है कि इसे बहुत सावधानी से किया जाना चाहिए।
१४:१३ पर सुस्ती

जवाबों:


16

VBO बल्क-डिलीटिंग नोड्स के लिए वास्तविक मानक है, बस इसे करने का एक बेहतर तरीका नहीं है।

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

कुछ इस तरह का मानक रिज़ॉल्यूशन क्षतिपूर्ति के लिए PHP अधिकतम निष्पादन समय बढ़ाता है


2
बस जवाब पूरा करने के लिए: आप यह चुन सकते हैं कि ऑपरेशन के लिए कितनी संस्थाएँ उठाई जानी चाहिए। 100 का उपयोग करना मेरे अनुभव से ~ 1 मिनट में ठीक कर देगा।
आयुष

7

देवल स्थापित करें। फिर D7 में admin / config / development / generate / content में जाएं और सभी सामग्री प्रकार चुनें। "सभी सामग्री हटाएं" जांचें। 0 में दर्ज करें "आप कितने नोड उत्पन्न करना चाहेंगे?"

जनरेट पर क्लिक करें।

वह सभी नोड्स को हटा देगा।


1
@ Mołot ' चेक "सभी सामग्री हटाएं" ' ... 'में 0 दर्ज करें "कितने नोड्स आप उत्पन्न करने के लिए चाहते हैं?"' ...;)
क्लाइव

@ ठीक है, मेरी गलती है, क्षमा करें।
मोलॉट

1
विशेष रूप से, यह देवल जनरेट मॉड्यूल है जो ऐसा करता है; यदि आप सिर्फ देवल को सक्षम करते हैं तो यह डीवेल के साथ जहाज करता है, लेकिन आपको यह कार्यक्षमता नहीं मिलेगी। यदि आप सब कुछ हटाना नहीं चाहते हैं, तो आप एक निश्चित सामग्री के सभी नोड्स को आसानी से हटा सकते हैं। यदि आप अभी भी PHP टाइमआउट प्राप्त कर रहे हैं और सीएलआई से डरते नहीं हैं, तो आप डेवेल जनरेट के साथ आने वाले Drush generate-content( genc) कमांड का भी उपयोग कर सकते हैं ; drush help gencउपयोग की जानकारी के लिए।
गैरेट अलब्राइट

3

एक VBO का उपयोग करें और इसे Drush से निष्पादित करें। मैंने स्केल परीक्षण के बाद 1.5 मिलियन से अधिक नोड्स को हटाने के लिए निम्न विधि का उपयोग किया।

  1. एक पृष्ठ के साथ एक नया दृश्य बनाएँ। केवल जिस प्रकार के नोड्स आप हटाना चाहते हैं, उन्हें प्रदर्शित करने के लिए उचित रूप से फ़िल्टर सेट करें।
  2. एक नया फ़ील्ड जोड़ें: "बल्क ऑपरेशन: कंटेंट"
  3. "चयनित बल्क ऑपरेशंस" के तहत "आइटम हटाएं" के बगल में स्थित बॉक्स को चेक करें।
  4. दृश्य सहेजें।
  5. मान लें कि आप ड्रश का उपयोग करना जानते हैं, इस कमांड को चलाएं: (बड़े डेटासेट के लिए अबाधित चलाने के लिए एक लिनक्स स्क्रीन का उपयोग करें)

drush vbo-execute my_view क्रिया :: views_bulk_operations_delete_item

जहाँ, my_view आपके विचार का मशीन नाम है

आप सभी उपलब्ध विचारों और उनके बल्क संचालन को प्रदर्शित करने के लिए ड्रश वॉबो-लिस्ट का भी उपयोग कर सकते हैं ।

वीबीओ को अब शेल में चलना चाहिए, जो आपको प्रतिक्रिया देता है।


2

वहाँ एक डिलीट ऑल मॉड्यूल है। यह साइट से सभी नोड्स और / या उपयोगकर्ताओं को हटा देगा।

इसमें Drush का समर्थन भी है:

उदाहरण:

drush delete-all article             Delect all article nodes.  
drush delete-all all                 Delete nodes of all types.  
drush delete-all --reset             Delete nodes of all types, and reset node, revision and comment counters.  
drush delete-all users               Delete users.

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

2
अभी भी उपयोगी हो सकता है यदि आप जानते हैं कि आप क्या कर रहे हैं, और बैकअप लें। सभी हुक और एपीस को लागू करते समय हजारों नोड्स को हटाने से दर्द धीरे हो सकता है। :(
सुस्ती

@Letharion कोई दर्द नहीं, कोई लाभ नहीं;) आप बिल्कुल सही कह रहे हैं, हालांकि मैं सिर्फ इस पर एक अस्वीकरण करना बेहतर हूं क्योंकि यह मॉड्यूल गलत हाथों में होने पर चीजों को गड़बड़ कर सकता है!
क्लाइव

अगर मैं drush delete-all articleइस समाधान के लिए जाना चाहता हूँ लेख को नष्ट करने के लिए करने के लिए मिलता है ।
अजीत

@develkar कुछ सौ नोड्स ठीक हो सकता है, लेकिन Drush विस्तार का उपयोग करता है ठीक उसी कार्यों साइट पर संस्करण के रूप में के लिए तो यह अभी भी बस के रूप में समय समाप्ति के लिए अतिसंवेदनशील दुर्भाग्य है
क्लाइव

0

व्यूज बल्क ऑपरेशंस का उपयोग करें - यह एक अच्छा विचार था। लेकिन सीधे कॉलिंग ऑपरेशन के बजाय, बैच एपीआई का उपयोग करें। यहां आप इसके बारे में शोर लेख पढ़ सकते हैं । उस हिस्से पर प्रलेखन की कमी एक ज्ञात समस्या थी


0

बड़ी संख्या में नोड्स हटाने के लिए (जैसे कि बल्क है) आपके मामले में, आप इसके लिए बल्क डिलीट मॉड्यूल का भी उपयोग कर सकते हैं ।

उस नोड या डिलीट इश्यू से बचने के लिए नोड्स को हटाने के लिए बैच एपीआई का उपयोग करेंगे, जब नोड्स के हजारों नोड्स को नोड_डेलीट_मूल्टेयर () पर कॉल करें।

इसके अलावा, आप किसी सामग्री प्रकार के सभी नोड्स को हटाने के लिए सभी मॉड्यूल को हटा सकते हैं।

उम्मीद है की यह मदद करेगा।


0

आप BATCH API का उपयोग करके इसके लिए बैच प्रक्रिया भी बना सकते हैं और उस बैच प्रक्रिया में बस कर सकते हैं

foreach($nodes as $node){ node_delete($node[nid]);}

बस। आप यहाँ कर रहे हैं। यदि आप इसके लिए एक ड्रश कमांड बनाना चाहते हैं, तो आप इसे भी बना सकते हैं। संदर्भ के लिए कृपया इसे देखें


0

यदि आपके पास इसे कोड द्वारा करने का कारण है:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->propertyOrderBy('nid', 'DESC')
  ->range(1000, 1000);

$result = $query->execute();
node_delete_multiple(array_keys($result['node']));

हटाने के लिए नोड्स चुनने के लिए आपके पास कई अन्य उपलब्ध तरीके भी हैं ।


0

आप बॉबिक की सलाह ले सकते हैं और खिला सकते हैं कि अगर आप वास्तव में चुटकी में हैं, तो 'ड्रू पीएसपी-एक्सल' के तर्क के रूप में, लेकिन मैं उम्मीद करूंगा कि प्रदर्शन थोड़ा तेज होने के दौरान वीबीओ के समान होगा। यदि प्रदर्शन वास्तव में धीमा है, तो आप '_node_delete' ('_node_delete' के लिए कोडबेस को पकड़कर और फिर यह निर्धारित कर सकते हैं कि क्या आप उस मॉड्यूल का उपयोग कर रहे हैं या नहीं, जो आप कर सकते हैं या नहीं, यह निर्धारित करके कि मॉड्यूल क्या हुक कर रहे हैं, पर एक नज़र डालना चाहते हैं।

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