Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DynamoDB:仅获取所有唯一哈希键的最新项_Java_Amazon Dynamodb_Aws Sdk_Aws Java Sdk - Fatal编程技术网

Java DynamoDB:仅获取所有唯一哈希键的最新项

Java DynamoDB:仅获取所有唯一哈希键的最新项,java,amazon-dynamodb,aws-sdk,aws-java-sdk,Java,Amazon Dynamodb,Aws Sdk,Aws Java Sdk,给定一个带有分区键id和排序键date\u epoch的DynamoDB表 我会有这样的项目: id | date_epoch ----------------- 1 | 1535961978 2 | 1535961996 1 | 1535962033 2 | 1535962055 3 | 1535962064 5 | 1535962073 1 | 1535962080 2 | 1535962085 对于每个给定的唯一id,我只想要它的最新项

给定一个带有分区键
id
和排序键
date\u epoch
的DynamoDB表

我会有这样的项目:

id  |  date_epoch
-----------------
1   |  1535961978
2   |  1535961996
1   |  1535962033
2   |  1535962055
3   |  1535962064
5   |  1535962073
1   |  1535962080
2   |  1535962085
对于每个给定的唯一
id
,我只想要它的最新项目。因此,从这个样本数据中,我只想要以下结果:

id  |  date_epoch
-----------------
3   |  1535962064
5   |  1535962073
1   |  1535962080
2   |  1535962085
我可以用非常难看的代码来解决这个问题。我得到了每个唯一的
id
,然后对每个
id
进行迭代,只得到了最新的
。使用CANINDEXFORWARD(false)
。使用MaxResultSize(1)
(如和所示),但似乎必须有更好的方法来实现这一点


我们可以设置一个扫描过滤器来限制最大项目数或其他我没有想到的东西吗?

这更多的是一个评论而不是一个答案,但这里是这样的:不-你不能通过扫描得到你想要的答案。没有办法制作一个过滤器,即使有,你仍然需要支付扫描的全部费用(尽管这样可以节省网络带宽)

你的选择是:

  • 使用您正在使用的技术:获取唯一ID,然后使用limit 1进行迭代和查询

  • 使用两个表:一个用于保存历史值,另一个用于保存每个项目的最新值


  • 注意,在第二个例子中有一些警告:你必须容忍最终的一致性;而且,您不能每秒更新任何项目超过1000次(尽管实际限制较低,可能为6-700次)

    感谢您的坦率,很高兴我没有忽略解决方案中的某些内容