Ich habe eine Dynamo-DB-Tabelle, wo der HashKey die userId ist und der Bereichsschlüssel Timestamp erstellt.Dynamodb Mapper, wie doppelte Datensätze unabhängig von den Hash/Range-Schlüssel zu verhindern
Wir haben einige Legacy-Code, der Datensätze in der Dynamo-DB-Tabelle erstellt, und diese Daten haben ein Feld threadId (der Primärschlüssel aus der Legacy-DB).
Gelegentlich (dank der zugrunde liegenden Messaging-Plattform) bekomme ich Datensätze mit doppelten threadIds und in diesem Fall möchte ich nur einen Datensatz in der Produktionsdatenbank.
Ich habe versucht, einen Zustand wie folgt eingestellt:
DynamoDBSaveExpression saveExpr = new DynamoDBSaveExpression();
saveExpr.setExpected(new ImmutableMap.Builder()
.put("threadId", new ExpectedAttributeValue()
.withValue(new AttributeValue().withS(record.threadId))
.withComparisonOperator(ComparisonOperator.NE)).build());
mapper.save(record, saveExpr);
aber das funktioniert nicht. Ich bin mir nicht sicher, aber wenn die userId/created (hash/range key) -Werte nicht identisch sind, erstellt Dynamo einen neuen Datensatz unabhängig vom Save-Ausdruck (der nicht mit der Dokumentation übereinstimmt).
Mache ich etwas falsch? Gibt es eine Möglichkeit, einen doppelten Datensatz unabhängig von den Werten der Hash/Range-Schlüssel zu verhindern?
Ich denke, der Speicherausdruck funktioniert nur für Schlüssel, ist THREAD_ID ein Hash oder Bereichsschlüssel in Ihrem Beispiel? – Superaghu
Sorry für die späte Antwort, ja thread_id ist ein Hash-Schlüssel. – mark