2015-06-10 3 views
21

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

मुझे किस मामले में क्वेरी पर बैचगेटइटम का उपयोग करना चाहिए और इसके विपरीत?

उत्तर

10

संक्षेप में: BatchGetItem टेबल पर काम करता है और आइटम आप प्राप्त करना चाहते हैं की पहचान करने के हैश कुंजी का उपयोग करता। आप

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

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

17

आधिकारिक दस्तावेज के अनुसार: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations

BatchGetItem के लिए, बैच में प्रत्येक आइटम अलग है, इसलिए DynamoDB पहले अगले 4 KB के लिए प्रत्येक आइटम का आकार अप राउंड और फिर पढ़ा जाता है कुल की गणना करता है आकार। परिणाम सभी वस्तुओं के कुल आकार के समान नहीं है। उदाहरण के लिए, यदि बैचगेटइटम 1.5 केबी आइटम और 6.5 केबी आइटम पढ़ता है, तो डायनेमो डीबी आकार को 12 केबी (4 केबी + 8 केबी) के रूप में गणना करेगा, न कि 8 केबी (1.5 केबी + 6.5 केबी)।

क्वेरी के लिए, लौटाई गई सभी वस्तुओं को एक एकल पढ़ने के ऑपरेशन के रूप में माना जाता है। नतीजतन, डायनेमो डीबी सभी वस्तुओं के कुल आकार की गणना करता है और फिर अगले 4 केबी सीमा तक चलता है। उदाहरण के लिए, मान लीजिए कि आपकी क्वेरी 10 आइटम लौटाती है जिसका संयुक्त आकार 40.8 केबी है। डायनेमोडीबी ऑपरेशन के लिए आइटम के आकार को 44 केबी तक गोल करता है। यदि कोई प्रश्न 64 बाइट्स के 1500 आइटम लौटाता है, तो संचयी आकार 96 केबी है।

तो, आप BatchGetItem का उपयोग करना चाहिए तभी जब अपने आइटम सभी अपेक्षाकृत बड़ा (ताकि 4KB दौर-अप कम प्रभाव पड़ता है) कर रहे हैं, और आप एक कॉल में पुनः प्राप्त करने के> 1 एमबी की जरूरत है।

किसी अन्य स्थिति में, क्वेरी का उपयोग करें, अन्यथा आप खत्म हो जाएगा कुछ नहीं के लिए और अधिक चार्ज किया जा रहा;

+5

) इस जवाब अच्छी तरह से बताते हैं जबकि कैसे मूल्य निर्धारण DynamoDB के लिए काम करता है, यह एक तरह से इस अर्थ में भ्रामक है कि ऐसा लगता है है इंप्रेशन देने के लिए कि बैचगेट को बदलने के लिए क्वेरी का संभावित रूप से उपयोग किया जा सकता है। मेरी समझ यह है कि यह नहीं कर सकता है। [यह उत्तर] देखें (http://stackoverflow.com/questions/31633141/batchgetitem-or-query-dynamodb-query-by-range) – mindreader

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