2011-07-31 14 views
5

मैं रेल में विकास का एक बहुत कुछ किया है, और परियोजनाओं अजगर & एप्लिकेशन इंजन का उपयोग कर विकसित करने में देख रहा हूँ।डेटा माइग्रेशन और AppEngine

डेमो परियोजना से और मैं क्या देखा है अब तक, मैं एप्लिकेशन इंजन परियोजनाओं के बारे में एक सवाल/चिंता का विषय मिल गया है:

कैसे डेटा स्थानांतरण एप्लिकेशन इंजन में नियंत्रित किया जाता है? उदाहरण के लिए, यदि मैं किसी इकाई/तालिका का नाम बदलता हूं (उदा: दस्तावेज़ों के लिए टेक्स्ट), या मौजूदा तालिका में एक कॉलम बदलें (उदा: उम्र से डब) - यह होने पर पुराने डेटा को कैसे संभालता है?

धन्यवाद!

उत्तर

8

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

आपका मॉडल परिभाषाओं सिर्फ अपने आवेदन पत्र कैसे डेटासंग्रह में संग्रहीत संस्थाओं की व्याख्या करने के "दृश्य" कर रहे हैं। अगर मैं एक परिभाषा की तरह था:

class MyEntity(db.Model): 
    text = db.TextProperty() 

और मेरे enties की text संपत्ति भरने थोड़ी देर के लिए अपने आवेदन चलाने के लिए, तो फिर बाद में करने के लिए स्तंभ का नाम बदला:

class MyEntity(db.Model): 
    description = db.TextProperty() 

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

आप इस तरह अपने स्कीमा में परिवर्तन करने, या अधिक होने की संभावना सिर्फ एक क्षेत्र प्रकार बदलने हैं। बदलावों को संभालने के लिए आपके डेटा को प्री-प्रोसेस करने के लिए यह आपके ऊपर होगा। मॉडल-लेयर त्रुटियों को उठाएगी यदि आप ऐसी इकाई को चलाने और लोड करने की कोशिश करते हैं जो आपकी मॉडल परिभाषाओं के अनुरूप नहीं है।

अपने डेटा पसंद के हथियार को अद्यतन करने का इस मैनुअल कार्य के साथ मदद करने के लिए कर रहे हैं:

  1. remote_api/remote_api_shell.py
  2. mapreduce पुस्तकालय (विशेष रूप से "नक्शाकार" भाग)

के साथ remote_api [1] सेटअप आप अपने लाइव डेटा पर एक इंटरैक्टिव पायथन सत्र खोल सकते हैं, और स्थानीय स्तर पर स्क्रिप्ट चला सकते हैं (ज्यादातर) जैसे कि वे सीधे उत्पादन सर्वर पर चल रहे हैं। मुझे लगता है कि छोटे-छोटे एक-एक-एक कार्यों के लिए डेटा को ठीक/साफ करने का यह सबसे आसान तरीका है।

मैपर एपीआई [2] नियोजित किया जा सकता है यदि आपके पास बहुत बड़ा कार्य है, तो लाखों इकाइयों को बदलने का कहना है और जितना संभव हो सके उतना अधिक करने का लाभ उठाना चाहते हैं।

+0

अच्छा जवाब, लेकिन मैप्रिडिस का उल्लेख यह एक अच्छा जवाब देगा। –

+0

धन्यवाद क्रिस! @ निक, मैप्रिडिस के उल्लेख के लिए धन्यवाद। – stringo0

1

आप किसी इकाई का नाम नहीं बदल सकते हैं। इसकी अनुमति नहीं है।

यदि आप किसी मॉडल में किसी विशेषता का नाम बदलते हैं (कृपया उन्हें कॉलम न करें), AppEngine पुराने फ़ील्ड में पुराने डेटा को अनदेखा कर देगा, और नए फ़ील्ड के लिए कोई भी नहीं लौटाएगा।

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