2012-04-19 14 views
8

मैं एक आवेदन का निर्माण किया है और यह वर्तमान में एक काफी मानक उपयोगकर्ता तालिका, के रूप में तो है:DynamoDB और उपयोगकर्ता लॉगिन तालिका

पूर्णांक आईडी, varchar ईमेल, varchar पासवर्ड

अगर मैं करने के लिए इस स्विच करने के लिए था डायनेमो डीबी तो मैं इस टेबल को कैसे बनाऊंगा?

यदि मैं ईमेल पते के साथ हैश कुंजी का उपयोग करता हूं, तो मैं आपके ईमेल को अपडेट करने की क्षमता प्रदान करने में सक्षम नहीं हूं और यदि मैंने आईडी स्टोर करने के लिए हैश का उपयोग किया है, तो मुझे स्कैन का उपयोग करना होगा जो 1 एमबी सीमा से महंगा और प्रतिबंधित है।

कोई सलाह कृपया? धन्यवाद, मार्क

+0

यह http://stackoverflow.com/q/12920884/268898 –

उत्तर

5

क्या आप कहते हैं कि आईडी का उपयोग हैश के रूप में करना महंगा है क्योंकि आपको ईमेल फ़ील्ड द्वारा फ़िल्टर करना होगा?

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

DynamoDB कोई बिल्ट-इन secundary सूचकांक है, लेकिन काफी अपने खुद के समाधान को लागू करने के सरल है।

मुख्य तालिका, हैश रूप आईडी इस्तेमाल कर सकते हैं के रूप में आप इशारा किया, और एक differente तालिका सूचकांक रूप में काम करेगा, यह हो सकता है:

varchar email, int id 

ईमेल के लिए हैश कुंजी होने के नाते सेकेंडरी टेबल यदि इसे एक ही ईमेल के साथ कई उपयोगकर्ता होने की अनुमति है, तो आप चीजों को आसान बनाने के लिए आईडी श्रेणी के रूप में उपयोग कर सकते हैं, अन्यथा एक साधारण कॉलम फिट होगा।

+1

का डुप्लिकेट प्रतीत होता है यह सच है कि आप इस तरह से अपना द्वितीयक अनुक्रमणिका बना सकते हैं, लेकिन ध्यान रखें कि ** आपका कोड ज़िम्मेदार है इसे मुख्य तालिका ** के साथ सिंक में रखते हुए। इसके अलावा, तालिका और सूचकांक तालिका को अद्यतन करने के लिए संचालन परमाणु नहीं होगा। आपके एक्सेस पैटर्न कितने समवर्ती हैं इस पर निर्भर करते हुए यह समस्या हो सकती है या नहीं भी हो सकती है। – bkirkbri

+4

डायनेमो डीबी में अब ग्लोबल सेकेंडरी इंडेक्स हैं जिनका उपयोग इस के लिए किया जा सकता है (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) –

+0

@ जेफवाल्कर कोडरेंजर मैं नहीं देखता कि कैसे जीएसआई इसे हल करने में मदद कर सकते हैं । क्या तुम समझा सकते हो? – rob

1

अनुक्रमण के लिए एक अलग तालिका होने के परिणामस्वरूप उच्च रखरखाव होगा। मैं अपने पूर्व सीटीओ से एक अनावश्यक मॉडल में आया था।

आपका तालिका के लिए: उपयोगकर्ता

आरडीबीएमएस:

आईडी, ईमेल पासवर्ड

1, senthil3569 @ stack.com, पूछता है

DynamoDB:

के EY, आईडी, ईमेल, पासवर्ड

1, 1, [email protected], पूछता है

senthil3569 @ stack.com, 1, [email protected], पूछता है

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

आशा है कि समाधान स्पष्ट है।

+2

इस समाधान को द्वितीयक तालिका वाले से कम रखरखाव की आवश्यकता कैसे होती है? आपके पास फिर से 2 रिकॉर्ड हैं और उन्हें एक लेनदेन में अपडेट नहीं किया जा सकता है, भले ही वे एक ही तालिका में हों। – ivant

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