2012-02-03 10 views
43

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

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

मैं पूरी तरह से NoSQL और गैर-संबंधपरक डेटाबेस के लिए नया हूं।

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

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

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

उदाहरण के लिए, मेरे पास एक फ़्लिकर क्लोन है।

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

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

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

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

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

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

उत्तर

16

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

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

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

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

+0

ठीक है कि अच्छी समझ में आता है। आप टैग की तरह कुछ कैसे करेंगे? प्राथमिक कुंजी टैग का नाम होगा, और फिर रेंज कुंजी छवि आईडी होगी? मुझे लगता है कि प्राथमिक कुंजी स्ट्रिंग सेट नहीं हो सकती है। – chriserwin

+0

यह सही लगता है, लेकिन मैं डायनेमो डीबी के विवरण से परिचित नहीं हूं - इसके बजाय कैसंद्रा के साथ काम किया है। – DNA

+0

जब मैं पहली बार ज़ेन से डायनेमोडीबी से पूछता हूं, इसमें 3 सेकंड लगते हैं। और फिर अन्य क्वेरी निष्पादित करने में एक सेकंड से भी कम समय लगता है। इसका कारण क्या हो सकता है? – keen

6

मुझे लगता है कि आपको अपनी खुद की द्वितीयक अनुक्रमणिका बनाने की आवश्यकता है, एक और तालिका का उपयोग कर।

इस तालिका में "स्कीमा" हो सकता है:

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

-

इस तरह आप दिनांक द्वारा यूज़र आईडी और फिल्टर द्वारा क्वेरी कर सकता है और साथ ही

4

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

DynamoDB पृष्ठ से:

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

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

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