सवाल आप डायनेमोडीबी से कैसे पूछते हैं?


मैं अमेज़ॅन की डायनेमो डीबी देख रहा हूं क्योंकि ऐसा लगता है कि यह आपके डेटाबेस सर्वर को बनाए रखने और स्केल करने की सभी परेशानी दूर करता है। मैं वर्तमान में MySQL का उपयोग कर रहा हूं, और डेटाबेस को बनाए रखना और स्केल करना एक संपूर्ण सिरदर्द है।

मैं प्रलेखन के माध्यम से चला गया है और मुझे अपने सिर को लपेटने की कोशिश करने में कठिनाई हो रही है कि आप अपने डेटा को कैसे व्यवस्थित करेंगे ताकि इसे आसानी से पुनर्प्राप्त किया जा सके।

मैं नोएसक्यूएल और गैर-रिलेशनल डेटाबेस के लिए बिल्कुल नया हूं।

डायनेमो दस्तावेज़ीकरण से ऐसा लगता है कि आप केवल प्राथमिक हैश कुंजी पर एक तालिका से पूछ सकते हैं, और तुलनात्मक ऑपरेटरों की एक सीमित संख्या के साथ प्राथमिक श्रेणी कुंजी।

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

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

उदाहरण के लिए, कहें कि मेरे पास फ़्लिकर क्लोन है। मेरी छवि तालिका कुछ ऐसा दिख सकती है:

  • छवि आईडी (संख्या, प्राथमिक हैश कुंजी)
  • तिथि जोड़ी गई (संख्या, प्राथमिक श्रेणी कुंजी)
  • उपयोगकर्ता आईडी (स्ट्रिंग)
  • टैग (स्ट्रिंग सेट)
  • आदि

तो क्वेरी का उपयोग करके मैं पिछले 7 दिनों से सभी छवियों को सूचीबद्ध करने में सक्षम हूं और परिणामों की एक्स संख्या को आसानी से सीमित कर सकता हूं।

लेकिन अगर मैं किसी विशेष उपयोगकर्ता से सभी छवियों को सूचीबद्ध करना चाहता हूं तो मुझे पूर्ण तालिका स्कैन करने और उपयोगकर्ता नाम द्वारा फ़िल्टर करने की आवश्यकता होगी। टैग के लिए वही होगा।

और क्योंकि आप एक समय में केवल 1 एमबी स्कैन कर सकते हैं, आपको छवियों की एक्स संख्या खोजने के लिए कई स्कैन करने की आवश्यकता हो सकती है। मुझे छवियों की एक्स संख्या पर आसानी से रुकने का कोई तरीका नहीं दिखता है। यदि आप 30 छवियों को पकड़ने की कोशिश कर रहे हैं, तो आपका पहला स्कैन 5 पा सकता है, और आपका दूसरा 40 मिल सकता है।

क्या मुझे यह अधिकार है? क्या यह मूल रूप से एक व्यापार बंद है? आपको वास्तव में तेज़ अनुमानित डेटाबेस प्रदर्शन मिलता है जो वास्तव में रखरखाव मुक्त है। लेकिन व्यापार बंद यह है कि आपको परिणामों से निपटने के लिए और अधिक तर्क बनाने की जरूरत है?

या मैं यहाँ पूरी तरह से आधार से बाहर हूँ?


47
2018-02-03 15:34


मूल




जवाब:


हां, आप प्रदर्शन और क्वेरी लचीलापन के बीच व्यापार-बंद के बारे में सही हैं।

लेकिन दर्द को कम करने के लिए कुछ चालें हैं - माध्यमिक अनुक्रमणिका / denormalising शायद सबसे महत्वपूर्ण है।

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

आपको यह तय करना होगा कि आपको किन प्रश्नों की आवश्यकता है, फिर उनके चारों ओर डेटा मॉडल तैयार करें।


18
2018-02-03 22:42



ठीक है कि अच्छी समझ में आता है। आप टैग की तरह कुछ कैसे करेंगे? प्राथमिक कुंजी टैग का नाम होगा, और फिर रेंज कुंजी छवि आईडी होगी? मुझे लगता है कि प्राथमिक कुंजी स्ट्रिंग सेट नहीं हो सकती है। - chriserwin
यह सही के बारे में लगता है, लेकिन मैं डायनेमो डीबी के विवरण से परिचित नहीं हूं - इसके बजाय कैसंद्रा के साथ काम किया है। - DNA
जब मैं पहली बार ज़ेन से डायनेमोडीबी से पूछता हूं, तो इसमें 3 सेकंड लगते हैं। और फिर अन्य क्वेरी निष्पादित करने में एक सेकंड से भी कम समय लगता है। इसका कारण क्या हो सकता है? - keen
मुझे नहीं पता; मेरा सुझाव है कि आप टिप्पणियों में पूछने के बजाय एक नया प्रश्न बनाएं, और इसे अमेज़ॅन-डायनेमोडब के साथ टैग करें ... - DNA
मैंने यह पहले ही कर दिया। लेकिन जवाब नहीं मिला है। तो मैंने सोचा कि आप यह जान लेंगे। यह देखो stackoverflow.com/questions/21525339/... - keen


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

यह तालिका "स्कीमा" हो सकती है:

    User ID (String, Primary Key)
    Date Added (Number, Range Key)
    Image ID (Number)

-

इस तरह आप उपयोगकर्ता आईडी द्वारा क्वेरी कर सकते हैं और तिथि के अनुसार भी फ़िल्टर कर सकते हैं


6
2018-02-03 17:19





आप उपयोग कर सकते हैं समग्र हैश-रेंज कुंजीप्राथमिक सूचकांक के रूप में।

डायनेमो डीबी पृष्ठ से:

प्राथमिक कुंजी या तो एकल-विशेषता हैश कुंजी या समग्र हो सकती है   हैश-रेंज कुंजी। एक विशेषता हैश प्राथमिक कुंजी, के लिए हो सकता है   उदाहरण, "उपयोगकर्ता आईडी"। यह आपको डेटा को तुरंत पढ़ने और लिखने की अनुमति देगा   किसी दिए गए उपयोगकर्ता आईडी से जुड़े किसी आइटम के लिए।

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


5
2018-04-19 04:34