【发布时间】:2017-12-01 08:40:43
【问题描述】:
在我的 Meteor 应用中,用户可以互相关注。当一个用户关注另一个用户时,需要在 MongoDB 上运行多个操作,因此关注操作本身并不是完全原子的。如果服务器在执行过程中崩溃,用户个人资料上的虚荣计数表示他或她关注了多少用户,即"following": 24 实际上可能与您在 MongoDB 的followers 集合中直接查找的数量不匹配存储关系数据。
为了缓解这种情况,假设每 24 小时,在午夜,我安排了一个 cron 作业,它在 MongoDB 中查找每个 user 文档,并根据其他集合中的数据验证文档的完整性。如果用户文档中的数据准确无误,则为noop,然后继续下一个用户文档。如果有任何计数不正确,请更正它们,然后再继续下一个用户。
我的问题是:您如何有效地实施这种 CRON 工作?假设我在 Meteor 应用上有 100,000 个注册用户。如果我执行Meteor.users.find().fetch(),我什至会在开始迭代之前将 100k 用户文档加载到 RAM 中。随着用户群的增长,问题会更加复杂,这感觉就像等待发生的服务器崩溃。
什么是确保所有用户文档都得到处理的最佳方法,同时有效地处理,而不是完全锁定 Meteor 服务器,以便它仍然可以响应来自 Web 前端的用户请求?
【问题讨论】:
标签: meteor