Статьи

Вставка элементов в таблицы DynamoDB с использованием Java

В предыдущей статье мы узнали, как создавать таблицы DynamoDB с использованием Java. Следующим шагом является вставка элементов в ранее созданные таблицы DynamoDB.

Имейте в виду, что для действия вставки наиболее простым шагом является указание первичного ключа. Для пользователей таблицы первичным ключом является атрибут email. Вы можете добавить столько атрибутов, сколько хотите, но совокупный размер не должен превышать 400 КБ.

1
2
3
4
5
6
7
8
9
Map<String,AttributeValue> attributeValues = new HashMap<>();
        attributeValues.put("email",new AttributeValue().withS("jon@doe.com"));
        attributeValues.put("fullname",new AttributeValue().withS("Jon Doe"));
 
        PutItemRequest putItemRequest = new PutItemRequest()
                .withTableName("Users")
                .withItem(attributeValues);
 
        PutItemResult putItemResult = amazonDynamoDB.putItem(putItemRequest);

DynamoDB также поддерживает пакетную запись. В этом случае основное преимущество заключается в меньшем количестве операций ввода-вывода, однако в отношении потребляемой мощности ничего не меняется. В нашем случае мы добавим партию попыток входа в систему.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Map<String,AttributeValue> firstAttributeValues = new HashMap<>();
        firstAttributeValues.put("email",new AttributeValue().withS("jon@doe.com"));
 
        Long date = new Date().getTime();
 
        firstAttributeValues.put("timestamp",new AttributeValue().withN(Long.toString(date)));
 
        PutRequest firstPutRequest = new PutRequest();
        firstPutRequest.setItem(firstAttributeValues);
 
        WriteRequest firstWriteRequest = new WriteRequest();
        firstWriteRequest.setPutRequest(firstPutRequest);
 
 
        Map<String,AttributeValue> secondAttributeValues = new HashMap<>();
        secondAttributeValues.put("email",new AttributeValue().withS("jon@doe.com"));
        secondAttributeValues.put("timestamp",new AttributeValue().withN(Long.toString(date+100)));
 
        PutRequest secondPutRequest = new PutRequest();
        secondPutRequest.setItem(secondAttributeValues);
 
        WriteRequest secondWriteRequest = new WriteRequest();
        secondWriteRequest.setPutRequest(secondPutRequest);
 
        List<WriteRequest> batchList = new ArrayList<WriteRequest>();
        batchList.add(firstWriteRequest);
        batchList.add(secondWriteRequest);
 
        Map<String, List<WriteRequest>> batchTableRequests = new HashMap<String, List<WriteRequest>>();
        batchTableRequests.put("Logins",batchList);
 
        BatchWriteItemRequest batchWriteItemRequest = new BatchWriteItemRequest();
        batchWriteItemRequest.setRequestItems(batchTableRequests);
 
        amazonDynamoDB.batchWriteItem(batchWriteItemRequest);

В случае вставки с глобальным / локальным вторичным индексом все, что вам нужно сделать, это указать соответствующие атрибуты для индекса. Учтите, что у вас могут быть пустые атрибуты, связанные с индексом, или даже дубликаты.

01
02
03
04
05
06
07
08
09
10
11
Map<String,AttributeValue> attributeValues = new HashMap<>();
        attributeValues.put("name",new AttributeValue().withS("Random SuperVisor"));
        attributeValues.put("company",new AttributeValue().withS("Random Company"));
        attributeValues.put("factory",new AttributeValue().withS("Jon Doe"));
 
 
        PutItemRequest putItemRequest = new PutItemRequest()
                .withTableName("Supervisors")
                .withItem(attributeValues);
 
        PutItemResult putItemResult = amazonDynamoDB.putItem(putItemRequest);

Вы можете найти исходный код на github .