डायनमोब में कई तालिकाओं का उपयोग कब करें?


11

DyanmoDB सर्वोत्तम अभ्यास यह स्पष्ट करते हैं कि:

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

मुझे पता है कि यह मनोरंजक है तो बस हर एक ट्यूटोरियल के बारे में मैंने देखा है कि DyanmoDB के पास एक मल्टी-टेबल डिज़ाइन है।

लेकिन व्यवहार में इसका क्या मतलब है?

आइए तीन मुख्य संस्थाओं के साथ एक साधारण एप्लिकेशन पर विचार करें: उपयोगकर्ता, परियोजनाएं और दस्तावेज। एक उपयोगकर्ता कई परियोजनाओं का मालिक है, और एक परियोजना में कई दस्तावेज़ हो सकते हैं। हमें आमतौर पर एक उपयोगकर्ता के लिए परियोजनाओं पर और एक परियोजना के लिए दस्तावेज़ों पर क्वेरी करनी होती है। पढ़ता है एक महत्वपूर्ण मार्जिन से outnumber लिखता है।

एक भोले ट्यूटोरियल की तालिका डिज़ाइन में तीन तालिकाओं का उपयोग किया जाएगा:

Users
Hash key
user-id

Projects
Hash key       Global Index
project-id     user-id

Documents
Hash key       Global Index
document-id    project-id

हम बहुत आसानी से पतन कर सकते हैं Projectऔर Documentएक Documentsतालिका में:

Documents
Hash key    Sort key        Global Index
project-id  document-id     user-id

लेकिन वहाँ क्यों रुकना? उन सभी पर शासन करने के लिए एक टेबल क्यों नहीं? चूंकि Userसब कुछ का मूल है ...

Users
Hash key    Sort key
user-id     aspect
---------   ---------
foo         user                   email: foo@bar.com ...
foo         project:1              title: "The Foo Project"
foo         project:1:document:2   document-id: 2     ...

तब हमारे पास एक ग्लोबल इंडेक्स होगा, कहते हैं, emailउपयोगकर्ता रिकॉर्ड लुकअप के लिए फ़ील्ड, और document-idप्रत्यक्ष दस्तावेज़ लुकअप के लिए फ़ील्ड पर एक और ।

यह है कि यह कैसे काम करने वाला है? क्या इस तरह के बेतहाशा भिन्न प्रकार के डेटा को एक ही तालिका में फेंकना कानूनी है? या दूसरा, दो-टेबल डिजाइन एक बेहतर दृष्टिकोण है?

किस बिंदु पर दूसरी तालिका जोड़ना सही होगा?

जवाबों:


7

हां, आप जो कह रहे हैं, वह करना वैध है। दोनों वास्तव में हैं। कुछ चर हैं जो आपके पास यहां नहीं हैं और यह मार्गदर्शन करने में मदद कर सकते हैं कि डेटा मॉडल कैसे किया जाना चाहिए।

  1. इस एप्लिकेशन और डेटा मॉडल के साथ आप किस तरह के पैमाने की तलाश कर रहे हैं?
  2. एप्लिकेशन के एक्सेस पैटर्न में से, उन पैटर्न के बीच रीड्स का अनुपात क्या है। मतलब जो दूसरों पर सबसे ज्यादा हिट हो।
  3. आपके द्वारा उपयोग किए जाने वाले पैटर्न की सूची, वे प्रति सेकंड कितनी बार प्रदर्शन करते हैं?

उदाहरण के लिए, यदि सभी रीड्स में से 80% किसी प्रोजेक्ट पर उपयोगकर्ताओं को खोजने के लिए हैं और जिनकी 30,000 / सेकंड होने की जरूरत है, लेकिन आपके आवेदन में उतने लोग नहीं हैं, जो उस कदम को आगे बढ़ाएंगे और परियोजनाओं के लिए दस्तावेजों का पता लगाएंगे, तो यह कुल रीड्स का 20% है और केवल 2000 रीड / सेकंड हो सकता है। वह पहला आपके आवेदन का "हॉट पाथ" है और इसके लिए अनुकूलित होना चाहिए।

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


पुन: अयोग्य वार्ता में से एक में, एक वरिष्ठ अभियंता ने मोटे तौर पर निम्नलिखित कहा - अतीत में, भंडारण तुलनात्मक रूप से अपेक्षाकृत अधिक महंगा था; इसलिए हमने स्टोरेज (रिलेशनल डीबी) के लिए अनुकूलित किया है लेकिन अब स्टोरेज सस्ती है! गणना अपेक्षाकृत अधिक महंगी है; इसलिए हम गणना के लिए अनुकूलन (NoSQL, पढ़ने के लिए अनुकूलित)
Gaz_Edge

मैं सहमत हूं, NoSql मुझे अपने एप्लिकेशन की आवश्यकता के अनुसार अपना डेटा प्रबंधित करने की अनुमति देता है। यह डेटा रीड और चेंज के बीच के अनुपात के बारे में है।
अनुराग पारीक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.