gpt4 book ai didi

php - 使用 PHP 和 MySQL 的通知/新闻提要

转载 作者:可可西里 更新时间:2023-11-01 07:38:03 24 4
gpt4 key购买 nike

我一直致力于开发一个复杂的 PHP 系统,该系统结合了社交网络概念中的元素,但适用于封闭的人群。我有一些模块、照片和视频库、每个模块和子模块的完整评论系统、私有(private)消息、带有 GUI 的个人电子邮件等等。

我的问题是,无论我多么努力,我似乎​​都无法以高效的方式为通知和新闻提要部分设计后端,就像 facebook 拥有的那样。这些模块几乎都是事件驱动的,因此将它们连接到通知系统应该不是问题。希望一些集体头脑 Storm 能够解决我的问题。

我只会在这篇文章中解决我对通知部分的担忧(如果我也包括新闻提要,它将变得非常冗长和困惑)。

这是我的第一个 MySQL 表草稿。

notificationIDPrimary keynotificationModuleModule type foreign key - photo, video, comment, messagenotificationConstructorForeign key of the element (which is of type "notificationModule") that triggered the creation of this notificationnotificationUserThe user that this notification is aimed towardsnotificationTimeTime at which the notification was creatednotificationFlagNotification has been read flag

可能的问题/冲突

  • 如果一个用户对两个不同用户已经评论过的照片发表评论,会触发三个通知吗?一张给照片上传者,一张给每个评论者? (影响 notificationUser)
    • notificationTime 是创建时间。根据上述问题,我们是否应该创建一个新的通知,此字段应替换为 notificationUpdateTime 或者可能存在于它旁边?

我的目标是降低代码复杂性和提高数据库效率。试图将数据库层与代码层分开让我对网站的这一部分感到困惑:(

我对所有的担忧和想法持开放态度。

最佳答案

有两种处理新闻源的方法:

  • 写入时扇出
  • 展开阅读

您正在使用扇出写入方法。在这种情况下,您会为每个相关用户生成一个新的个人事件。

这种方法很快就会失败,尤其是当您允许用户拥有无限数量的关注者时。每当发生频繁的事件时,您必须为数据库中的每 1000 多个关注者保存一个新条目。

当您添加组和不同类型的受众时,事情会变得更加复杂。如果您现在只想将事件广播给 A 组而不是 B 组的人(例如,您创建了一个状态并想限制观众)怎么办?当你想向 A 组和 B 组广播,但 A 组和 B 组中都有用户不想接收相同的事件两次时会发生什么?如果您想在事件创建后更改其可见性怎么办?

这对于写时扇出的方法来说是不可能的,或者至少是非常困难的。这就是为什么我更喜欢后者 - 阅读方法的扇出。

考虑一下:

用户有一组与其 ID 关联的新闻源 channel 。这些 channel 的格式为 {{ object_name}}:{{ object_id }}。您可以为新闻源和通知设置单独的集合,这样您就可以取消一个对象的通知,而无需将其从您的新闻源中删除。

当用户注册接收来自某个对象的更新时,他们会将与该对象关联的 channel 添加到他们的 channel 列表中。您可以使用简单的 Redis 集。例如,如果我参加事件 #1,我会将 event:1 添加到我的 channel 列表中。

当事件 #1 的属性发生变化时,新事件只会创建一次。此事件有一个名为“观察者”的字段,它是它可见的 channel 的名称。在这种情况下,观察者是“event:1”。

当用户拉取他们的事件源时,他们首先会得到他们订阅的 channel 列表。然后,他们检索观察者在其 channel 列表中的所有事件源项目。

还有

我只是不太确定如何将它变成一个通知系统。使用扇出读取方法,我有一组通知 channel ,如上所述。当对象的属性发生变化时,我会向所有订阅用户接收的数据库写入一个新通知。唯一的问题是:我将如何逐个用户阅读通知?我仍然没有弄清楚那部分。

关于php - 使用 PHP 和 MySQL 的通知/新闻提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com