Laravel 5.5 - 100万粉丝的通知/子目录?

时间:2018-03-29 11:36:12

标签: php laravel laravel-5 laravel-5.5 laravel-notification

我使用notifications表和subnotifications表,我也使用队列,因此当用户发布内容时它会在后台运行。当用户有10个关注者并且他们创建帖子时,notifications表获取包含通知的帖子数据的单个条目,subnotifications表获得10个条目(每个关注者一个子通知,每个引用通知的ID,因此我们不必重复通知数据10次,read_at知道是否被该关注者读取了。

这很快,效果很好,没有任何问题。但是,当使用100万粉丝进行测试时,插入一个帖子的子通知大约需要 ~6小时!这当然是不可接受的,因为插入100万个子通知需要很长时间,每个跟随者一个。想象一下,同一个用户发布了10个帖子,就像 ~60小时的插入和1000万个子通知行。

我只是希望关注者知道如果他们还没有阅读它,就会有新帖子。是否有更好,更有效的扩展方式?

更新:坚持当前的方法见下文......

如果关注者$user有100位领导者,他们会关注(他们会按照跟随者表格中不同的created_at时间戳进行跟踪),那么从领导者那里了解领导者新帖子的正确答案是什么?跟随者跟随每个领导者的时间?我使用这个伪代码卡在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个不同的时间戳,我坚持如何正确有效地解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如评论中所述,如果您只在用户阅读时插入子表(即subnotifications而不是在创建通知时创建它,则可以减少插入,这可以避免此问题。 在尝试检查用户是否已看到通知时,只需检查subnotifications中是否存在相关用户和通知。

同样如上所述,当向用户显示通知时,会向notifications提取这些通知,但会将通知限制为创建的通知,以便用户开始关注,以便新用户不会淹没了通知。