我们正在从mysql迁移到dynamo db 在此之前我有一些疑问
我的mysql表上有4000万个项目
有一个开始,我将225,000个移动到dynamo db的一张桌子上,以测试是否值得
我的对象看起来像这样:
"Partition key"{
account_id:number,
book_id:1,
reader_id:2,
field:3,
field:4,
...
}
我的第一个测试是通过account_id提取数据
所以我创建了 该字段的全球索引
我尝试了什么:
查询所有数据,其中account_id = 2 使用正确的索引
花了大约90秒 并退回了225,000件物品
发电机db的正常速度吗?
现在可以说我不需要实际的对象返回 我只需要计算多少物体
匹配项:
account_id = 3
AND book_id = 10
AND reader_id = 222
我知道我需要对此表进行扫描
什么是最好的方法 我可以期望这种扫描的速度“正常”吗?
一张桌子有4000万个物品吗?
非常感谢
答案 0 :(得分:0)
Dynamodb扫描非常昂贵,几乎不应该使用,但是如果您的要求是这样,则可以采用以下方法,
维护两个表,一个表已经创建,另一个表用于存储计算值,
您可以使用dynamodb流,lambda函数在第二个表中填充数据,这将确保
现在,每当要计算数据时,就转到第二个表并获取数据。它将确保您不必进行扫描。
方法的优点
缺点
在上述建议的方法中,如果仅在第一个表中对计算值使用特殊的辅助键,则可以删除2个表。但会出现类似问题
您的表架构可能会演变,并且计算值可能没有这些值。 (例如,定义新的辅助键?)(因此建议有2个表)
种族条件将出现在其中两个请求同时尝试更新同一记录的地方。 (因此,lambda函数的并发性较低,因此 2个线程无法在同一记录上工作。)
原子性:如果第二次写入失败,我们可能必须还原第一笔看跌期权。