我正在使用:
- Mongodb(v4.2.10(
- nodejs+Mongoose
我仍处于应用程序的开发阶段,并且在mongodb中使用事务时面临潜在问题(WriteConflict
(。我的应用程序为用户提供了添加帖子和点赞帖子的可能性。当喜欢一个帖子时,这里是后端发生的事情:
- 启动事务
- 在
Post
集合中查找具有给定ID的帖子 - 将文档添加到
Like
集合 - 更新
Post
集合中帖子的赞数 - 更新用户在
User
收藏中的点赞次数 - 更新用户在
User
收藏中的点赞数 - 在
Notification
集合中添加通知文档 - 提交事务
我想说平均执行时间是1秒,所以这意味着在1秒内,我正在锁定:
- 1
Post
文档 - 2份
User
文件
我可以认为这是一个巨大的可扩展性问题,尤其是如果用户有许多受欢迎的帖子,这些帖子经常会受到其他人的喜欢。
你建议我做什么?
我不认为我可以停止使用事务,因为如果在函数执行过程中出现问题,我想恢复对DB 的潜在更改
感谢
不需要事务。
- 一旦点赞在点赞集合中,您就可以重新计算所有计数
- 通知无法计算(因为你不知道是什么时候发送的(,但通常情况下,它们都是短暂的,如果你遇到需要数据库恢复的停机,用户很可能会原谅一些丢失的通知
更新计数时,使用$inc而不是read-modify-write(写出新值(。