2011-02-17 4 views
5

मुझे Google ऐप इंजन डेटास्टोर के यांत्रिकी को समझने में बहुत मुश्किल समय है।
मैं यांत्रिकी को समझना चाहता हूं ताकि मैं डेटाबेस के लिए इष्टतम तरीके से अपना डेटाबेस बना सकूं।Google डेटास्टोर (जीएई) पर पढ़ने/लिखने के प्रदर्शन विचारों की व्याख्या?

नीचे मेरी उदाहरण को देखते हुए, किसी ने मुझे में मदद कर सकते हैं:

  1. संरचना डेटाबेस बेहतर
  2. प्रदर्शन को समझने दोनों की पढ़ना और लिखना यह देखते हुए कि संरचना

उदाहरण:
मान लें कि मेरे पास एन बेसबॉल प्ले है ers और प्रत्येक के पास एक अद्वितीय आईडी है।
मैं प्रत्येक खिलाड़ी द्वारा मारने वाले होमरन का दैनिक मिलान रखना चाहता हूं ("कुल दैनिक होमरन्स" संपत्ति संग्रहीत करना) और मूल रूप से इसे होम्युनन हिट करते समय बढ़ाएं।
तो, समय बढ़ने के साथ ही, मैं X बेस पर प्रत्येक बेसबॉल प्लेयर के लिए प्रत्येक दिन होमरन का ग्राफ दिखाना चाहता हूं।

Player 1 
1/21/2011 - 2 homeruns 
1/22/2011 - 0 homeruns 
1/23/2011 - 1 homeruns 

पढ़ें आवश्यकता: एक निश्चित खिलाड़ी के लिए दैनिक "ही सफल" डेटा के पिछले 5 वर्षों पढ़ें?

आवश्यकता लिखें: एक निश्चित बेसबॉल प्लेयर के लिए दैनिक होमरन गिनती बढ़ाएं।

मुझे समझना अच्छा लगेगा कि डेटा को कैसे व्यवस्थित किया जाए और पढ़ने और लिखने दोनों के मैकेनिक्स को कैसे बनाया जाए? क्या यह आसान भंडारण कार्य स्केल होगा? सबको शुक्रीया।

+0

प्रति गुणा आप अजगर या जावा में विकसित करने के लिए जा रहे हैं? – systempuntoout

+0

मुझे आश्चर्य है कि प्रोग्रामिंग भाषा इस प्रश्न से संबंधित कैसे है – guigouz

उत्तर

3

मैं इस तरह एक एक-से-कई रिश्ते के साथ अपनी आवश्यकताओं के मॉडल होगा:

class Player(db.Model): 
    name = db.StringProperty() 

class DailyHomeruns(db.Model): 
    date = db.DateProperty() 
    counter = db.IntegerProperty() 
    player = db.ReferenceProperty(Player) 

प्राप्त करने के लिए सभी एक दिया Player आप इस तरह से यह कर सकते हैं की DailyHomeruns:

daily_homeruns = DailyHomeruns.all().filter('player =', player) 
            .filter('date >', date_start) 
            .filter('date <=', date_end) 
            .order('date') 

पढ़ें आवश्यकता:

Google अनुप्रयोग इंजन प्रदर्शन परिणाम के आकार के साथ तराजू और नहीं सेट डेटा सेट के आकार वाली क्वेरी।

इसका मतलब यह है कि आपके पिछले 5 वर्षों क्वेरी homeruns अगर सेट औसत 800 संस्थाओं * में होता है, इस प्रश्न के एक ही प्रदर्शन करती है कि क्या यह एक हजार से अधिक संस्थाओं या एक लाख संस्थाओं खोज करता है।

लिखें आवश्यकता:
लिखता Google अनुप्रयोग इंजन में धीमी गति से कर रहे हैं, लेकिन अपने परिदृश्य काफी तुच्छ लगता है और मैं किसी भी संभव विवाद/टाइमआउट समस्या नहीं दिख रहा है; आपको केवल DailyHomeruns क्रमशः प्रति दिन एक छोटी संख्या के लिए काउंटर में वृद्धि करने की आवश्यकता है।

अन्य विचारों:
आप कुछ आँकड़े, उदाहरण के लिए किसी दिए गए Player की homeruns की कुल संख्या की गणना करने की जरूरत है, यहां तक ​​कि इस उद्देश्य के लिए GQL उपयोग करने के लिए है क्योंकि यह किसी भी प्रदान नहीं करता है नहीं लगता है कुल समारोह à la SQL
इसके बजाय, आपको प्रतिद्वंद्वी होमरन की कुल गणना को स्टोर करने के लिए मॉडल को परिभाषित करने के लिए अपने डेटाबेस को पहले से डिज़ाइन करना होगा।
transactions एपीआई का उपयोग करते हुए, प्रत्येक बार जब आप DailyHomeruns बढ़ाते हैं तो आपको उस प्लेयर के लिए TotalHomeruns इकाई को बढ़ाने की आवश्यकता होगी।

* मैं 52 सप्ताह के लिए प्रति सप्ताह 3 मैचों का अनुमान है 5 साल

+0

यह बहुत अच्छा है। धन्यवाद। – Ryan

2

इस प्रश्न का कोई जवाब नहीं है। डेटास्टोर वास्तव में निम्न स्तर है और यह सही इंडेक्स और प्रीप्रोसेस डेटा बनाने के लिए आपके ऊपर निर्भर करता है ताकि इसे तेज़ी से पुनर्प्राप्त किया जा सके। इसके अलावा, एक ही इकाई को समवर्ती उपयोग पर निर्भर करता है, आप की तरह http://code.google.com/appengine/articles/sharding_counters.html

बहुत रचनात्मक सामान का उपयोग करने के मैं तुम्हें आप आरंभ http://sites.google.com/site/io/under-the-covers-of-the-google-app-engine-datastore आप एक निम्न स्तर के सिंहावलोकन देता है प्राप्त करने के लिए दो गूगल आई/ओ सत्र देख सिफारिश कर सकते हैं होगा कैसे सबकुछ काम करता है और क्यों वे इस तरह से किए गए थे (नीचे दिए गए क्षेत्र डिस्क पर कैसे लिखे गए हैं)

फिर http://sites.google.com/site/io/building-scalable-web-applications-with-google-app-engine आपको वास्तविक दुनिया के अनुप्रयोगों में उस निम्न स्तर की सामग्री का उपयोग करने का तरीका दिखाएगा।

एक और है जो सामान्य समस्याओं के अन्य समाधान प्रस्तुत करता है http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html - डेटास्टोर की सीमाओं के लिए नए प्रकार के समाधानों के लिए अपना मन खोलने के लिए अच्छा है।

+0

ग्रेट वीडियो, सभी GAE कोडर के लिए देखना चाहिए। –

+0

बीटीडब्ल्यू, शेडिंग काउंटर का उपयोग उन गुणों के लिए किया जाता है जो एक बार कई बार बदलते हैं। प्रत्येक परिवर्तन के लिए सरल लेखन का उपयोग करने से एक इकाई पर एक लेखन सीमा प्रभावित होगी। –

+1

@ पीटर शार्डेड काउंटर होमरन्स की गिनती के लिए अनावश्यक हैं जब तक कि आपके पास बेसबॉल प्लेयर न हो जो विस्तारित अवधि के लिए एक से अधिक सेकंड हिट कर सके। –

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