2012-07-12 12 views
5

अमेज़ॅन डायनेमो डीबी को देखने के बाद मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं अपने जटिल ऑब्जेक्ट्स को कैसे स्टोर करूं जो मैं अपने कोड में बनाऊं और जारी रहना चाहता हूं। मैं समझता हूं कि मैं इन ऑब्जेक्ट्स को रिलेशनशिप डेटाबेस में माइस्क्ल जैसे कैसे स्टोर करूंगा लेकिन मैं उन्हें डायनेमो डीबी में कैसे स्टोर करूं?क्या अमेज़ॅन डायनेमो में जेसन के रूप में ऑब्जेक्ट स्टोर करना अच्छा विचार है?

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

वस्तु के इस प्रकार के लिए:: कार एक इंजन जो कई भागों में है है

यहाँ एक उदाहरण है। प्रत्येक भाग में सीरियल नंबर, लाइफ स्पैन और एक प्रतिस्थापन मान होता है।

{ 
    "engine": { 
     "parts": [ 
      { 
       "serialNumber": "1234", 
       "lifeSpan": 10, 
       "replacementValue": 100 
      }, 
      { 
       "serialNumber": "5678", 
       "lifeSpan": 1, 
       "replacementValue": 200 
      } 
     ] 
    } 
} 

मैं सिर्फ Json ऊपर डायनमो में कुंजी के रूप में स्टोर करना चाहिए: CarName 'जगुआर', मूल्य [json ऊपर] अब मैं json में कार जो कुछ इस तरह दिखेगा कर सकते हैं? या कार ऑब्जेक्ट को स्टोर करने का कोई बेहतर तरीका है?

उत्तर

1

मैं समझता हूँ कि कैसे मैं एक रिलेशनल डेटाबेस MySql की तरह में इन वस्तुओं की दुकान, लेकिन कैसे मैं उन्हें DynamoDB में स्टोर होगा?

DynamoDB के लिए मुख्यधारा के समाधान बहुत MySql एक के समान है: आप बस, एक मेज मद (dynamodb), वे दोनों फ्लैट संरचनाएं हैं, लेकिन एक dynamodb आइटम सकता है के साथ एक मेज पंक्ति (mysql) बदलने तालिका में अन्य वस्तुओं से अलग-अलग विशेषताएं हैं, और में 64KB item size limit (कॉलम/विशेषता नाम शामिल हैं)।

क्या मुझे उपरोक्त जेसन को डायनेमो में कुंजी के रूप में स्टोर करना चाहिए: कारनाम 'जगुआर', वैल्यू [ऊपर जेसन]? या कार ऑब्जेक्ट को स्टोर करने का कोई बेहतर तरीका है?

नहीं, एक बार आपके पार्ट्स सरणी बढ़ने के बाद आपको 64KB item size limit का सामना करना पड़ेगा। आप जेसन के संपीड़ित संस्करण को कम करने के लिए स्टोर कर सकते हैं, लेकिन फिर आप डायनामोड में किसी भी विशेषता सुविधा (उदाहरण के लिए LSI या GSI, updateItem) का उपयोग करने में सक्षम नहीं होंगे, न ही अन्य एडब्ल्यूएस उत्पादों के साथ सहजता से एकीकृत करेंगे।

आप dyngodb उन वस्तुओं को स्टोर कर सकते हैं, जल्द ही: प्रत्येक ऑब्जेक्ट के लिए एक डायनेमोड आइटम। सरणी तत्वों के लिए एन श्रेणियों के साथ, एरे के लिए एक हैश।

+1

आइटम आकार सीमा अब 400 KB तक बढ़ गई है –

0

आप स्ट्रिंग्स/स्ट्रिंगसेट की सरणी का उपयोग करने का प्रयास कर सकते हैं। इस तरह आप एक से अधिक वस्तुओं में एक-एक करके धक्का दे सकते हैं, दुर्भाग्यवश आप केवल एक आइटम का अनुरोध नहीं कर सकते हैं, आपको उन्हें सब कुछ प्राप्त करने की आवश्यकता है। एक और विकल्प एक धारावाहिक सरणी है (यदि आप PHP का उपयोग कर रहे हैं) जो डीबी में स्टोरेज के लिए एक स्ट्रिंग में एक अच्छा php सरणी बदल देता है।

0

आइटम आकार सीमा 400kb तक हो गई है।

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

तो मुझे नहीं लगता कि आइटम आकार सीमाओं अब एक मुद्दे के रूप में बड़े होना चाहिए है।

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

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

https://www.npmjs.com/package/dynamodb-data-types

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

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