2013-02-06 10 views
10

के साथ एक से कई रिश्ते के प्रभावी कार्यान्वयन मैं पाइथन एनडीबी के साथ एक से कई रिश्ते के प्रभावी कार्यान्वयन के बारे में आपकी राय सुनना चाहता हूं। (उदाहरण के लिए व्यक्ति (एक)-टू-टास्क (कई))पायथन एनडीबी

मेरी समझ में, इसे लागू करने के तीन तरीके हैं।

  1. 'माता-पिता' तर्क का प्रयोग करें
  2. प्रयोग करें 'बार-बार' संरचित संपत्ति
  3. प्रयोग करें 'बार-बार' कुंजी संपत्ति

मैं आमतौर पर नीचे तर्क के आधार पर एक तरह से चुनते हैं, लेकिन यह पड़ता है आपको समझ में आता है? यदि आपके पास बेहतर तर्क है, तो कृपया मुझे सिखाएं।

  1. प्रयोग करें 'माता-पिता' तर्क

    • लेन-देन संबंधी आपरेशन इन संस्थाओं
    • द्वि-दिशा संदर्भ इन संस्थाओं के बीच आवश्यक है के बीच की आवश्यकता है
    • दृढ़ता का इरादा 'अभिभावक-बच्चे' संबंध
  2. 'दोहराई गई' संरचित संपत्ति का उपयोग करें

    • व्यक्तिगत रूप से (हमेशा की तरह, 'एक' संस्था के साथ प्रयोग किया जाता)
    • 'कई' इकाई केवल द्वारा 'एक' इकाई
    • के 'बार-बार' नंबर कहा जाता है 'कई' इकाई उपयोग करने की आवश्यकता नहीं है कम से कम 100
  3. उपयोग कुंजी संपत्ति

    • का उपयोग करने की आवश्यकता है 'बार-बार' है 'कई' इकाई अलग-अलग
    • 'कई' इकाई अन्य संस्थाओं द्वारा भेजा जा सकता है
    • 'बार-बार' की संख्या 100 से अधिक

नं .2 इकाई का आकार बढ़ जाता है, लेकिन हम डेटासंग्रह संचालन बचा सकता है। (हमें deserialization के लिए CPU समय को कम करने के लिए प्रक्षेपण क्वेरी का उपयोग करने की आवश्यकता है)। इसलिए, मैं इस तरह से जितना कर सकता हूं उतना उपयोग करता हूं।

मैं वास्तव में आपकी राय की सराहना करता हूं।

+0

कार्य में व्यक्ति की ओर इशारा करते हुए कीप्रोपर्टी है, आप व्यक्ति के लिए कार्यों को खोजने के लिए पूछते हैं? – tesdal

+0

यह # 4 विकल्प @dragonx उत्तर दिया है, है ना? अगर मुझे व्यक्तियों के लिए कार्यों की जांच करने की ज़रूरत है और हमें यह मानने की जरूरत है कि व्यक्तियों के पास बहुत सारे कार्य हैं, तो मैं इस विकल्प का उपयोग करता हूं। इसके अलावा मैं संपत्ति मूल्यों के एक हिस्से को पुनः प्राप्त करने के मामले में इसका उपयोग करता हूं। –

उत्तर

7

एक महत्वपूर्ण चीज जो आप गायब हैं: आप डेटा कैसे पढ़ रहे हैं?

यदि आप किसी दिए गए व्यक्ति के अनुरोध पर किसी भी व्यक्ति के लिए सभी कार्यों को प्रदर्शित कर रहे हैं, तो 2 समझ में आता है: आप व्यक्ति से पूछ सकते हैं और अपने सभी कार्यों को दिखा सकते हैं।

हालांकि, अगर आपको यह पूछने की ज़रूरत है कि सभी कार्यों की एक सूची निश्चित समय पर कहती है, तो बार-बार संरचित गुणों के लिए पूछताछ भयानक है। आप अपने कार्यों के लिए व्यक्तिगत संस्थाएं चाहते हैं।

एक चौथा विकल्प है, जो आपके कार्य में एक कुंजीप्रोपर्टी का उपयोग करना है जो आपके व्यक्ति को इंगित करता है। जब आपको किसी व्यक्ति के लिए कार्य की एक सूची की आवश्यकता होती है तो आप एक प्रश्न जारी कर सकते हैं।

यदि आपको व्यक्तिगत कार्यों की खोज करने की आवश्यकता है, तो आप शायद # 4 के साथ जाना चाहते हैं। आप इसे # 3 के साथ संयोजन में भी उपयोग कर सकते हैं।

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

+0

हाय @dragonx, उत्तर के लिए धन्यवाद! हां, 'डेटा कैसे पढ़ा जाता है' बहुत महत्वपूर्ण है। अगर मुझे बार-बार संरचित संपत्ति के मूल्यों (जैसे 'महत्वपूर्ण' द्वारा टैग किए गए कार्यों) का एक हिस्सा चाहिए, तो मैं deserialization के लिए CPU समय के कारण व्यक्तिगत संस्थाओं को चाह सकता हूं। इसके अलावा, मैंने 1 एमबी सीमा पर विचार नहीं किया। यह इंगित करने के लिए धन्यवाद। मैं एक बिंदु स्पष्ट करना चाहता हूं। बार-बार संरचित गुणों के साथ 'क्वेरी' करना ** ** ** भयानक नहीं है, है ना? इकाइयों से पूछताछ करने के लिए, ऐप इंजन इंडेक्स का उपयोग करता है। इसलिए, क्वेरी लागत अन्य गुणों के साथ पूछताछ के समान है। क्या मै गलत हु? –

+0

क्वेरी लागत मुद्दा नहीं है। बार-बार संरचित गुणों पर पूछताछ के साथ कुछ अजीब व्यवहार है। आपको चौकस रहना होगा और उनके चारों ओर काम करना होगा। Ndb गुणों और प्रश्नों पर दस्तावेज़ों पर ध्यान से पढ़ें। https://developers.google.com/appengine/docs/python/ndb/queries#repeated_properties https://developers.google.com/appengine/docs/python/ndb/queries#filtering_structured_properties – dragonx

+0

आपके उत्तर के लिए धन्यवाद, @dragonx! निश्चित रूप से हाँ। बार-बार संरचित गुणों पर पूछताछ थोड़ा मुश्किल है। क्वेरी की आवश्यकता होने पर मुझे सावधान रहना होगा। –

5

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

मैं डेटासंग्रह डिजाइन के आधार के बजाय दो प्रश्न में गिर जाता है लगता है:

  1. कैसे मैं इस डेटा को पढ़ने के लिए जा रहा हूँ और मैं इसे कैसे पढ़ने के संचालन की न्यूनतम संख्या के साथ पढ़ा करते हैं?

  2. क्या यह लिख रहा है कि लेखन और अनुक्रमण संचालन की संख्या में विस्फोट हो रहा है?

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

+0

उत्तर के लिए धन्यवाद, @ सुधीर-जोनाथन। ये दो प्रश्न बहुत सार्थक हैं। मुझे हमेशा उन्हें ध्यान में रखना चाहिए। डाटास्टोर मॉडलिंग के लिए डेटा की विशेषता और उपयोग को समझना बिल्कुल महत्वपूर्ण है। –

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