首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamoDB数据建模

DynamoDB数据建模
EN

Stack Overflow用户
提问于 2015-06-08 13:52:09
回答 2查看 440关注 0票数 1

有一个代表用户uniques的java BitSet,我想将其存储到DynamoDB中,以便使用类似于“从日期X到日期Y给我所有的BitSets和具体的键”之类的查询。

我的第一种方法是使用一个主键来表示我真正想要计算的内容,例如一个操作:“用户-谁-付费”。然后,范围键是日期,最后,我将值转换为二进制属性。

但这可能不是一个好方法,因为我会有几个键和很多日期,所以我想知道是否有人推荐我另一种方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-17 23:10:27

DynamoDB文档中有一节涉及类似的用例。请参阅利用稀疏索引

利用稀疏索引 对于表中的任何项,只有在项中存在索引键值时,DynamoDB才会向全局辅助索引写入相应的条目。对于全局辅助索引,这是索引哈希键及其范围键(如果存在)。如果索引键值没有出现在每个表项中,则该索引称为稀疏索引。 您可以使用稀疏的全局辅助索引来有效地定位具有不常见属性的表项。为此,您可以利用以下事实:不包含全局辅助索引属性的表项根本没有索引。例如,在GameScores表中,某些球员可能在一场比赛中取得了特殊的成就--比如“冠军”--但大多数球员却没有。与扫描整个GameScores表中的Champs不同,您可以创建一个全局辅助索引,其哈希键为Champ,范围键为UserId。这将使通过查询索引而不是扫描表来轻松找到所有Champs。

这样的查询非常有效,因为索引中的项数将大大少于表中的项数。此外,您在索引中投影的表属性越少,从索引中消耗的读取容量单位就越少。

这个例子听起来非常类似于您的“用户-谁-付费”用例唯一的区别是(将"champ“替换为”付费用户“)。然而,它所讨论的情况是,很少有用户是champ(这就是为什么将"champ“作为散列键来读取更多关于好的散列键-http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html的原因)。这可以通过这样的方法来补救:您拥有champs的100个散列键- champ00、champ01、.、champ99。在写入DynamoDB条目时,可以随机选择其中一个值。

票数 1
EN

Stack Overflow用户

发布于 2015-06-08 19:47:46

使用HashMap<String userId, Integer>怎么样?这样做的好处是:

1-地图的大小将是它需要的大小。

2-你可以数到1以上。用BitSet你只能做0或1。

3-地图是由DynamoDb本地支持的。

编辑:或者,如果你不需要数一个以上,晒黑使用HashSet。如果userId在HashSet中,那就意味着您已经命中了。如果它不在HashSet中,那么它就没有命中。

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

https://stackoverflow.com/questions/30710962

复制
相关文章

相似问题

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