DynamoDB - Öğeleri Güncelle
DynamoDB'de bir öğenin güncellenmesi, temel olarak öğenin tam birincil anahtarı ve tablo adını belirlemekten oluşur. Değiştirdiğiniz her özellik için yeni bir değer gerektirir. Operasyon kullanırUpdateItem, mevcut öğeleri değiştiren veya eksik bir öğe bulunduğunda bunları oluşturan.
Güncellemelerde, işlemlerden önce ve sonra orijinal ve yeni değerleri görüntüleyerek değişiklikleri takip etmek isteyebilirsiniz. UpdateItem,ReturnValues Bunu başarmak için parametre.
Note - İşlem, kapasite birimi tüketimini raporlamaz, ancak ReturnConsumedCapacity parametre.
Bu görevi gerçekleştirmek için GUI konsolunu, Java'yı veya başka herhangi bir aracı kullanın.
GUI Araçlarını Kullanarak Öğeler Nasıl Güncellenir?
Konsola gidin. Sol taraftaki gezinme bölmesindeTables. Gerekli tabloyu seçin ve ardındanItems sekmesi.
Güncelleme için istenen öğeyi seçin ve Actions | Edit.
İçinde gerekli öznitelikleri veya değerleri değiştirin. Edit Item pencere.
Java Kullanarak Öğeleri Güncelleyin
Öğe güncelleme işlemlerinde Java kullanmak, bir Tablo sınıfı örneği oluşturmayı ve updateItemyöntem. Ardından, öğenin birincil anahtarını belirtirsiniz ve birUpdateExpression nitelik değişikliklerini detaylandırma.
Aşağıdakiler aynı şeyin bir örneğidir -
DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient(
new ProfileCredentialsProvider()));
Table table = dynamoDB.getTable("ProductList");
Map<String, String> expressionAttributeNames = new HashMap<String, String>();
expressionAttributeNames.put("#M", "Make");
expressionAttributeNames.put("#P", "Price
expressionAttributeNames.put("#N", "ID");
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":val1",
new HashSet<String>(Arrays.asList("Make1","Make2")));
expressionAttributeValues.put(":val2", 1); //Price
UpdateItemOutcome outcome = table.updateItem(
"internalID", // key attribute name
111, // key attribute value
"add #M :val1 set #P = #P - :val2 remove #N", // UpdateExpression
expressionAttributeNames,
expressionAttributeValues);
updateItem yöntem ayrıca aşağıdaki örnekte görülebilecek koşulların belirlenmesine de izin verir -
Table table = dynamoDB.getTable("ProductList");
Map<String, String> expressionAttributeNames = new HashMap<String, String>();
expressionAttributeNames.put("#P", "Price");
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":val1", 44); // change Price to 44
expressionAttributeValues.put(":val2", 15); // only if currently 15
UpdateItemOutcome outcome = table.updateItem (new PrimaryKey("internalID",111),
"set #P = :val1", // Update
"#P = :val2", // Condition
expressionAttributeNames,
expressionAttributeValues);
Sayaçları Kullanarak Öğeleri Güncelle
DynamoDB atomik sayaçlara izin verir; bu, diğer istekleri etkilemeden özellik değerlerini artırmak / azaltmak için UpdateItem'i kullanmak anlamına gelir; dahası, sayaçlar her zaman güncellenir.
Aşağıdaki, nasıl yapılabileceğini açıklayan bir örnektir.
Note- Aşağıdaki örnek, önceden oluşturulmuş bir veri kaynağını varsayabilir. Yürütme girişiminde bulunmadan önce, destekleyici kitaplıklar edinin ve gerekli veri kaynaklarını oluşturun (gerekli özelliklere sahip tablolar veya diğer başvurulan kaynaklar).
Bu örnekte ayrıca Eclipse IDE, bir AWS kimlik bilgileri dosyası ve bir Eclipse AWS Java Projesi içindeki AWS Toolkit kullanılmaktadır.
package com.amazonaws.codesamples.document;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DeleteItemOutcome;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.UpdateItemOutcome;
import com.amazonaws.services.dynamodbv2.document.spec.DeleteItemSpec;
import com.amazonaws.services.dynamodbv2.document.spec.UpdateItemSpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;
import com.amazonaws.services.dynamodbv2.model.ReturnValue;
public class UpdateItemOpSample {
static DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient(
new ProfileCredentialsProvider()));
static String tblName = "ProductList";
public static void main(String[] args) throws IOException {
createItems();
retrieveItem();
// Execute updates
updateMultipleAttributes();
updateAddNewAttribute();
updateExistingAttributeConditionally();
// Item deletion
deleteItem();
}
private static void createItems() {
Table table = dynamoDB.getTable(tblName);
try {
Item item = new Item()
.withPrimaryKey("ID", 303)
.withString("Nomenclature", "Polymer Blaster 4000")
.withStringSet( "Manufacturers",
new HashSet<String>(Arrays.asList("XYZ Inc.", "LMNOP Inc.")))
.withNumber("Price", 50000)
.withBoolean("InProduction", true)
.withString("Category", "Laser Cutter");
table.putItem(item);
item = new Item()
.withPrimaryKey("ID", 313)
.withString("Nomenclature", "Agitatatron 2000")
.withStringSet( "Manufacturers",
new HashSet<String>(Arrays.asList("XYZ Inc,", "CDE Inc.")))
.withNumber("Price", 40000)
.withBoolean("InProduction", true)
.withString("Category", "Agitator");
table.putItem(item);
} catch (Exception e) {
System.err.println("Cannot create items.");
System.err.println(e.getMessage());
}
}
private static void updateAddNewAttribute() {
Table table = dynamoDB.getTable(tableName);
try {
Map<String, String> expressionAttributeNames = new HashMap<String, String>();
expressionAttributeNames.put("#na", "NewAttribute");
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("ID", 303)
.withUpdateExpression("set #na = :val1")
.withNameMap(new NameMap()
.with("#na", "NewAttribute"))
.withValueMap(new ValueMap()
.withString(":val1", "A value"))
.withReturnValues(ReturnValue.ALL_NEW);
UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
// Confirm
System.out.println("Displaying updated item...");
System.out.println(outcome.getItem().toJSONPretty());
} catch (Exception e) {
System.err.println("Cannot add an attribute in " + tableName);
System.err.println(e.getMessage());
}
}
}