2015-03-21 7 views
6

डायनेमोडब में आपको एक इंडेक्स में निर्दिष्ट करने की आवश्यकता है जो क्वेरी बनाने के लिए उपयोग की जा सकती है।डायनेमोडब: दो से अधिक विशेषताओं का उपयोग कर क्वेरी

मैं दो से अधिक विशेषताओं का उपयोग कर क्वेरी कैसे बना सकता हूं?

बोटो का उपयोग उदाहरण।

Table.create('users', 
     schema=[ 
      HashKey('id') # defaults to STRING data_type 
     ], throughput={ 
      'read': 5, 
      'write': 15, 
     }, global_indexes=[ 
      GlobalAllIndex('FirstnameTimeIndex', parts=[ 
       HashKey('first_name'), 
       RangeKey('creation_date', data_type=NUMBER), 
      ], 
      throughput={ 
       'read': 1, 
       'write': 1, 
      }), 
      GlobalAllIndex('LastnameTimeIndex', parts=[ 
       HashKey('last_name'), 
       RangeKey('creation_date', data_type=NUMBER), 
      ], 
      throughput={ 
       'read': 1, 
       'write': 1, 
      }) 
     ], 
     connection=conn) 

मैं पहली बार नाम 'जॉन', अंतिम नाम 'डो' के साथ उपयोगकर्ताओं के लिए कैसे दिखते हैं, और '2015/03/21' Boto के प्रयोग पर बनाया जा सकता है?

+0

आप एक सूचकांक पर क्वेरी और उपयोग कर सकते हैं एक [ 'ConditionExpression'] (http : //docs.aws.amazon.com/amazo अन्य विशेषता तुलना के लिए ndynamodb/नवीनतम/developerguide/अभिव्यक्तियाँ। निर्दिष्ट करनाConditions.html)। यह स्पष्ट नहीं है कि आपकी तालिका अभी कैसे संरचित है। – mkobit

+0

आपको किस अतिरिक्त जानकारी की आवश्यकता है? क्या आपका मतलब है कि यह टेबल निर्माण कमांड पर्याप्त नहीं है? –

उत्तर

6

आपकी डेटा मॉडलिंग प्रक्रिया को आपके डेटा पुनर्प्राप्ति आवश्यकताओं को ध्यान में रखना होगा, डायनेमोडीबी में आप केवल हैश या हैश + रेंज कुंजी से पूछ सकते हैं।

यदि प्राथमिक कुंजी द्वारा पूछताछ आपकी आवश्यकताओं के लिए पर्याप्त नहीं है, तो आप निश्चित रूप से माध्यमिक अनुक्रमणिका (स्थानीय या वैश्विक) बनाकर वैकल्पिक कुंजी प्राप्त कर सकते हैं।

हालांकि, कई विशेषताओं का संयोजन कुछ परिदृश्यों में माध्यमिक अनुक्रमणिका बनाए रखने की लागत से बचने के लिए आपकी प्राथमिक कुंजी के रूप में उपयोग किया जा सकता है।

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

हैश कुंजी में एक मान होना चाहिए जिसे आपके आवेदन द्वारा गणना की जा सकती है और साथ ही समान डेटा पहुंच प्रदान करता है।

हैश कुंजी (नाम):: first_name # last_name

रेंज कुंजी (बनाया): MM-DD-YYYY-HH-मिमी-एसएस मिलीसेकेंड उदाहरण के लिए, कि आप इस प्रकार अपनी चाबी निर्धारित करने का निर्णय कहना

यदि आप उल्लिखित हैं, तो तालिका में अपनी कुंजी अद्वितीय बनाने के लिए पर्याप्त नहीं हैं, तो आप हमेशा अतिरिक्त विशेषताओं को जोड़ सकते हैं।

users = Table.create('users', schema=[ 
     HashKey('name'), 
     RangeKey('created'), 
    ], throughput={ 
     'read': 5, 
     'write': 15, 
    }) 

मेज पर उपयोगकर्ता जोड़ना:

with users.batch_write() as batch: 
    batch.put_item(data={ 
     'name': 'John#Doe', 
     'first_name': 'John', 
     'last_name': 'Doe', 
     'created': '03-21-2015-03-03-02-3243', 
    }) 
कुछ

उपयोगकर्ता जॉन डो, '03 पर बनाया खोजने के लिए -21-2015 'आपका कोड होना चाहिए की तरह:

name_john_doe = users.query_2(
    name__eq='John#Doe', 
    created__beginswith='03-21-2015' 
) 

for user in name_john_doe: 
    print user['first_name'] 

महत्वपूर्ण विचार:

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

ii। मैं उल्लेख किया है कि हैश कुंजी वर्दी डेटा का उपयोग प्रदान करना चाहिए:।

"डायनमो अपने प्रतिकृतियां भर में उसके प्रमुख अंतरिक्ष विभाजन और वर्दी लोड वितरण सुनिश्चित करने के लिए लगातार हैशिंग का उपयोग करता है एक वर्दी कुंजी वितरण हमें प्राप्त करने में मदद कर सकते हैं मानते हुए वर्दी लोड वितरण कुंजी की पहुंच वितरण अत्यधिक skewed नहीं है।"[DYN]

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

नीचे दिए गए लिंक विषय के बारे में एक पूर्ण विवरण दिया गया है:।

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.UniformWorkload

+1

धन्यवाद !, हमने इसे बिल्कुल बनाया और बहुत अच्छा काम किया: डी –

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