我打算将Dynamo表用作一种复制日志,所以我有一个如下所示的表:
+--------------+--------+--------+
| Sequence Num | Action | Thing |
+--------------+--------+--------+
| 0 | ADD | Thing1 |
| 1 | DEL | Thing1 |
| 2 | ADD | Thing2 |
+--------------+--------+--------+
我的每个进程都会跟踪它读取的最后一个序列号。然后,在一个时间间隔内,它会对表Scan
发出ExclusiveStartKey
,并将Scan(ExclusiveStartKey=1)
设置为该序列号。我认为这会导致在该序列之后读取所有内容,但我看到的结果不一致。
例如,根据上表,如果我执行seq=2
,当我希望看到第3行(ExclusiveStartKey
)时,我得到的结果为零。
我觉得它与内部散列有关,DynamoDB使用它来对项目进行分区,并且我误用了Query
选项。
这是错误的工具吗?
或者,每个进程可以在每个时间间隔上为seq+1
发出N
(如果发现任何内容,则循环),这将导致相同的ReadThroughput,但需要N/1MB
API调用而不是Scan
我会得到一个k
。
答案 0 :(得分:0)
当您执行DynamoDB扫描操作时,它似乎不会按哈希键进行排序。因此,使用ExclusiveStartKey
不允许您获取任意页面的键。
对于带有序列ID的示例表,可以使用Kinesis流完成我想要的。