2012-01-24 12 views
28

क्या तालिका में नए आइटम जोड़ते समय स्वचालित रूप से अद्वितीय आईडी उत्पन्न करने के लिए डायनेमोडीबी प्राप्त करना संभव है?DynamoDB के लिए यूयूआईडी?

मैंने देखा कि जावा एपीआई @DynamoDBAutoGeneratedKey का उल्लेख करती है, इसलिए मुझे लगता है कि यह PHP के साथ काम करने का एक तरीका है।

यदि ऐसा है, तो क्या एप्लिकेशन कोड इन आईडी उत्पन्न करता है या यह डायनेमो डीबी पक्ष पर किया जाता है?

उत्तर

19

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

@DynamoDBAutoGeneratedKey अंकन आपने गौर किया एक Java annotation यानी वाक्यात्मक चीनी जावा एसडीके वास्तव में द्वारा की पेशकश की है,:

एक एनोटेशन, जावा कंप्यूटर प्रोग्रामिंग भाषा में, वाक्यात्मक मेटाडाटा की एक विशेष रूप है जो कर सकते हैं जावा स्रोत कोड में जोड़ा जाना चाहिए।

ऐसे @DynamoDBAutoGeneratedKey रूप अमेज़न DynamoDB एनोटेशनवस्तु हठ मॉडल जावा SDK की उच्च स्तरीय एपीआई के भीतर के हिस्से के रूप पेशकश में से एक है (Using the Object Persistence Model with Amazon DynamoDB देखें):

एक हैश में चिह्नित करता है स्वत: जेनरेट होने के रूप में कुंजी या रेंज की प्रमुख संपत्ति। ऑब्जेक्ट पर्सिस्टेंस मॉडल इन विशेषताओं को सहेजते समय एक यादृच्छिक यूयूआईडी उत्पन्न करेगा। केवल स्ट्रिंग गुणों को स्वत: जेनरेट कुंजी के रूप में चिह्नित किया जा सकता है।

+1

snipet धन्यवाद मैं नहीं कर रहा हूँ जावा से परिचित तो आपका जवाब वास्तव में मददगार था। तो @DynamoDBAutoGeneratedKey को केवल यूआईआईडी उत्पन्न करने के लिए जावा एपीआई मिल रही है, न कि डायनेमो स्वयं सही है? यह वास्तव में बहुत अच्छा होगा यदि डायनेमो के पास यूयूआईडी विशेषता प्रकार था जो उनके पक्ष में आईडी उत्पन्न करेगा और नई वस्तुओं को जोड़ने के दौरान उन्हें वापस कर देगा। – Adam

+1

@Adam: दरअसल, '@ डायनेमोडाबाटो जेनरेटेडकी' जावा एसडीके द्वारा प्रदान की गई एक कस्टम एनोटेशन है, जो संकलन समय पर उत्पन्न होने वाली कोड उत्पन्न करती है और बदले में यूयूआईडी को रनटाइम पर उत्पन्न करने के लिए जावा एप्लिकेशन के भीतर निष्पादित होती है - इसका कोई लेना-देना नहीं है इस तरह डायनेमो डीबी। और मैं मानता हूं, एक मूल डायनेमो डीबी यूयूआईडी डेटाटाइप काफी सुविधाजनक होगा - आइए आशा करते हैं कि एडब्ल्यूएस टीम समय के साथ डायनेमो डीबी कार्यक्षमता का विस्तार करेगी, वे ग्राहक की मांग का जवाब देने और तदनुसार नवाचार करने के लिए जाने जाते हैं! –

-4

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

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

(अपवाद को संभालना सुनिश्चित करें जो एक ही तालिका में उसी मिलीसेकंड टाइमस्टैम्प के साथ एक ही आइटम में बनाया गया हो; बस वापस आकर उस मामले में ऑपरेशन को पुनः लोड करें, थोड़ी देर बाद, वर्तमान टाइमस्टैम्प।)

उदाहरण के लिए:

User table 

केवल हैश कुंजी: userID (इस प्रयोक्ता के निर्माण के टाइमस्टैम्प)।

WidgetAttributes table 

हैश-कुंजी प्लस रेंज-की।
हैश-कुंजी: userID (उस उपयोगकर्ता की उपयोगकर्ता तालिका से उपयोगकर्ता आईडी का उपयोग करें जिसके लिए विजेट संबंधित है)। रेंज-कुंजी: attribID (इस विजेट-विशेषता के निर्माण के टाइमस्टैम्प का उपयोग करें)।

अब आप किसी निश्चित उपयोगकर्ता के लिए सभी विजेट-एट्रिब्यूट प्राप्त करने के लिए विजेट एट्रिब्यूट टेबल पर "क्वेरी" ऑपरेशंस चला सकते हैं; श्रेणी-कुंजी के लिए क्वेरी-पैरामीटर के रूप में "अधिक से अधिक शून्य" का उपयोग करके।

+7

टाइमस्टैम्प अद्वितीय होने की गारंटी नहीं है, खासकर यदि एकाधिक ग्राहक समानांतर में चल रहे हैं। – Jason

+0

timestamp_userID? – shle2821

+3

@ shle2821 आईडी के लिए केवल यूयूआईडी उत्पन्न करना बेहतर होगा और इस सुझाव की तुलना में टाइमस्टैम्प को एक अलग क्षेत्र में स्टोर करना बेहतर होगा। –

0

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

पूर्व:

आईडी = uuid.v1();

देखें: uuid npm

0

Node.js में स्कीमा आधारित एडब्ल्यूएस dynamodb डेटा नक्शाकार पुस्तकालय का उपयोग करके, हैश कुंजी (आईडी) बना दी जाएगी। ऑटो जेनरेटेड आईडी यूयूआईडी v4 पर आधारित हैं।

अधिक जानकारी के लिए, निम्नलिखित aws पैकेज पर एक नज़र डालें।

Data Mapper with annotation

Data Mapper package for Javascript

नमूना

@table('my_table') 
class MyDomainClass { 
    @autoGeneratedHashKey() 
    id: string; 

    @rangeKey({defaultProvider:() => new Date()}) 
    createdAt: Date; 
} 
संबंधित मुद्दे