"लेन-देन के लिए उपयोग करता है" में दूसरा उदाहरण ("अगर यह अभी तक मौजूद नहीं है एक नामित कुंजी के साथ एक इकाई अद्यतन करें, या इसे बनाने के") पर विचार करें:जीएई एचडीआर: क्या एक्सजी लेनदेन के भीतर अंततः लगातार कुंजी द्वारा इकाई पुनर्प्राप्तियां होती हैं?
https://developers.google.com/appengine/docs/java/datastore/transactions
अब इस परिदृश्य पर विचार करें। एक मल्टीप्लेयर गेम किसी भी दो खिलाड़ियों के बीच केवल एक मैच की अनुमति देता है। यह सुनिश्चित करने के लिए, प्रत्येक खिलाड़ी की चाबियों का उपयोग करके एक कुंजी बनाई जाती है। इस कुंजी को UniqueMatch इकाई की कुंजी के रूप में प्रयोग किया जाता है।
तो एक मैच बनाने के लिए, एक एक्सजी लेनदेन बनाया गया है। इस लेनदेन के भीतर:
हम जांचते हैं कि पहले से ही उस कुंजी के साथ अनन्य मैच इकाई नहीं है या नहीं। यदि उस कुंजी का उपयोग करके datastore.get() कॉल EntityNotFoundException को फेंक नहीं देता है, तो हम जानते हैं कि उन दो खिलाड़ियों के बीच एक मैच पहले से मौजूद है, इसलिए हम रोलबैक() और खिलाड़ियों को एक त्रुटि संदेश दिखाते हैं।
हम सभी इकाइयों को एक मैच बनाने के लिए रखने की जरूरत है। इसमें अनन्य मैच इकाई, साथ ही कुछ अन्य कुछ इकाइयां भी शामिल हैं।
लेनदेन तब किया जाता है।
ऐसा लगता है कि यह ठीक काम करता है। हालांकि, मैंने देखा कि मैं कम समय की खिड़की के भीतर किसी भी दो खिलाड़ियों के बीच दो मैचों का निर्माण कर सकता हूं। थोड़े समय के लिए (वास्तव में परीक्षणों में से एक में 10-20 तक), datastore.get (कुंजी) पर मेरी कॉल EntityNotFoundException को फेंक देती है भले ही उस कुंजी को पहले ही रखा जा चुका है()।
यह अंततः स्थिरता प्रतीत होता है। लेकिन कुंजी द्वारा दृढ़ता से सुसंगत होने की गारंटी नहीं है? क्या यह गारंटी इस तथ्य से प्रभावित है कि यह एक एक्सजी लेनदेन के भीतर किया जाता है?
अग्रिम धन्यवाद,
इस एक समान मुद्दा हो सकता है में खिलाड़ियों के साथ बनाई गई है बनाने सुनिश्चित करें। मुझे टिप्पणियों में यह गलत लगता है, Guido की टिप्पणी देखें। http://stackoverflow.com/questions/12367904/write-read-with-high-replication-datastore-ndb/12368444 मुझे यह भी यकीन था कि एक बार जब आप एक .put से एक कुंजी वापस ले लेंगे तो आप हमेशा आइटम को पुनर्प्राप्त कर सकते हैं लेकिन यह ऐसा नहीं लगता है। शायद यह memcache। –
हमम मुझे इसके बारे में इतना यकीन नहीं है, Guido विशेष रूप से प्रश्नों के बारे में बात कर रहा है, कुंजी द्वारा इकाई पुनर्प्राप्ति नहीं। प्रश्नों के लिए, मैं अंतिम स्थिरता की अपेक्षा करता हूं (जो वास्तव में सही ढंग से दस्तावेज है)। Memcache एक विकल्प हो सकता है, हाँ। अगर मुझे कोई बेहतर तरीका नहीं मिल रहा है, तो मैं memcache में देखूंगा, धन्यवाद। – fnf
सुनिश्चित करें, आपने कुंजी द्वारा इकाई का उल्लेख किया है, इसलिए मैंने सोचा कि मैं उस चर्चा को जोड़ दूंगा। मैं आपके प्रश्न को उखाड़ फेंक दूंगा। –