我正在使用一个DDB,该DDB通过使用DynamoDBTypeConvertedJson使用DynamoDBMapper将项目转换为分区键。
例如:
public class TestObject{
private int id;
private String name;
}
@DynamoDBTable(tableName = TestTable.TABLE_NAME)
public class DynamoDBTestItem{
private testObj;
@DynamoDBIndexHashKey(globalSecondaryIndexName = TestTable.TEST_INDEX)
@DynamoDBTypeConvertedJson
public TestObject getTestObject() {
return testObject;
}
public void setTestObject(TestObject testObj) {
this.testObj = testObj;
}
}
似乎DynamoDBTypeConvertedJson基于Jackson JSON,默认情况下不保留属性顺序。因此,我们可以将项目另存为
{\"id\":7,\"name\":\"ObjName\"} or {\"name\":ObjName,\"id\":\"7\"}
查询数据库时,我确实发现有些记录的ID首先是ID,有些记录的名字是
。现在,当我执行以下操作时:
DynamoDBTestItem hashKey = new DynamoDBTestItem;
hashKey = new TestObj(7, "ObjName");
DynamoDBQueryExpression<DynamoDBTestItem> expression = new DynamoDBQueryExpression<DynamoDBTestItem>()
.withIndexName(TestTable.TEST_INDEX)
.withHashKeyValues(hashKey)
.withConsistentRead(false);
我很好奇的是,由于未保留JSON属性顺序,此查询是否会导致命中缺失。因此,如果在保存的条目中,“ id”位于“ name”之前,但是当我们进行查询时,JSON决定将“ name”置于“ id”之前,这会导致查询命中丢失吗?
从理论上来说,这似乎会发生,但是我还没有看到它在此系统中发生,这就是为什么我很好奇的原因。系统在这里很幸运吗?
谢谢
答案 0 :(得分:1)
@DynamoDBTypeConvertedJson
注释(source code)使用fastxml jackson ObjectMapper,其默认设置为sort properties alphabetically(链接文档中提到了一些警告)。
在您描述的情况下,顺序将始终相同,但是有可能创建顺序不一致的情况。