You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB无主键索引场景下如何批量删除指定userId的连接数据

问题结论

1. 无主键场景下是否支持batchWrite?

不支持。DynamoDB的BatchWriteItem接口对每一条待操作记录(不管是写入还是删除),都要求必须传入该记录的完整主键(若表带排序键则需要同时传分区键+排序键),不存在直接按非主键属性匹配、批量操作记录的能力,这是服务层面的固定限制。

2. 嵌套结构不是唯一替代方案,更推荐用全局二级索引(GSI)方案

你完全不需要改动现在用着顺手的原表结构,只需要加一个全局二级索引就能解决按userId批量删的需求:

  • 原表保持现有设计不变:主键ID存connectionId,保留userId、domainName、stage字段,用户断开/建立连接时的单条增删操作完全不需要改逻辑,还是单条命令就能完成
  • 给原表新增一个全局二级索引,将GSI的分区键设置为userId字段,不需要额外配置排序键
  • 当收到SNS推送的userId、需要删除该用户所有连接记录时,先对GSI执行Query操作,指定分区键为目标userId,就能查询到该用户关联的所有连接记录,拿到每条记录对应的主键(connectionId)
  • 把查询到的所有connectionId组装成BatchWriteItem的删除请求批量执行即可

你不倾向的嵌套数组结构本身存在明显缺陷,并不推荐使用:

嵌套数组方案需要处理多端并发连接/断开时的数组写冲突问题,很容易出现更新覆盖、连接记录丢失的情况;同时DynamoDB单条记录有400KB的大小上限,如果单个用户关联的连接数较多,很容易触达容量上限,灵活性远不如GSI方案。

如果单用户的连接量特别大,Query GSI时注意处理分页逻辑即可,常规WebSocket场景下单用户的连接数不会触发太高的分页成本。

内容的提问来源于stack exchange,提问作者Iliaaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:48:18