Mongodb事务可伸缩性WriteConflict



我正在使用:

  • Mongodb(v4.2.10(
  • nodejs+Mongoose

我仍处于应用程序的开发阶段,并且在mongodb中使用事务时面临潜在问题(WriteConflict(。我的应用程序为用户提供了添加帖子和点赞帖子的可能性。当喜欢一个帖子时,这里是后端发生的事情:

  • 启动事务
  • Post集合中查找具有给定ID的帖子
  • 将文档添加到Like集合
  • 更新Post集合中帖子的赞数
  • 更新用户在User收藏中的点赞次数
  • 更新用户在User收藏中的点赞数
  • Notification集合中添加通知文档
  • 提交事务

我想说平均执行时间是1秒,所以这意味着在1秒内,我正在锁定:

  • 1Post文档
  • 2份User文件

我可以认为这是一个巨大的可扩展性问题,尤其是如果用户有许多受欢迎的帖子,这些帖子经常会受到其他人的喜欢。

你建议我做什么?

我不认为我可以停止使用事务,因为如果在函数执行过程中出现问题,我想恢复对DB 的潜在更改

感谢

不需要事务。

  • 一旦点赞在点赞集合中,您就可以重新计算所有计数
  • 通知无法计算(因为你不知道是什么时候发送的(,但通常情况下,它们都是短暂的,如果你遇到需要数据库恢复的停机,用户很可能会原谅一些丢失的通知

更新计数时,使用$inc而不是read-modify-write(写出新值(。

最新更新