java - DynamoDB:仅获取所有唯一哈希键的最新项目
问题描述
给定一个带有分区键id
和排序键的 DynamoDB 表date_epoch
。
我会有这样的物品:
id | date_epoch
-----------------
1 | 1535961978
2 | 1535961996
1 | 1535962033
2 | 1535962055
3 | 1535962064
5 | 1535962073
1 | 1535962080
2 | 1535962085
对于每个给定的 unique id
,我只想要它的最新项目。所以从这个样本数据中,我只想要以下结果:
id | date_epoch
-----------------
3 | 1535962064
5 | 1535962073
1 | 1535962080
2 | 1535962085
我可以用非常难看的代码弄清楚如何做到这一点。我已经获得了每个 unique id
,然后遍历每个人id
并仅获得最新的项目.withScanIndexForward(false)
and .withMaxResultSize(1)
(如本示例和本示例所示),但似乎必须有更好的方法来做到这一点。
我们可以设置一个扫描过滤器来限制最大项目或其他我没有想到的东西吗?
解决方案
这更像是一个评论而不是一个答案,但它是这样的:不 - 您无法通过扫描获得您正在寻找的答案。没有办法制作过滤器,即使有,您仍然需要为扫描支付全价(尽管您会节省网络带宽)。
您的选择是:
使用您正在使用的技术:获取唯一 ID,然后使用限制 1 进行迭代和查询
使用两张表:一张保存历史值,一张保存每个项目的最新值
请注意,在第二个示例中,有一些警告:您必须容忍最终的一致性;并且您每秒更新任何项目的次数不得超过 1000 次(尽管实际限制实际上较低 - 可能 6-700 次)
推荐阅读
- python - 音频文件无法读取为 PCM WAV、AIFF/AIFF-C 或 Native FLAC;检查文件是否损坏或其他格式/语音到文本视图python
- c++ - Karatsuba 与字符串 C++ 的乘法
- amazon-web-services - 在现有 Amazon DynamoDB 表中添加新列的问题
- gcloud - 无法为服务帐户创建角色,因为“此资源不支持”
- html - 仅在一个元素上允许指针事件
- c - 无法编译 PnetCDF:“tst_rec_vars”测试失败
- javascript - Puppeteer:从数据库中的 for 循环中保存数据
- freecad - 当相交的三角形在同一平面上时,不会检测到自相交
- python - Nornir Netmiko 与 AWS EC2 Cisco IOS-XE 路由器的连接失败 - 由于 SSH 密钥而无法连接?
- elasticsearch - 如何在 DSL 查询中放置或设置两个不同的键