2012-02-13 14 views
5

मेरे पास एक लंबी दौड़ वाली नौकरी है जो 1000 इकाई समूहों को अपडेट करती है। मैं बाद में दूसरी नौकरी छोड़ना चाहता हूं, उन्हें यह मानना ​​होगा कि उन सभी वस्तुओं को अपडेट किया गया है। चूंकि बहुत से इकाई समूह हैं, इसलिए मैं इसे लेन-देन में नहीं कर सकता, इसलिए मैंने कार्य कतारों का उपयोग करने के पहले पूर्ण होने के 15 मिनट बाद चलाने के लिए दूसरी नौकरी निर्धारित की है।Google AppEngine HRD डेटास्टोर के अपडेट कब पूर्ण होते हैं?

क्या कोई बेहतर तरीका है?

क्या यह मानना ​​सुरक्षित है कि 15 मिनट एक वादा करता है कि डेटास्टोर मेरी पिछली कॉल के साथ सिंक हो रहा है?

मैं उच्च प्रतिकृति का उपयोग कर रहा हूं।

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

कि का उल्लेख इस वीडियो http://www.youtube.com/watch?feature=player_embedded&v=xO015C3R6dw

+0

मैंने नीचे आंशिक उत्तर दिया है, लेकिन क्या आप इस बारे में और जानकारी दे सकते हैं कि आप वास्तव में क्या करने की कोशिश कर रहे हैं? – mjaggard

+0

असल में मैं 1000 इकाइयों को जोड़ रहा हूं या अपडेट कर रहा हूं। जब वह काम पूरा हो जाता है, तो मुझे वस्तुओं में रैंक लागू करने की आवश्यकता होती है। इसलिए मैं एक प्रश्न चलाता हूं जो सभी रिकॉर्ड्स का चयन करता है और क्षेत्र द्वारा उन्हें आदेश देता है, मैं रैंकिंग के बारे में चिंतित हूं। फिर मैं किसी अन्य इकाई प्रकार में रैंक अपडेट करता हूं। यदि क्वेरी से संस्थाएं गायब हैं तो वह रैंक स्पष्ट रूप से बंद हो जाएगा। – user963263

उत्तर

0

मैं इस बयान मिला:

अंतिम स्थिरता के साथ, अपने लेखन से अधिक 99.9% कुछ सेकंड के भीतर प्रश्नों के लिए उपलब्ध हैं।

इस पृष्ठ के तल पर

: http://code.google.com/appengine/docs/java/datastore/hr/overview.html

तो, अपने आवेदन के लिए, की यह अगले पढ़ने पर वहाँ नहीं जा रहा है एक 0.1% मौका शायद ठीक है। हालांकि, मैं पूर्वजों के प्रश्नों का उपयोग करने के लिए अपनी स्कीमा को फिर से डिजाइन करने की योजना बना रहा हूं।

0

मुझे नहीं लगता कि वहाँ किसी भी निर्धारित करने के लिए अद्यतन किया जाता है रास्ते में बनाया में 39:30 के निशान पर है। मैं आपकी संस्थाओं के लिए अंतिम अद्यतन फ़ील्ड जोड़ने और इसे अपनी पहली नौकरी के साथ अपडेट करने की अनुशंसा करता हूं, फिर उस इकाई पर टाइमस्टैम्प की जांच करें जिसे आप दूसरे स्थान पर चलने से पहले अपडेट कर रहे हैं ... एक हैक की तरह लेकिन इसे काम करना चाहिए।

यह देखने में रुचि है कि किसी के पास बेहतर समाधान है या नहीं। किंडा उम्मीद करते हैं कि वे करते हैं ;-)

0

यह तब तक स्वचालित है जब तक आप अंत तक स्थिरता को बदले बिना इकाइयां प्राप्त कर रहे हों। एचआरडी वापस लौटने से पहले प्रासंगिक डेटास्टोर सर्वर के बहुमत में डेटा डालता है। यदि आप एसिंक्रोनस संस्करण डाल रहे हैं, तो आपको यह सुनिश्चित करने से पहले सभी भविष्य की वस्तुओं पर कॉल करना होगा।

यदि आप पहली नौकरी में वस्तुओं के लिए पूछताछ कर रहे हैं, तो यह सुनिश्चित करने का कोई तरीका नहीं है कि सूचकांक अपडेट किया गया है।

इसलिए उदाहरण के लिए ...

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

दूसरी तरफ, यदि आप नई प्रक्रियाओं को जोड़ रहे हैं या दूसरी प्रक्रिया में पहली संपत्ति में संपत्ति अपडेट कर रहे हैं, तो सुनिश्चित करने का कोई तरीका नहीं है।

+0

मेरी पहली प्रक्रिया दोनों अपडेट और नई संस्थाएं बनाती है। इसलिए यह सुनिश्चित करने का कोई तरीका नहीं है कि संस्थाएं डेटास्टोर से वही आइटम पढ़ने के लिए तत्काल कॉल में मौजूद होंगी, इससे कोई फर्क नहीं पड़ता कि मैं दूसरी प्रक्रिया को निष्पादित करने के लिए कितना समय प्रतीक्षा करता हूं (15 मिनट या 15 दिन)? – user963263

+0

यह निर्भर करता है कि आपका क्या मतलब है "पढ़ा" - यदि आपका मतलब है "प्राप्त करें" तो हाँ, वे हमेशा वहां रहेंगे। हालांकि अगर आपका मतलब "क्वेरी" या "ढूंढें" तो नहीं। हालांकि आप जो भी इकाई जोड़ चुके हैं, उसके लिए आप केवल एक कुंजी-केवल क्वेरी कर सकते हैं - एक क्वेरी परिणाम में प्रत्येक अतिरिक्त इकाई मौजूद होने के बाद ही दूसरी प्रक्रिया को निष्पादित करने की अनुमति दे सकती है। – mjaggard

+0

आपका मतलब है कि 1000 वस्तुओं को जारी रखें या अपडेट करें और अपनी चाबियाँ स्मृति में रखें। फिर, जब मैं उन्हें एक क्वेरी के माध्यम से वापस पढ़ता हूं, तो सुनिश्चित करें कि सभी कुंजी परिणाम में मौजूद हैं? यदि वे मौजूद हैं, तो क्या डेटा पहले से सेकंड के अपडेट के साथ समन्वयित होने की गारंटी है? भले ही यह एक वैध दृष्टिकोण है, कुछ बिंदु पर मेरे 1,000 की 1,000,000 हो जाएगी और मैं उस डेटा को स्मृति में रखने से दूर रहना चाहूंगा। अभी मैं कर्सर का उपयोग करके और केवल एक ही समय में कुछ 100 वस्तुओं पर काम कर रहा हूं। – user963263

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