2012-05-29 17 views
8

मैं जावा में DynamoDBMapper की मदद से डायनेमोडीबी से पूछताछ करने की कोशिश कर रहा हूं, जिसमें हैशकी और रेंजकी दोनों हैं। लेकिन मुझे सभी नतीजे नहीं मिल रहे हैं, यह केवल कुछ हिस्सा देता है। मेरे कोड लगता है:मैं डायनामो डीबीएपर क्वेरी() के पेजिनेटेड परिणाम से सभी आइटम कैसे पुनर्प्राप्त कर सकता हूं?

queryDynamoDb() { 
    Condition rangeKeyCondition = new Condition() 
    .withComparisonOperator(ComparisonOperator.GT.toString()) 
    .withAttributeValueList(new AttributeValue().withS("0")); 

    DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression(
      new AttributeValue().withS(prefKey)); 

    queryExpression.setRangeKeyCondition(rangeKeyCondition); 

    List<MyObj> myobjs = mapper.query(MyObj.class, queryExpression); 
    return myobjs; 
} 

MyObj ठीक से DynamoDB एनोटेशन के साथ टिप्पणी की जाती है। इसलिए मैं वस्तुओं को सहेजने में सक्षम हूं, लेकिन पुनर्प्राप्ति केवल आंशिक परिणाम देता है।

DynamoDBMapper भीतर क्वेरी के प्रलेखन का कहना है:

क्वेरी विधि रिटर्न "आलसी-लोडेड" संग्रह। यही है, शुरुआत में यह परिणाम के केवल एक पृष्ठ देता है। जब आवश्यक हो तो यह अगले पृष्ठ के लिए एक सेवा कॉल बनाता है।

अब सवाल यह है कि, सेवा कॉल करने के लिए मैपर को कैसे बताना है या एक पृष्ठ की आवश्यकता है, इसलिए यह सभी पृष्ठों को लोड करता है (प्रभावी रूप से सभी प्रविष्टियां)?

उत्तर

9

DynamoDBMapper Class के लिए Amazon DynamoDB प्रलेखन के भीतर जावा कोड का टुकड़ा है थोड़ा दुर्भाग्यपूर्ण यहाँ (हालांकि तकनीकी रूप से सही), Class DynamoDBMapper के लिए AWS SDK for Java API दस्तावेज़ (स्वाभाविक रूप से) और अधिक इस संबंध में सटीक है, विधि query() देखें:

public <T> PaginatedQueryList<T> query(Class<T> clazz, 
             DynamoDBQueryExpression queryExpression) 
सूची इंटरफेस है कि इधर-उधर परिणाम का प्रतिनिधित्व करता है

कार्यान्वयन:

तो लौट आए प्रकार वास्तव में एक Class PaginatedQueryList है एम एडब्ल्यूएस डायनेमो डीबी में एक प्रश्न। अंकित परिणाम मांग पर लोड किए गए हैं जब उपयोगकर्ता उस ऑपरेशन को निष्पादित करता है जिसके लिए उन्हें आवश्यकता होती है। कुछ ऑपरेशंस, जैसे कि आकार(), को पूरी सूची लेनी होगी, लेकिन परिणाम संभवतः पृष्ठ पर पृष्ठपृष्ठ पर लाए गए पृष्ठ हैं। [जोर देना मेरा]

है यही कारण है, अगर तुम सच में, जहां तक ​​यह परोक्ष PaginatedQueryList<T> के आलसी लोडिंग कार्यान्वयन द्वारा ध्यान रखा जाता है स्पष्ट रूप से सामान्य उपयोग के दौरान कुछ भी लोड करने के लिए जरूरत नहीं है, हालांकि, यदि किसी भी कारण से वांछित है, तो आप इसे स्पष्ट रूप से उल्लिखित size() विधि के साथ स्पष्ट रूप से उल्लिखित size() विधि के साथ पूरे संग्रह तक पहुंच की आवश्यकता वाले परिचालनों से ट्रिगर कर सकते हैं।

+0

ओपन, मैं आपके उत्तर से सहमत हूं, ऐसा लगता है कि मैं एक ही समस्या में हूं। प्रश्न यहां है, https://stackoverflow.com/questions/45495145/issue-with-caching-and-dynamo-db-combination – Deepak

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

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