DynamoDBMapper von dynamoDb verwenden Ich muss Folgendes tun: 1. Überprüfen Sie, ob der Follower-Tabelle bereits ein Follower mit einer bekannten leaderId und userId hinzugefügt wurde.
2. Wenn eine solche Folger gefunden wurde - ändern Sie es Zustand ist auf „ACTIVE“
3. Wenn eine solche Folger nicht gefunden wurde - speichern Sie eine neue Follower mit bestimmten leaderId/followerId und Zustand „ACTIVE“
dynamoDb - Neues Element hinzufügen, wenn der Tabelle bereits keine ähnlichen Elemente hinzugefügt wurden
Bundesstaat Folger wird in der gesamten Anwendung verwendet werden, da wir den Workflow
mit dem Status verwalten (wir versuchen, keine Daten in der Datenbank zu löschen).
Die vereinfachte "Follower" Klasse:
public class Follower {
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
private String id;
private String leaderId;
private String followerId;
private String state;
}
Meine aktuelle Lösung ist 1. Verwendung DynamoDBMapper Liste, die Follower-s zu laden erfüllen die gegebene leaderID/followerId Parameter 2. Wenn keine Ergebnisse - wir erzeugen einen neuen Follower, ansonsten aktualisieren wir den Zustand eines bestehenden
Allerdings hoffe ich, dass eine elegantere "in einem DynamoDBMapper Call" -Lösung existiert.
public void follow(String leaderId, String followerId) {
Follower follower = findFollower(leaderId, followerId);
if(follower == null){
follower = new Follower();
follower.setLeaderId(leaderId);
follower.setFollowerId(followerId);
} else {
follower.getBase().setState("ACTIVE");
}
getDbMapper().save(follower);
}
Sie könnten leaderId-folgerId als Compound-Schlüssel verwenden und einfach die Entität schreiben, ohne zu prüfen, ob sie existiert. Dies kann manchmal funktionieren, wenn eines der vorhandenen ['SaveBehavior'] (http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapperConfig.SaveBehavior.html) s passt zu Ihrem Anwendungsfall (aber Sie verlieren optimistisches Sperren durch Versionierung, da Sie eine Version nicht erwarten und inkrementieren können, ohne sie zu kennen) – zapl