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

如何在部分文档可能已删除时成功批量提交?及批量同步源项计数器问题

问题2:如何批量同步源项与子项的likes计数器?

看你给出的数据结构,源项没有sourceId,子项通过sourceId关联到源项。要同步它们的likes值,有几种不同的方案,适合不同场景:

方案1:实时同步(修改源项时立即更新子项)

这是最直接的方式,当你修改源项的likes时,立刻同步所有关联的子项:

  • 先拿到源项更新后的likes值,比如newLikes;
  • 批量找到所有sourceId等于该源项ID的子项,把它们的likes设为newLikes。

举个JS里操作对象的例子:

// 假设已经修改了源项id1的likes值
const sourceItem = items.id1;
if (sourceItem) {
  const newLikes = sourceItem.likes;
  // 遍历所有子项同步
  Object.values(items).forEach(item => {
    if (item.sourceId === 'id1') {
      item.likes = newLikes;
    }
  });
}

如果是数据库操作的话,一条SQL就能搞定:

UPDATE items SET likes = ? WHERE sourceId = ?;

方案2:延迟批量同步(适合高并发场景)

如果源项的likes修改非常频繁,实时同步可能会有性能压力,这时候可以用队列+定时任务的方式:

  • 每次修改源项时,把源项ID加入一个待同步队列;
  • 用定时任务(比如每秒跑一次)批量处理队列里的ID,一次性同步所有对应子项的likes;
  • 可以给每个源项加个updateTime字段,同步时只处理比子项updateTime更新的源项数据,避免旧更新覆盖新值。

方案3:按需计算(避免存储重复数据)

其实还有个更省心的办法——别在子项里存likes了,每次需要子项的likes时,直接去对应的源项取:

function getLikes(item) {
  // 如果是子项,就取源项的likes,兜底用自身的(防止源项被删)
  return item.sourceId ? items[item.sourceId]?.likes || item.likes : item.likes;
}

这样完全不用做同步操作,节省存储和同步的开销,适合读取频率不是极高的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:51