首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在读取亚马逊DynamoDB表时管理读取容量?

如何在读取亚马逊DynamoDB表时管理读取容量?
EN

Stack Overflow用户
提问于 2017-08-10 15:21:05
回答 1查看 47关注 0票数 0

我正在寻找一些在Dynamodb表设计中创建HashKey和SortKey的建议

我已经创建了表

代码语言:javascript
复制
HashKey - id     - date with some interval  
sortKey - mainId - date with timestamp
          userId  - someNumber

我的简单代码如下所示

代码语言:javascript
复制
ValueMap valueMap = new ValueMap();
valueMap.put(":pId", pId);
valueMap.put(":mainId", mainId);

StringBuilder userIdList =follwing userIds List;

QuerySpec querySpec = new QuerySpec()
    .withProjectionExpression("id,mainId")
    .withKeyConditionExpression("id = :pId")
    .withFilterExpression("(userId in ("+userIdList+")))
    .withValueMap(valueMap).withScanIndexForward(false).withMaxResultSize(minSize);

ItemCollection<QueryOutcome> items = table.query(querySpec);

假设我尝试使用id获取数据,并按userId进行过滤。在这种情况下,我的所有读取容量将被使用,因为它通过哈希键读取数据,然后对其应用筛选。因此,在这种情况下,在对数据应用过滤器之后,我没有获得任何记录。

因此,以这种方式,此ItemCollection不返回任何记录,但它读取所有容量(以防userId列表与获取的结果不匹配)

我怎样才能设计出不浪费读容量的表,又怎么修复它呢?

EN

回答 1

Stack Overflow用户

发布于 2017-08-10 20:50:41

您有一个选择就是添加一个[Global Secondary Index][1]。它允许您访问表中的数据,就像您必须对键进行分区一样。

您可以尝试以下两种表模式之一:

HashKey - id -有一定时间间隔的日期

sortKey - mainId -带时间戳的日期

GSI HashKey - userId -用户id (允许通过用户id获取记录)

或者这个:

HashKey - id -有一定时间间隔的日期

sortKey - mainId -带时间戳的日期

GSI HashKey - userId_id -一个属性中的用户id和id (允许获取同时具有id和userId值的记录)

要获取多条记录,可以使用BatchGetItem

单次操作最多可检索16MB数据,最多可包含100个项目。如果超过响应大小限制、超过表的预置吞吐量或发生内部处理故障,则BatchGetItem将返回部分结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45607007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档