来自关系背景,我习惯于写下这样的东西:
UPDATE Table Set X = 1 Where Y = 2
然而,在类似Dynamodb的db中,这样的操作似乎很难实现.假设我已经对Y = 2的项目进行了查询.
我看到它的方式,提供API有两个选项:
做很多很多个人update
请求,或者
做一个batch write
和写入所有数据的回,应用了更新.
这两种方法看起来都很糟糕,性能也很差.
我错过了一些明显的东西吗?或者非关系型数据库不是为了按照这种规模处理"更新"而设计的 - 如果是这样的话,我可以在不增加性能成本的情况下实现类似的东西吗?
不,你没有遗漏任何明显的东西.不幸的是,这些是您使用DynamoDB的唯一选项,但有一点需要注意,BatchWrite一次只能批量提交25个更新操作,因此您仍然可能需要发出多个BatchWrite请求.
BatchWrite更方便DynamoDB API提供的便利,可以帮助您节省网络流量,减少25个请求的开销,但不会节省太多.
BatchWrite API也比单独的Update和Put项API灵活一点,因此在某些情况下,最好自己处理并发并只使用底层操作.
当然,最好的方案是,如果您可以构建解决方案,以便不需要对DynamoDB表执行大量更新.写入是昂贵的,如果您发现自己经常需要更新表的大部分,可能会有一个可以采用的替代设计.