我计划使用Dynamo表作为一种复制日志,所以我有一个表,如下所示:
+--------------+--------+--------+ | Sequence Num | Action | Thing | +--------------+--------+--------+ | 0 | ADD | Thing1 | | 1 | DEL | Thing1 | | 2 | ADD | Thing2 | +--------------+--------+--------+
我的每个进程都跟踪它读取的最后一个序列号。然后,在间隔时间内,它对表发出一个Scan,ExclusiveStartKey设置为该序列号。我以为这会导致在那个序列之后阅读所有的东西,但是我却看到了不一致的结果。
例如,给定上面的表,如果我做了一个Scan(ExclusiveStartKey=1),当我期望看到第三行(seq=2)时,就会得到零的结果。
我有一种感觉,它与内部散列DynamoDB用于划分项有关,而且我误用了ExclusiveStartKey选项。
这是做这项工作的错误工具吗?
或者,每个进程可以在每个间隔上为seq+1发出一个seq+1(如果有发现,可以循环),这将导致相同的ReadThroughput,但是需要N API调用,而不是使用Scan获得的N/1MB。
发布于 2017-06-15 03:51:42
当您执行DynamoDB扫描操作时,它似乎不按哈希键进行排序。因此,使用ExclusiveStartKey不允许您获得任意页面的键。
对于这个具有序列ID的示例表,我想要的可以通过一个Kinesis流来完成。
https://stackoverflow.com/questions/44467255
复制相似问题