amazon-web-services - 是否有提供 <= 20 毫秒查询延迟的 AWS 服务?
问题描述
对于一个用例,我的团队正在使用 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 个字符串类型的属性。我们使用 AWS KMS 进行静态加密,所有 4-5 个属性都存在于 GSI 中。
我们看到 GSI 上的 p99 延迟通常为 30-40 毫秒(毫秒),用于检索约 30 行数据。
有没有减少这种延迟的好方法(除了缓存)?对于我们的服务接收的客户端流量模式,缓存不是一个可行的解决方案。
我们正在研究几个选项:-
创建一个在 GSI-hash-key 上建立索引的 DynamoDB 新表,所有数据都存储为 JSON blob(或压缩 blob)。这将减少延迟,因为 Query 现在将变为 GET。但是一旦项目超过 400KB 属性大小限制,这将变得很困难。
创建一个新的 DynamoDB 表,该表在 GSI-has-key 上建立索引,范围键为 1、2、3...检索多行 JSON blob。一旦开始为给定的哈希键创建太多范围键,这将增加延迟。
使用 ElasticSearch 执行上述操作(推测 ElasticSearch 对文档大小的限制较少),但我们不确定延迟是否与 DynamoDB 查询延迟相似或更差。
AWS 提供的任何其他数据库解决方案对我们的用例有帮助吗?
注意:- 我们的 EC2 主机与我们的 DynamoDB 表位于同一区域。30-40ms 的延迟纯粹用于 dynamoDB 查询。
解决方案
- 我认为您谈论的是查询时间,而不是延迟。如果您需要改善延迟,可以使用 VPC 终端节点。实际上,默认情况下,DDB 在公共互联网上工作
- 如果你想提高查询时间,也许你需要改变 RCU 容量。或切换到按需定价
推荐阅读
- python - 在Django中的线程内按记录提交保存操作记录
- travis-ci - 为什么不工作Jacoco?我希望我做的一切都是正确的
- node.js - 使用 Nginx 和 Socketio 的 Docker 上的 SSL 握手问题
- php - 如何在mysql中创建排行榜排名?
- json - 如何在 Spring Boot 中添加从相关对象的哈希集中序列化的 JSON 数组字段
- java - StackOverflowError 在 com.google.auth.oauth2.GoogleCredentials.createScoped(GoogleCredentials.java:222)
- java - 删除 CSV 文件中的行
- machine-learning - 即使没有任何对象,Resnet 也会显示错误的预测
- java - 如何在控制台中写入通过或失败结果以提交按钮单击(Selenium)
- python - 创建子流程调用的顺序