2012-07-22 4 views
10

मैं थ्रेडसेफ मोड चालू होने के साथ पाइथन 2.7 के साथ एनडीबी का उपयोग कर रहा हूं।क्या key_only = true द्वारा क्वेरी करना सर्वोत्तम है तो get_multi या सिर्फ पूर्ण क्वेरी?

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

इसलिए एक अच्छा प्रतिमान केवल key_only = True के साथ पूछताछ करेगा और फिर पूर्ण संस्थाओं को प्राप्त करने के लिए get_multi करें?

लाभ होगा कि keys_only = सच प्रश्नों बहुत तेजी से कर रहे हैं की तुलना में keys_only = झूठी, get_multi संभावित सिर्फ मेम्कैश & अब मामले में मेम्कैश में सहेजे जाते हैं आप क्वेरी फिर से करने की ज़रूरत है अपने संस्थाओं get_multi फोन करके मारा सकता है।

दोष यह है कि अब आपके पास एक आरपीसी क्वेरी कॉल + get_multi कॉल है और मुझे लगता है कि एक get_multi में आप कितनी संस्थाओं को कॉल कर सकते हैं, इसकी एक सीमा है इसलिए आपका प्रभावी क्वेरी आकार सीमित हो सकता है।

आपको क्या लगता है? क्या हमें केवल key_only = True का उपयोग करके क्वेरी करना चाहिए, फिर get_multi करें? क्या कुछ न्यूनतम और अधिकतम क्वेरी आकार सीमाएं हैं जो इस तकनीक को पूरी तरह से एक क्वेरी करने के रूप में प्रभावी नहीं बनाती हैं जो पूर्ण संस्थाओं को लौटाती है?

+1

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

उत्तर

9

इस पर व्यापक रूप से शोध किया गया है। देखें http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=118

+4

लिंक के लिए धन्यवाद। संक्षेप में संक्षेप में एक key_only क्वेरी करने का लाभ होता है, तो अगर आप जानते हैं कि आपकी अधिकांश इकाइयां पहले से ही memcache में हैं, तो इकाई कुंजी के साथ get_multi लौटा दी गई है। – Dan

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