2015-02-01 9 views
11

पर डायनेमो डीबी क्वेरी मैं डायनेमोडीबी (और सामान्य रूप से नोएसक्यूएल में) के लिए नया हूं और कुछ अवधारणाओं के चारों ओर अपने सिर को पाने के लिए थोड़ा संघर्ष कर रहा हूं। विशेष रूप से एक चीज मुझे कुछ समस्याएं दे रही है, जो एक बूलियन कुंजी के आधार पर एक टेबल पूछताछ के आसपास है।बूलियन कुंजी

मुझे एहसास है कि मैं एक बूलियन कुंजी पर प्राथमिक या माध्यमिक अनुक्रमणिका नहीं बना सकता, लेकिन मैं नहीं देख सकता कि मुझे आदर्श संरचना कैसे और निम्नलिखित संरचना के साथ तालिका को क्वेरी करना चाहिए;

reportId: string (uuid) 
reportText: string 
isActive: boolean 
category: string 

मैं निम्नलिखित खोजों को पूरा करने में सक्षम होना चाहते हैं:

  1. पहुँच कोई खास रिपोर्ट सीधे (reportId का एक प्राथमिक हैश इंडेक्स) एक विशिष्ट श्रेणी के
  2. सूची रिपोर्ट (एक प्राथमिक श्रेणी पर हैश सूचकांक)

इन दोनों स्पष्ट हैं, लेकिन मैं दो अन्य प्रश्न करने होंगे चाहते हैं;

  1. सूची सभी रिपोर्टों कि isActive = सच
  2. सूची के रूप में चिह्नित कर रहे हैं कि चिह्नित कर रहे हैं एक विशिष्ट श्रेणी की सभी रिपोर्टों isActive = सच के रूप

मेरा पहला दृष्टिकोण एक प्राथमिक hashkey बनाने के लिए किया जाएगा isActive पर सूचकांक, category पर एक रेंजकी के साथ, लेकिन मैं केवल String, NumberBoolean कुंजी प्रकार के रूप में चुनने में सक्षम हूं।

एक स्ट्रिंग के रूप में isActive भंडारण (एक बुलियन सत्य के बजाए 'सत्य' के रूप में सहेजा गया) समस्या हल करता है, लेकिन यह एक बूलियन संपत्ति के लिए एक स्ट्रिंग का उपयोग करके भयानक है।

क्या मुझे कुछ याद आ रही है? क्या बूलियन वैल्यू पर टेबल को क्वेरी करने का कोई आसान तरीका है?

किसी भी सलाह की सराहना की।

अग्रिम धन्यवाद।

उत्तर

12

मेरी परियोजना में यह विशेष परिदृश्य शामिल है और मैंने स्थानीय और वैश्विक माध्यमिक इंडेक्स दोनों पर sparse indexes का उपयोग करने के डायनेमोडीबी सर्वोत्तम अभ्यास का पालन किया है। यहाँ मैं अपने उदाहरण के साथ क्या होता है:

Table: reportId (string, hash key) || reportText (string) || isActive (string, marked as "x") || category (string) 

ActiveReportsIndex (Local Secondary Index): reportID (hash key) || isActive (range key) 

ActiveReportsByCategoryIndex (Global Secondary Index): category (hash key) || isActive (range key) || reportId 

विरल अनुक्रमित के पीछे विचार यह है कि केवल रिपोर्ट isActive के रूप में चिह्नित: "x" को अपने अनुक्रमणिका में दिखाई देगा, ताकि वे कम भंडारण और की तुलना में संसाधन की आवश्यकता होती चाहिए अपने मुख्य तालिका IsActive को एक बूलियन प्रकार की विशेषता बनाने के बजाय, जो हमेशा true या false मान संग्रहीत करेगा, रिपोर्ट "सक्रिय" जैसी स्ट्रिंग का उपयोग करें या जब आप रिपोर्ट सक्रिय हों तो किसी और चीज का उपयोग करें और रिपोर्ट सक्रिय होने पर पूरी तरह से विशेषता को हटा दें। समझ में आता है?

+2

यह सही है, और इसे अच्छी तरह से संबोधित करता है। मैंने स्पैस इंडेक्स के बारे में संदर्भ नहीं देखा था (न ही वास्तव में आपके द्वारा शामिल सर्वोत्तम अभ्यास लिंक) लेकिन ऐसा लगता है कि मुझे बस यही चाहिए। – fruvos

+2

यह डायनेमो पर एक सीमा की तरह महसूस करता है कि आप बूलियन मानों के आधार पर क्वेरी नहीं कर सकते हैं, आपको अपने स्वयं के ऐप तर्क से निपटने के लिए उन्हें बूलियन प्रकारों में परिवर्तित करना होगा। – Karthik

+0

सभी सक्रिय रिपोर्ट पुनर्प्राप्त करने के लिए आप 'ActiveReportsIndex' पर एक क्वेरी कैसे तैयार करेंगे? क्या उस सूचकांक पर स्कैन की आवश्यकता नहीं होगी? –

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