मैं एक DynamoDB क्वेरी डिज़ाइन करने का प्रयास कर रहा हूँ जो निम्नलिखित मानदंडों को पूरा करती है:

get items by type, category, and date between(date_1, date_2)

मेरे पास ये विशेषताएँ पहले से ही एक वैश्विक माध्यमिक सूचकांक में संग्रहीत हैं:

  • प्रकार (स्ट्रिंग)
  • श्रेणी (स्ट्रिंग)
  • तिथि (स्ट्रिंग)

मुझे पता है कि मैं किसी दिए गए दिनांक स्ट्रिंग द्वारा क्वेरी करने के लिए between ऑपरेटर का उपयोग कर सकता हूं:

gsi_1_pk = 'products' and gsi_1_sk between '2019-01-01T00:00:00.000Z' and '2019-01-01T00:00:00.000Z'

लेकिन ऐसी स्थितियां हैं जहां मैं केवल तारीख ही नहीं, 3 विशेषताओं से पूछताछ करना चाहता हूं।

इसलिए, मुझे एक समाधान चाहिए जो मुझे सभी संभावित फ़िल्टरिंग संयोजनों द्वारा क्वेरी करने की अनुमति देता है: type, category, date between, type + category, type + date between, category + date between type + category + date between.

मैं इस between ऑपरेशन को GSI की अन्य विशेषताओं के साथ कैसे जोड़ सकता हूं?

1
andreybleme 17 अगस्त 2020, 17:41
क्‍या क्‍लाइंट हमेशा प्रकार या श्रेणी के आधार पर खोज करता रहेगा, या वे बिना किसी निर्दिष्ट किए उत्‍पादों की खोज कर सकते हैं? क्या आपको "तारीख के अनुसार सभी उत्पादों को प्राप्त करें" एक्सेस पैटर्न का समर्थन करने की आवश्यकता है?
 – 
Seth Geoghegan
17 अगस्त 2020, 18:12
यदि आप ऐसे आइटम चाहते हैं जहां प्रकार और श्रेणी दोनों ज्ञात मान हैं और दिनांक एक विशिष्ट श्रेणी में है, तो pk=type+category और sk=date के साथ एक GSI बनाएं।
 – 
jarmod
17 अगस्त 2020, 18:25
मुझे "प्रकार + दिनांक", या "श्रेणी + डेटा" द्वारा पूछताछ करने में सक्षम होना चाहिए। आपका सुझाव केवल तभी उपयुक्त होगा जब मुझे हमेशा "टाइप + श्रेणी" का उपयोग करने की आवश्यकता हो। मैं इसे प्रश्न में जोड़ दूंगा, धन्यवाद।
 – 
andreybleme
17 अगस्त 2020, 19:26
1
आप टाइप/डेट, कैटेगरी/डेट और टाइप+कैटेगरी/डेट क्वेरी के लिए 3x जीएसआई का इस्तेमाल कर सकते हैं।
 – 
jarmod
17 अगस्त 2020, 20:12
1
शायद एक अलोकप्रिय उत्तर, लेकिन हो सकता है कि डायनेमोडीबी इस नौकरी के लिए सही उपकरण नहीं है और आपको आरडीएस डेटाबेस के साथ जाना चाहिए। आप अभी भी Aurora के साथ सर्वररहित RDS कर सकते हैं।
 – 
Jim
18 अगस्त 2020, 20:20

1 उत्तर

सबसे बढ़िया उत्तर

मैंने एक नया ग्लोबल सेकेंडरी इंडेक्स बनाना समाप्त कर दिया, जहां मैं date को अकेले सॉर्टिंग कुंजी पर संग्रहीत करता हूं, जो मुझे बिना किसी समस्या के between डायनेमो ऑपरेशन का उपयोग करने की अनुमति देता है।

नकारात्मक पक्ष यह है कि मुझे इतनी सरल क्वेरी के लिए एक नया जीएसआई बनाना पड़ा। लेकिन जैसा कि यहां कई लोगों ने कहा है, DynamoDB इस काम के लिए "सही/सर्वश्रेष्ठ" उपकरण नहीं लगता है।

0
andreybleme 19 अगस्त 2020, 21:06
मैं उत्सुक हूं कि वह एकल जीएसआई आपके द्वारा वर्णित सभी 7 एक्सेस पैटर्न का समर्थन कैसे करेगा।
 – 
Seth Geoghegan
19 अगस्त 2020, 21:25