首页 > 解决方案 > 是否有提供 <= 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 行数据。

有没有减少这种延迟的好方法(除了缓存)?对于我们的服务接收的客户端流量模式,缓存不是一个可行的解决方案。

我们正在研究几个选项:-

  1. 创建一个在 GSI-hash-key 上建立索引的 DynamoDB 新表,所有数据都存储为 JSON blob(或压缩 blob)。这将减少延迟,因为 Query 现在将变为 GET。但是一旦项目超过 400KB 属性大小限制,这将变得很困难。

  2. 创建一个新的 DynamoDB 表,该表在 GSI-has-key 上建立索引,范围键为 1、2、3...检索多行 JSON blob。一旦开始为给定的哈希键创建太多范围键,这将增加延迟。

  3. 使用 ElasticSearch 执行上述操作(推测 ElasticSearch 对文档大小的限制较少),但我们不确定延迟是否与 DynamoDB 查询延迟相似或更差。

AWS 提供的任何其他数据库解决方案对我们的用例有帮助吗?

注意:- 我们的 EC2 主机与我们的 DynamoDB 表位于同一区域。30-40ms 的延迟纯粹用于 dynamoDB 查询。

标签: amazon-web-servicesamazon-dynamodblatencydynamodb-querieslow-latency

解决方案


  1. 我认为您谈论的是查询时间,而不是延迟。如果您需要改善延迟,可以使用 VPC 终端节点。实际上,默认情况下,DDB 在公共互联网上工作
  2. 如果你想提高查询时间,也许你需要改变 RCU 容量。或切换到按需定价

推荐阅读