对于一个用例,我的团队正在使用DynamoDB查询GSI。 随着返回的行数增加,查询等待时间增加。
我们的代码看起来像这样(Java)(非常正常)
Map<String, Condition> keyConditions = new HashMap<>();
keyConditions.put(indexHashKeyName, new Condition()
.withAttributeValueList(Collections.singletonList(new AttributeValue(identifier.toString())))
.withComparisonOperator(ComparisonOperator.EQ));
QueryRequest queryRequest = new QueryRequest();
queryRequest.setTableName(tableName);
queryRequest.setIndexName(indexName);
queryRequest.setKeyConditions(keyConditions);
queryRequest.withAttributesToGet(attributesRequired);
QueryResult result = dynamoDB.query(queryRequest);
我们的DynamoDB表具有大约4-5个String类型的属性。我们使用AWS KMS进行静态加密,并且所有4-5个属性都存在于GSI中。
[我们看到GSI上的p99延迟通常为30-40毫秒(毫秒),可检索约30行数据。
除了减少缓存之外,有没有什么方法可以减少延迟?对于我们的服务收到的客户流量模式,缓存不是可行的解决方案。
我们正在研究几个选项:-
创建一个DynamoDB新表,该表在GSI哈希键上建立索引,所有数据都存储为JSON Blob(或压缩Blob)。这将减少延迟,因为查询现在将成为GET。但是一旦项目超过400KB属性大小限制,这将变得困难。
创建一个新的DynamoDB表,该表在GSI-has-key上建立索引,范围键为1,2,3 ...,并且每当数据块超过400KB时,创建一个新的范围项,并进行多个GET检索多行JSON Blob。一旦开始为给定的哈希键创建太多范围键,这将增加延迟。
Note
对于一个用例,我的团队正在使用DynamoDB查询GSI。随着返回的行数增加,查询等待时间增加。我们的代码看起来像这样(Java)(非常正常)Map&...