पर कुशल डेटा माइग्रेशन मुझे बड़ी (5 मीटर पंक्ति) django तालिका में एक नया कॉलम जोड़ने की आवश्यकता है। मेरे पास दक्षिण schemamigration
है जो नया कॉलम बनाता है। अब मैं नए कॉलम को पॉप्युलेट करने के लिए datamigration
स्क्रिप्ट लिख रहा हूं। यह इस तरह दिख रहा है। (आप दक्षिण माइग्रेशन से परिचित नहीं हैं, तो बस की अनदेखी orm.
मॉडल का नाम लगाकर।)एक बड़ी django तालिका
print "Migrating %s articles." % orm.Article.objects.count()
cnt = 0
for article in orm.Article.objects.iterator():
if cnt % 500 == 0:
print " %s done so far" % cnt
# article.newfield = calculate_newfield(article)
article.save()
cnt += 1
मैं objects.iterator
को objects.all
से बदल स्मृति आवश्यकताओं को कम। लेकिन जब भी मैं इस स्क्रिप्ट को चलाता हूं तब भी कुछ यादगार स्मृति को चबा रहा है। यहां तक कि वास्तव में उपयोगी लाइन के ऊपर भी टिप्पणी की गई है, फिर भी स्क्रिप्ट अभी भी टेबल के माध्यम से बहुत दूर होने से पहले 10+ जीबी रैम का उपयोग करने के लिए बढ़ती है और मैं इसे छोड़ देता हूं।
ऐसा लगता है कि स्मृति में इन वस्तुओं को कुछ पकड़ रहा है। मैं इसे कैसे चला सकता हूं इसलिए यह एक स्मृति हॉग नहीं है?
एफडब्ल्यूआईडब्ल्यू, मैं अजगर 2.6, डीजेंगो 1.2.1, दक्षिण 0.7.2, mysql 5.1 का उपयोग कर रहा हूं।
इसे मेरे लिए हल करता है। मुझे लगता है कि DEBUG पूरी क्वेरी कैश करता है, इसलिए यदि आप अपने डेटा माइग्रेशन के हिस्से के रूप में 10 जीबी डाल रहे हैं, तो यह 10 जीबी मेमोरी का उपयोग करता है। या मेरे मामले में दुर्घटनाओं में, क्योंकि मैं 32-बिट पीएई कर्नेल का उपयोग कर रहा हूं। –
क्या यह ट्विक अभी भी Django के नए संस्करणों में आवश्यक है? – nivniv
यह Django 1.7 तक आवश्यक है, लेकिन अभी भी अनुशंसित है: स्मृति में संग्रहीत 9 000 प्रश्नों की हार्ड सीमा Django 1.7 या 1.8 में स्थापित की गई है। –