NoSql也搞ACID:DynamoDB Transaction
先扯扯为啥用DynamoDB,简单说就是公司没有或者没人愿意干DBA,SRE也不想干这活。。。感觉到了cloud后,DBA都华丽转身大数据了,不屑于在搞RDS。 还有些公司搞"you write it, you deploy it,and you maintain it",一个组要负责自己的产品,从UI到DB,个个都要full-stack。DynamoDB就属于Developer完全可以搞定的, 不需要DBA或者SRE帮忙。 一般业务不需要多表join的,DynamoDB设计好了都没问题,还是有些dev说,我们的业务需要ACID,今天就来打脸了,Transaction is not a deal breaker for Dynamodb anymore。
DynamoDB Transaction保证ACID。ACID意思是atomicity, consistency, isolation, and durability。这里主要谈的是atomicity,同时操作 多个表或者行,结果要是all or nothing,全部操作成功,或者什么都不做。
两个Transactional API TransactWriteItems
一个transaction最多操作25个不用的items,每个item大小不超过400 KB,整个transaction大小不超过4 MB。 同一个transaction只能操作同一个item一次。 消耗双倍WCUs。 可以用client token来保持幂等(10 mins)。 TransactReadItems
一个transaction最多操作25个不用的GET,整个transaction大小不超过4 MB。 返回的是同步读的结果。 消耗双倍RCUs。 读写都不用锁,有冲突就会取消transaction,需要自己处理retry。注意,即使但transaction取消了,还是消耗同样的capacity units。 其他:
transaction读写都不用锁,有冲突就会取消transaction,需要自己处理retry。注意,即使但transaction取消了,还是消耗同样的capacity units。 transaction必须在同一个AWS region transaction必须在同一个AWS 账户 transaction必须在DynamoDB里 例子 源码: https://github.