DynamoDB एडब्ल्यूएस जावा 1.4.1 => 1.4.2 (गैर संपूर्ण) प्रवास कदम
ठीक है, मैं गोली थोड़ा और ऐसा किया। मेरा अनुभव यहाँ है।
पहले, बदल DynamoDB नाम स्थान:
com.amazonaws.services.dynamodb
=>com.amazonaws.services.dynamodbv2
पहली बात तुम नोटिस है वहाँ लापता प्रकार हैं। सबसे बड़ी कुंजी कुंजी चली गई है। अच्छा रिडेंस क्योंकि यह नाम का बहुत सामान्य था। अब इसे मानचित्र के साथ बदल दिया गया है जो समझ में आता है क्योंकि Local Secondary Indexes (एलएसआई) के साथ चाबियाँ बहुत अधिक लचीली हो जाती हैं। दुर्भाग्यवश, सामान्य रूप से नक्शे और जेनिक्स के साथ काम करना जावा में बेकार है (बोनस नीचे देखें)। चला गया withHashKeyElement
/withRangeKeyElement
के धाराप्रवाह इंटरफेस हैं।
इसके बाद, बहुत सावधानी से लगता है/DynamoDB प्रकार जो सामान्य संग्रह द्वारा प्रतिस्थापित किया गया बदल देते हैं:
com.amazonaws.services.dynamodb.model.Key
=>Map<String, AttributeValue>
com.amazonaws.services.dynamodb.model.BatchResponse
=>List<Map<String, AttributeValue>>
com.amazonaws.services.dynamodb.model.KeySchema
=>List<KeySchemaElement>
- (शायद अन्य, ये कुछ मैंने सीधे संदर्भित किए थे।)
अगला, तोड़ने वाली हर चीज़ को ढूंढें। यह बहुत मैन्युअल प्रक्रिया है जिसके लिए आपके कोड बेस और एसडीके को अच्छी तरह से जानने की आवश्यकता है। विशेष रूप से, आपको अपनी मुख्य स्कीमा को बहुत अच्छी तरह से जानना चाहिए क्योंकि यह यहां से सभी तार हैं। सौभाग्य से मेरी स्थिति में, पहले दो कार्यों में परिवर्तन के बारे में 90% थे:
- हर
new Map<String, AttributeValue>
का पता लगाएं, यह एक संकेत है कि Key
पूर्व में वहाँ था।
QueryRequest
मेगा withKeyConditions(Map<String,Condition>)
में withHashKeyValue(AttributeValue)
withRangeKeyCondition(Condition)
विलय कर इस विधि LSI के लिए कोर परिवर्तन आप हैश/रेंज के अलावा अन्य बातों का उल्लेख कर सकते है। यह स्वीकार करता है कि इंटरफ़ेस की तुलना में अधिक प्रतिबंधित है, लेकिन यह तर्कसंगत है जब आप मानते हैं कि डायनेमोडबी केवल आपको अनुक्रमित विशेषताओं से पूछताछ करने देता है।
DynamoDBQueryExpression
जेनेरिक बन गया और इसके इंटरफेस को बदल दिया (यकीन नहीं क्यों)।
KeySchemaElement
नहीं रह गया है AttributeType
जरूरत है, लेकिन अब KeyType
अंत में, संकलित करें और प्रतिगमन अपने पूरे ढेर परीक्षण की जरूरत है।
पीएस जबकि मैं यह सब कर रहा था, version 1.4.4.1 अभी मेवेन सेंट्रल को जारी किया गया था।
बोनस
के बाद से नक्शे शिथिल टाइप किये गए वर्गों के जावा की कमी के लिए आम समाधान कर रहे हैं, वे हर जगह हैं। थोड़ा सा सहायक lib वास्तव में इन कम verbosely निर्माण की दिशा में एक लंबा रास्ता तय कर सकते हैं।
public class MakeJavaSuckLess { // TODO: find a shorter class name
public static final float MAX_LOAD_FACTOR = 1.0f;
/**
* Builds a mutable Map from an interlaced sequence of key-value pairs
* where keys are strings and values are VType objects
* @param pairs
* @return
*/
public static <VType> Map<String, VType> asMap(Object... pairs) {
return mergeMaps(null, pairs);
}
/**
* Builds a mutable Map from an interlaced sequence of key-value pairs
* where keys are strings and values are VType objects
* @param pairs
* @return
*/
public static <VType> Map<String, VType> mergeMaps(Map<String, VType> map, Object... pairs) {
final int length = (pairs != null) ? pairs.length/2 : 0;
if (map == null) {
// max out the load factor since most of these don't change
map = new HashMap<String, VType>(length, MAX_LOAD_FACTOR);
}
for (int i=0; i<length; i++) {
String key = asString(pairs[2*i]);
@SuppressWarnings("unchecked")
VType value = (VType)pairs[2*i+1];
map.put(key, value);
}
return map;
}
}
अब आप अपने DynamoDB कुंजी पैदा कर रही है थोड़ा कम बदसूरत: यहाँ मेरी सहायक के कुछ टुकड़े हैं
Map<String, AttributeValue> key = MakeJavaSuckLess.asMap("hashKey", new AttributeValue("hashVal"), "rangeKey", new AttributeValue("rangeVal"));
Type erasure जावा के जेनरिक में यह फिर से स्थानों में भद्दा बनाता है। आपको कभी-कभी VType
:
new GetItemRequest().withKey(MakeJavaSuckLess.<AttributeValue>asMap("hashKey", new AttributeValue("hashVal"), "rangeKey", new AttributeValue("rangeVal")));
स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता होगी। यह एक अच्छा सारांश है और इसमें कुछ चीजें शामिल हैं जिन्हें मुझे अपने विशिष्ट प्रवासन की आवश्यकता नहीं थी। – mckamey