Laravel 5.5 - Notifications/Subnotifications 100 万粉丝?
Laravel 5.5 - Notifications/Subnotifications for 1 million followers?
我使用 notifications
table 和 subnotifications
table,我也在使用队列,所以当用户 post 的东西。当用户有 10 个关注者并且他们创建了一个 post 时,notifications
table 获得一个条目,其中包括用于通知的 post 数据,以及 subnotifications
table 得到 10 个条目(每个关注者一个子通知,每个子通知都引用通知的 id,所以我们不必重复通知数据 10 次,用一个 read_at
来知道它是否是该关注者是否阅读)。
速度很快,效果很好,没有任何问题。但是,当对 100 万关注者进行测试时,插入一个 post 的子通知大约需要 ~6 小时!这当然不是 acceptable,因为插入 100 万个子通知(每个关注者一个)花费的时间太长了。想象一下,同一个用户 posts 10 posts,这就像 ~60 小时 的插入和 1000 万个子通知行。
我只是想让关注者知道有一个新的 post 如果他们还没有阅读它。有没有更好、更有效的扩展方式?
更新:坚持当前方法见下文...
如果一个追随者 $user
有 100 个他们追随的领导者(他们在追随者 table 中以不同的 created_at
时间戳追随),正确的查询是要知道什么从跟随者跟随每个领导者的时间开始,关于领导者新 posts?我被这个伪代码卡在 created_at
:
// Assume `leader_id` is a column in the notifications table
DB::table('notifications')
->whereIn('leader_id', $leaderIds)
->where(`created_at`, '>', $whatTimestampsGoHere)
->paginate(20);
有 100 种不同的时间戳,我一直在思考如何正确有效地解决这个问题。有什么想法吗?
如评论中所述,您可以减少插入,如果您只插入子 table 即 subnotifications
当用户阅读它而不是在通知创建时创建它,这避免了这个问题。
当尝试检查用户是否看到通知时,只需检查相关用户和通知的 subnotifications
中是否存在。
同样如前所述,当获取通知以显示给用户时,从 notifications
获取通知但将通知限制为在用户开始关注 之后创建的通知,以便新用户不会被通知淹没。
我使用 notifications
table 和 subnotifications
table,我也在使用队列,所以当用户 post 的东西。当用户有 10 个关注者并且他们创建了一个 post 时,notifications
table 获得一个条目,其中包括用于通知的 post 数据,以及 subnotifications
table 得到 10 个条目(每个关注者一个子通知,每个子通知都引用通知的 id,所以我们不必重复通知数据 10 次,用一个 read_at
来知道它是否是该关注者是否阅读)。
速度很快,效果很好,没有任何问题。但是,当对 100 万关注者进行测试时,插入一个 post 的子通知大约需要 ~6 小时!这当然不是 acceptable,因为插入 100 万个子通知(每个关注者一个)花费的时间太长了。想象一下,同一个用户 posts 10 posts,这就像 ~60 小时 的插入和 1000 万个子通知行。
我只是想让关注者知道有一个新的 post 如果他们还没有阅读它。有没有更好、更有效的扩展方式?
更新:坚持当前方法见下文...
如果一个追随者 $user
有 100 个他们追随的领导者(他们在追随者 table 中以不同的 created_at
时间戳追随),正确的查询是要知道什么从跟随者跟随每个领导者的时间开始,关于领导者新 posts?我被这个伪代码卡在 created_at
:
// Assume `leader_id` is a column in the notifications table
DB::table('notifications')
->whereIn('leader_id', $leaderIds)
->where(`created_at`, '>', $whatTimestampsGoHere)
->paginate(20);
有 100 种不同的时间戳,我一直在思考如何正确有效地解决这个问题。有什么想法吗?
如评论中所述,您可以减少插入,如果您只插入子 table 即 subnotifications
当用户阅读它而不是在通知创建时创建它,这避免了这个问题。
当尝试检查用户是否看到通知时,只需检查相关用户和通知的 subnotifications
中是否存在。
同样如前所述,当获取通知以显示给用户时,从 notifications
获取通知但将通知限制为在用户开始关注 之后创建的通知,以便新用户不会被通知淹没。