2012-10-05 14 views
8

में डिज़ाइनिंग टेबल मैं डायनेमोडीबी के लिए नया हूं और मेरे पास बड़ी गड़बड़ी है: मेरी टेबल कैसा दिखना चाहिए। http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.htmlअमेज़ॅन डाइनेमोडब

(इसकी जो इसे अभी तक पढ़ा नहीं था के लिए अनुशंसित) और अब मैं कुछ दुविधाओं मैं हर किसी को उपयोग करते हुए DynamoDB होगा शुरू लगता है कि है:

मैं पदों यहाँ पढ़ा है।

पहले, मेरी टेबल: छात्रों, टीम, प्रोजेक्ट

छात्रों: आईडी, उम्र ...

टीमें: आईडी, छात्र-1-आईडी , छात्र -2-आईडी, वर्तमान-प्रोजेक्ट, प्री-प्रोजेक्ट, अंतिम अपडेट-

परियोजनाओं: आईडी, टीम-आईडी, प्रश्नों की सूची, सूची student1answers, सूची student2answers

कुछ टिप्पणियाँ:

  1. आप देख सकते हैं के रूप में मैं का उपयोग नहीं करते रेंज कुंजी। क्या मुझे इसकी आवश्यकता है?
  2. प्रत्येक उत्तर एक प्रश्न है (प्रश्न, टेक्स्ट, डालने की तारीख)
  3. प्रत्येक छात्र कई टीमों में हो सकता है।

मेरे दुविधाओं:

  1. मैं एक विशिष्ट छात्र कि विशिष्ट तिथि के बाद अद्यतन की सभी टीमों प्राप्त करना चाहते हैं।

अब मैं 2 स्कैन संचालन के लिए उपयोग कर रहा हूँ: एक student1 खोज और दूसरा student2 खोज करते हैं।

 **Is there a better way ?** 

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

  1. जब कोई प्रोजेक्ट ओवर करता है तो मैं इसका उपयोग नहीं करता हूं। पुरानी वस्तुओं के साथ क्या करना है? हटाएं? उन्हें दूसरी टेबल पर ले जाएं?

  2. प्रोजेक्ट तालिका में, जिन गुणों को अपडेट किया जा सकता है वे उत्तर विशेषता हैं इसलिए मुझे लगता है कि उन्हें प्रदर्शन के लिए उन्हें दूसरी तालिका में ले जाना है।

क्या मुझे वास्तव में दो बार अपडेट होने पर उन्हें स्थानांतरित करने की आवश्यकता है?(जब student1 जवाब भेज सकते हैं और जब student2 जवाब भेजें - और पुराने तो परियोजना है)

* अगर मैं जवाब के लिए एक नया टेबल बना मैं उन्हें एक JSON प्रारूप में स्टोर करने के लिए नहीं होगा

आप कैसे होगा टेबल डिजाइन? कृपया मुझे बताओ।

उत्तर

2
विवरण के बहुत से

अच्छा सवाल :)

अगर मैं केवल एक ही सलाह था, यह होगा:

को ध्यान में रखना NoSQL के साथ, यह न केवल ठीक लेकिन सामान्य होती है, यहां तक ​​कि आपके डेटा को डी-सामान्य करने की अनुशंसा की जाती है।

यह कहा गया है, आपके लिए "दुविधा", आपका सुझाव बहुत अच्छा था। आपको दिनांक के साथ range_key के रूप में सामान्यीकृत करना चाहिए।

  • hash_key: एक तरह से इस तरह की एक तालिका जोड़ने के लिए हो सकता है छात्र
  • range_key: तिथि
  • team: team_id

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

डायनेमो डीबी में, आपको "पुरानी" वस्तुओं (स्कैन को छोड़कर) के कारण प्रदर्शन की मंदी के बारे में चिंता करने की ज़रूरत नहीं है, यह डायनेमो डीबी की मुख्य ताकत है। फिर भी, डेटा को साफ रखने के लिए हमेशा एक अच्छा अभ्यास है लेकिन सुसंगत रहें। यदि आप समय-समय पर समाप्त होने वाली परियोजनाओं को शुरू करना शुरू करते हैं, तो उन सभी को स्थानांतरित करें या आप यह नहीं जान पाएंगे कि आपका डेटा कहां है।

अंतिम सुझाव: क्या आप वाकई "ऑड्स" अपनी वस्तुओं का वर्णन करने के लिए सबसे अच्छी बात हैं? अधिकांश समय, एक नाम, तिथि या कोई अनूठी विशेषता एक बेहतर कुंजी बनाती है।

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