2015-11-06 13 views
10

मैं निम्न विशेषताओं वाला एक डाइनेमो तालिका है पर वैश्विक माध्यमिक सूचकांक: - DynamoDB - सेट आइटम

  • शीर्षक (स्ट्रिंग)
  • created_at

    • आईडी (प्राथमिक कुंजी संख्या) (संख्या - लंबे समय तक)
    • टैग (StringSet - टैग का एक सेट होता Android, iOS, आदि का कहना है)

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

    यदि मैं जो दृष्टिकोण ले रहा हूं वह गलत है, तो अलग-अलग तालिकाओं को बनाकर या गुणों को बदलकर इसे करने का एक वैकल्पिक तरीका भी ठीक है।

  • उत्तर

    7
    • डायनेमोडीबी सेट मानों पर अनुक्रमण को अनुकूलित करने के लिए डिज़ाइन नहीं किया गया है। नीचे अमेज़ॅन के प्रासंगिक दस्तावेज की एक प्रति है (Improving Data Access with Secondary Indexes in DynamoDB से)।

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

    • अमेज़न समस्याओं के इन प्रकार के लिए एक अलग एक-से-कई तालिका बनाने की सिफारिश की गई। यहां अधिक जानकारी: Use one to many tables
    2

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

    इस तरह आप एक बहुत ही सरल उपयोग कर सकते हैं टैग द्वारा सभी आइटम लाने के लिए Query

    +0

    टैग प्राथमिक कुंजी नहीं हो सकता है। यह केवल अनुक्रमण के लिए एक कुंजी हो सकता है। प्राथमिक कुंजी एक अद्वितीय पहचानकर्ता होना चाहिए। – 500865

    +5

    हैश + रेंज = प्राथमिक कुंजी। टैग + आईडी अनूठी है क्योंकि आईडी अद्वितीय है (आपके प्रश्न के अनुसार) –

    +2

    गैर-वर्दी लोड में टैग परिणाम के रूप में हैश होने के कारण बहुत अधिक विशिष्ट टैग मान नहीं हैं। जीएसआई के साथ नई तालिका की सीमा के रूप में हैश और टैग के रूप में आईडी रखने के साथ हैश और आईडी के रूप में टैग के रूप में अनुशंसित तरीका है। http://www.slideshare.net/AmazonWebServices/deep-dive-amazon-dynamodb (स्लाइड 33 जांचें)। – 500865

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