में प्राथमिक कुंजी आईडी के लिए ऑटो वृद्धि का उपयोग कैसे करें मैं डायनेमोडब के लिए नया हूं। जब मैं डायनेमोड के साथ putitem
का उपयोग करता हूं तो मैं ऑटो वृद्धि आईडी मान चाहता हूं।डाइनेमोड
ऐसा करना संभव है?
में प्राथमिक कुंजी आईडी के लिए ऑटो वृद्धि का उपयोग कैसे करें मैं डायनेमोडब के लिए नया हूं। जब मैं डायनेमोड के साथ putitem
का उपयोग करता हूं तो मैं ऑटो वृद्धि आईडी मान चाहता हूं।डाइनेमोड
ऐसा करना संभव है?
डायनेमोडीबी इसे बॉक्स से बाहर नहीं प्रदान करता है। आप अपने आवेदन में कुछ उत्पन्न कर सकते हैं जैसे यूयूआईडी जो अधिकांश सिस्टम के लिए "अद्वितीय" होना चाहिए।
मैंने देखा कि आप Node.js का उपयोग कर रहे थे (मैंने आपका टैग हटा दिया)। node-uuid
README
var uuid = require('node-uuid');
var uuid1 = uuid.v1();
var uuid2 = uuid.v1({node:[0x01,0x23,0x45,0x67,0x89,0xab]});
var uuid3 = uuid.v1({node:[0, 0, 0, 0, 0, 0]})
var uuid4 = uuid.v4();
var uuid5 = uuid.v4();
एफडब्ल्यूआईडब्ल्यू मैं डायनेमो के साथ इस दृष्टिकोण (हैश कुंजी के रूप में यूयूआईडी) का उपयोग करता हूं और यह बहुत अच्छा काम करता है। – rpmartz
यह उत्तर सही उत्तर के रूप में चिह्नित किया जाना चाहिए। यह ध्यान देने योग्य भी है कि क्यों: आप चाबियों का एक समान वितरण चाहते हैं, और ऑटो-वृद्धि से गैर-वर्दी वितरण होता है। अधिक जानकारी के लिए यह आलेख देखें: https://forums.aws.amazon.com/thread.jspa?messageID=312527 और यहां एडब्ल्यूएस दस्तावेज़: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ BestPractices.html –
यह DynamoDB में विरोधी पैटर्न जो भर में कई विभाजन/टुकड़े/सर्वर पैमाने पर करने का निर्माण होता है है से उदाहरण: यहाँ एक पुस्तकालय है कि UUID सुविधा प्रदान करता है है। डायनेमोडीबी स्केलिंग सीमाओं के कारण ऑटो-वृद्धि प्राथमिक कुंजी का समर्थन नहीं करता है और एकाधिक सर्वरों पर गारंटी नहीं दी जा सकती है।
बेहतर विकल्प एकाधिक सूचकांक से प्राथमिक कुंजी को इकट्ठा करना है। प्राथमिक कुंजी 2048 बाइट तक हो सकती है। वहाँ कुछ विकल्प हैं:
कोड के बाद ऑटो जाएगा डायनेमो डीबी में वृद्धि काउंटर और फिर आप इसे प्राथमिक कुंजी के रूप में उपयोग कर सकते हैं।
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'sampletable',
Key: { HashKey : 'counters' },
UpdateExpression: 'ADD #a :x',
ExpressionAttributeNames: {'#a' : "counter_field"},
ExpressionAttributeValues: {':x' : 1},
ReturnValues: "UPDATED_NEW" // ensures you get value back
};
documentClient.update(params, function(err, data) {});
// once you get new value, use it as your primary key
मेरा व्यक्तिगत पसंदीदा http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram
var EPOCH = 1300000000000;
function generateRowId(subid) {
var ts = new Date().getTime() - EPOCH; // limit to recent
var randid = Math.floor(Math.random() * 512);
ts = (ts * 64); // bit-shift << 6
ts = ts + subid);
return (ts * 512) + (randid % 512);
}
var newPrimaryHashKey = "obj_name:" + generateRowId(4);
क्या आप अपने दूसरे बिंदु और अंत में कोड के बारे में अधिक जानकारी जोड़ सकते हैं? क्या 'subId' एक शर्ड आईडी या कुछ होना चाहिए? – andrhamm
की संभावित डुप्लिकेट पर टाइमस्टैम्प + यादृच्छिक इंस्टाग्राम के Sharding आईडी पीढ़ी से प्रेरित उपयोग कर रहा है [DynamoDB में एक UUID बनाने के लिए?] (Http://stackoverflow.com/प्रश्न/11721308/कैसे-टू-मेक-ए-यूयूआईडी-इन-डायनेमोडब) – Clarkie
या यह एक http://stackoverflow.com/questions/13264236/dynamodb-auto-incremented-id-server-time-ios-sdk – Clarkie