Когда следует использовать каждый из различных клиентов DynamoDB API?

Я работаю над личным проектом, который широко использует DynamoDB, который я никогда раньше не использовал, и сталкиваюсь со следующим вопросом: «Какой клиентский объект DynamoDB мне следует использовать для этого чтения / записи?»

Например, я уже встречал три разных класса, которые предлагают некоторую степень возможности записи: AmazonDynamoDBClient, DynamoDB и таблицу (направления ссылок см. ниже). Насколько я понимаю, они построены друг на друге, поскольку вы можете получить такую ​​таблицу:

Table table = new DynamoDB(new AmazonDynamoDBClient()).getTable("TableName");

Однако, когда я хочу выполнить запись (будь то «обновление» или «размещение»), AmazonDynamoDBClient предлагает

c.putItem(PutItemRequest r);
//or
c.updateItem(UpdateItemRequest r);
//or
c.batchWriteItem(BatchWriteItemRequest r);

DynamoDB предлагает

d.batchWriteItem(BatchWriteItemSpec s);

и предложения стола

t.putItem(Item);
// or
t.putItem(PutItemSpec s);
// or
t.updateItem(UpdateItemSpec s);

Как видите, существует много общего в том, как можно использовать каждый класс для записи в таблицу. Кроме того, существуют различные типы объектов запроса для различных клиентских объектов (например, семейство «Запрос» и семейство «Спецификация»), каждый из которых имеет очень разные подходы к заполнению своих параметров. Это не позволяет мне использовать один запрос, а затем передавать его любому клиенту, который есть у моих классов.

Как мне выбрать, когда использовать какой клиент (и связанные с ним методы и объекты запроса)? Моя первоначальная оценка гласит, что нужно просто использовать клиент AmazonDynamoDB сам по себе, поскольку это простейший объект, который предлагает все необходимые мне функции (на первый взгляд).

ПРИМЕЧАНИЕ. У меня еще нет достаточно высокой репутации, чтобы ссылаться на все 3 класса, но доступ к таблице можно получить из возвращаемого типа метода getTable () страницы DynamoDB API.


person S.Denney    schedule 06.10.2015    source источник


Ответы (1)


видеть:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AboutJava.html

Низкий уровень - это если вы хотите в основном выполнять все вызовы DDB самостоятельно и дает вам максимальный контроль. Высокий уровень сопоставляет вещи с объектами Java, которые вы используете напрямую, и маршалирует операции, которые вы выполняете, на более низкий уровень. Документ один вроде как новый.

Разница между put и update заключается в том, что для put требуется все тело элемента, тогда как в случае обновления вам нужны только изменяющиеся атрибуты.

Пакетные операции обычно выполняются с целью задержки (например, обновление 300 записей за раз по сравнению с обновлением записи 300 раз).

Если это просто проект для домашних животных, я бы рекомендовал начать с низкоуровневого api, чтобы вы могли понять, что такое Dynamo и что он может делать на уровне API.

person Mircea    schedule 06.10.2015