单个boto3 DynamoDB客户端能否同时更新多个表?
DynamoDB 客户端复用与跨表批量写入问题解答
1. 客户端是否需要新建?
不需要额外创建新客户端,你当前初始化的client = boto3.resource('dynamodb')实例可直接使用,原因如下:
- boto3的DynamoDB客户端(无论是resource高层封装还是client底层接口)都是无状态的,单个实例可处理同一AWS区域下所有DynamoDB表的操作,不存在单客户端绑定单表的限制
batch_write_item接口原生支持在同一个请求中指定多张表的写入请求,示例用法如下:
response = client.batch_write_item( RequestItems={ # 第一张表的写入请求 'table_1': [ {'PutRequest': {'Item': {'id': '001', 'content': 'test1'}}} ], # 第二张表的写入请求 'table_2': [ {'PutRequest': {'Item': {'order_id': 'ord001', 'price': 128}}} ] } ) # 注意:请求返回后需要判断UnprocessedItems字段,对未处理成功的操作进行重试
2. DynamoDB是否支持不同表同时更新?
完全支持:
- 单批量请求层面:
batch_write_item接口的操作可以自由分配到多张表,服务端会并行处理这些跨表操作,不同表之间不会有资源冲突 - 多并发请求层面:你也可以通过多线程、异步IO等方式同时向多张表发起单独的更新请求,不同表的操作完全隔离,只要对应表的读写容量配额足够即可正常执行
- 仅有的限制来自
batch_write_item接口本身的通用配额:单个请求最多包含25个写入/删除操作,总请求体大小不超过16MB,该限制和操作是否跨表无关。
内容的提问来源于stack exchange,提问作者user9438495
相关产品推荐
相关产品推荐

