2013-07-05 2 views
14

में अंतिम एन रिकॉर्ड प्राप्त करें क्या डायनेमोड तालिका से अंतिम एन रिकॉर्ड प्राप्त करने का कोई तरीका है। मेरे पास रेंज कुंजी टाइमस्टैम्प है। इसलिए मैं क्रमिक रूप से वस्तुओं को ऑर्डर करने के लिए स्कैनइंडेक्स का उपयोग कर सकता था।डायनेमोडबी तालिका

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

उत्तर

12

डायनेमोडीबी इस तरह काम करने के लिए डिज़ाइन नहीं किया गया है। वस्तुओं को हैशकी पर हैश के अनुसार वितरित किया जाता है ताकि आदेश अनुमानित न हो।

आपके विकल्प शामिल हैं:

  • एक भी हैश कुंजी के अंतर्गत आइटम समूहीकरण (अनुशंसित नहीं: आप अपने डेटा के साथ कुछ सर्वर ओवरलोड होता है, और अमेज़न अपने पढ़ने/लिखने की क्षमता गारंटी नहीं दे सकते)
  • स्कैनिंग पूरी तालिका और एन को हालिया आइटम रखें (for (item in items) { if (item newer then oldest accumulated item) accumulate item; } जैसे कुछ);
  • कई तालिकाओं (यानी, के बजाय एक मेज Events कहा जाता है, एक बनाएं कल की घटनाओं के लिए आज की घटनाओं, Events20130706 के लिए Events20130705 कहा जाता है) में अपनी मेज विभाजन, और सिर्फ पिछले विकल्प की तरह स्कैन - इस तरह से अपने स्कैन में छोटे होते हैं

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

शायद आप इस नौकरी के लिए एक और टूल का उपयोग भी कर सकते हैं । उदाहरण के लिए, आप ऐसा करने के लिए एक Redis सर्वर हो सकता है। अपने उपयोग के मामले को और अधिक विस्तार से जानने के बिना, एक सटीक सुझाव देना मुश्किल है - यह कैसे स्केलेबल होना चाहिए? यह कितना विश्वसनीय होना चाहिए? आप कितना रखरखाव करने के इच्छुक हैं? आप इसके लिए कितना भुगतान करना चाहते हैं?

सीमा को गले लगाने, अपनी बाधाओं को जानने और रचनात्मक होने के लिए आमतौर पर बेहतर होता है।

+0

धन्यवाद। मैं इसके बारे में जानता था, लेकिन एक शॉट पूछने लायक! –

+1

2013 से इस उत्तर की तरह दिखता है, बस एक डाउनवोट मिला। कोई विशिष्ट कारण? मैंने इसे प्रश्न के संदर्भ में दोबारा पढ़ा, और यह अभी भी लागू होता है (मूल रूप से केवल अंतर यह होगा कि, 2.5 साल बाद, दिसंबर 2015 में डायनेमो डीबी ने हश और रेंज को विभाजन और सॉर्ट कुंजियों का नाम दिया, लेकिन वे अवधारणात्मक रूप से समकक्ष और रखे गए हैं एपीआई में उनके मूल नाम) –

1

मुझे यकीन नहीं है कि यह अभी भी प्रासंगिक है। मुझे पूरा यकीन है कि आप नवीनतम मूल्य प्राप्त करने के लिए एक श्रेणी के साथ ScanIndexForward का उपयोग कर सकते हैं।

+2

दुर्भाग्य से काम नहीं करेगा :( कारण यह है कि ScanIndexForward क्वेरी एपीआई का एक पैरामीटर है, जिसके लिए आपको हैशकी पर एक ईक्यू तुलना सेट करने की आवश्यकता है, जो ओपी चाहता है इससे बचने के लिए। इसका मतलब है कि ओपी को हाल ही में उपयोग की जाने वाली हालिया हैश कुंजी को जानना होगा (फिर समस्या छोटी हो जाती है, लेकिन असली दुनिया की समस्या होने की संभावना नहीं है), या पहले बुलेट प्वाइंट की तरह कुछ करने की आवश्यकता होगी उपरोक्त मेरे उत्तर में, जो अभी भी (2.5 साल बाद) एक बुरा अभ्यास माना जाता है। –