Используйте DynamoDBVersionAttribute при создании новой таблицы DynamoDB в Java - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь добавить DynamoDBVersionAttribute, чтобы включить оптимистическую блокировку при доступе / обновлении элементов в таблице DynamoDB.Однако я не могу понять, как именно добавить атрибут версии.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html, кажется, утверждает, что использование его в качестве аннотации в классе, который создает таблицу, - это путь,Однако наша кодовая база создает новые таблицы в формате, подобном следующему:

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
DynamoDB dynamoDB = new DynamoDB(client);

List<AttributeDefinition> attributeDefinitions= new 
ArrayList<AttributeDefinition>();
attributeDefinitions.add(new 
AttributeDefinition().withAttributeName("Id").withAttributeType("N"));

List<KeySchemaElement> keySchema = new ArrayList<KeySchemaElement>();
keySchema.add(new 
KeySchemaElement().withAttributeName("Id").withKeyType(KeyType.HASH));

CreateTableRequest request = new CreateTableRequest()
    .withTableName(tableName)
    .withKeySchema(keySchema)
    .withAttributeDefinitions(attributeDefinitions)
    .withProvisionedThroughput(new ProvisionedThroughput()
        .withReadCapacityUnits(5L)
        .withWriteCapacityUnits(6L));

Table table = dynamoDB.createTable(request);

Я не могу выяснить, как добавить атрибут VersionAttribute через код Java, как описано выше.Это не определения атрибутов, поэтому не уверены, куда они идут.Любое руководство о том, где я могу добавить этот VersionAttribute в запросе CreateTable?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Ваш код просто создает таблицу, но затем, чтобы использовать DynamoDBMapper для доступа к этой таблице, вам нужно создать класс, который ее представляет.Например, если ваша таблица называется «Пользователи», вы должны создать класс «Пользователи» и использовать аннотации, чтобы связать ее с таблицей.

Вы можете сохранить код создания таблицы, но вам необходимо создать класс DynamoDBMapper.Затем вы можете выполнить всю загрузку, сохранение и запрос с помощью класса DynamoDBMapper.

Когда вы создадите класс, просто дайте ему поле с именем version и поместите в него аннотацию, DynamoDBMapper позаботится оотдых.

0 голосов
/ 10 октября 2018

Насколько я знаю, аннотация @DynamoDBVersionAttribute для оптимистической блокировки доступна только для таблиц, смоделированных специально для запросов DynamoDBMapper.Использование DynamoDBMapper не является ужасным подходом, поскольку он эффективно создает ORM для операций CRUD над элементами DynamoDB.

Но если ваша существующая кодовая база не может использовать ее, вашей следующей лучшей идеей, вероятно, будет использование условных записейувеличить номер версии, если он равен ожидаемому (т. е. выполнить собственную оптимистическую блокировку).К сожалению, вам нужно будет включать приращение / условие в каждую запись, которую вы хотите заблокировать оптимистически.

...