मान लें कि मेरे पास मेरी डायनेमोडीबी तालिका है, Order ID प्राथमिक कुंजी के रूप में। :

table screenshot


Order ID हर बार जब भी मैं कोई नया आइटम जोड़ता/डालता हूं, एक-एक करके बढ़ता है।

अब, मेरे पास एक नंबर है, मान लीजिए 1000, और मेरा उपयोगकर्ता वे सभी आइटम प्राप्त करना चाहता है जिनमें Order ID > 1000 हैं। तो लौटाए गए आइटम 1001, 1002, 1003, और इसी तरह आखिरी तक होंगे।


मेरी आवश्यकता उतनी ही सरल है जितनी यह प्रतीत होती है - लेकिन क्या एडब्ल्यूएस डायनेमोडीबी की Query विधि के साथ ऐसा करना संभव है?

हर प्रकार की सहायता का स्वागत है, धन्यवाद!

4
kartik 29 मई 2020, 18:58

2 जवाब

वर्तमान में विभाजन कुंजी पर फ़िल्टर करने का कोई तरीका नहीं है, लेकिन मैं एक तरीका सुझा सकता हूं कि आप जो चाहते हैं उसे प्राप्त कर सकें।

आप Query के साथ सही दिशा में जा रहे हैं, जिसमें "से बड़ा" ऑपरेटर है। हालाँकि, यह केवल सॉर्ट कुंजी विशेषता पर कार्य करता है।

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

आपके एक्सेस पैटर्न के बारे में अधिक जानने के बिना, मेरा सुझाव है कि आप विभाजन कुंजी के रूप में "से" का उपयोग करके एक ग्लोबल सेकेंडरी इंडेक्स जोड़ें, जो मुझे लगता है कि उपयोगकर्ता आईडी है। फिर आप "ऑर्डर आईडी" को सॉर्ट कुंजी के रूप में उपयोग कर सकते हैं।

मेरा उपयोगकर्ता उन सभी वस्तुओं को प्राप्त करना चाहता है जिनके पास ऑर्डर आईडी> 1000 है।

जीएसआई के साथ, आप आइटम के लिए एक क्वेरी करके इसे प्राप्त कर सकते हैं जहां "User ID" is userId and "From" > orderId.

आप क्वेरी यहां पर अधिक जानकारी प्राप्त कर सकते हैं, GSI जोड़ने पर विवरण यहां, और विभाजन कुंजी चुनने के बारे में अधिक जानकारी यहां.

1
Zac Charles 29 मई 2020, 19:57

नहीं, क्योंकि Query सटीक कुंजी की अपेक्षा करता है, और विभाजन कुंजी के लिए अभिव्यक्ति की अनुमति नहीं देता है (हालांकि यह सॉर्ट कुंजी के लिए करता है)।

हालांकि आप जो उपयोग कर सकते हैं वह Scan FilterExpressions के साथ है (देखें स्कैन के लिए एक्सप्रेशन फ़िल्टर करें सिंटैक्स के लिए और कंडीशन एक्सप्रेशन ) यह बाद में सभी रिकॉर्ड और फ़िल्टर पढ़ता है, इसलिए यह सबसे प्रभावी तरीका नहीं है।

0
Christian 29 मई 2020, 19:58
धन्यवाद! जैसा कि आपने कहा था: 'क्वेरी सटीक कुंजी की अपेक्षा करता है, और विभाजन कुंजी के लिए अभिव्यक्ति की अनुमति नहीं देता है' - लेकिन क्या होगा यदि मैं '1000' जैसी क्वेरी के लिए एक सटीक संख्या प्रदान करता हूं '? क्या यह काम नहीं करेगा? धन्यवाद!
 – 
kartik
29 मई 2020, 20:08
हां, तकनीकी रूप से यह काम करना चाहिए। यह कितना उचित है यह आपके उपयोग-मामले पर निर्भर करता है।
 – 
Christian
29 मई 2020, 20:24