Php 通知系统-读与写
我考虑过两种类型的用户通知系统 它们都有一个订阅表,用户在其中订阅特定频道。Php 通知系统-读与写,php,sql,Php,Sql,我考虑过两种类型的用户通知系统 它们都有一个订阅表,用户在其中订阅特定频道。 下面的模式用于存储事件的表 1.昂贵的书写 当新的事情发生时: |id| |type| |uid| |read| |created| 1 2 2 0 1234 |id| |type| |created| 1 2 1234 在这个系统中,当某个频道发生新的事情时,为订阅该频道的每个用户插入一个新行 缺点: 如果有100万用户订阅了某个频道,则必须为该频道中
下面的模式用于存储事件的表 1.昂贵的书写 当新的事情发生时:
|id| |type| |uid| |read| |created|
1 2 2 0 1234
|id| |type| |created|
1 2 1234
在这个系统中,当某个频道发生新的事情时,为订阅该频道的每个用户插入一个新行
缺点:
- 如果有100万用户订阅了某个频道,则必须为该频道中发生的每一个新事件插入100万行
- 浪费空间,如果未正确规范化,则重复内容
- 快速阅读时间
- 简单实现
|id| |type| |uid| |read| |created|
1 2 2 0 1234
|id| |type| |created|
1 2 1234
在这个系统中,它只为一个事件插入一行,即它不是特定于用户的。
然后,用户读取表并检查发生的事件是否在其订阅的通道中,然后还比较创建的时间是否大于上次读取时间
缺点:
- 昂贵的读取,因为用户必须进行大量过滤
- 用户特定事件无法轻松处理[例如回复您的评论]
- 用户特定事件出现时的复杂实现
- 所需空间更少
- 事件的一对一插入,即插入时间更短
我建议结合你的方法 先创建一个包含消息的表,然后创建另一个将这些消息的每用户状态与用户关联的表。例如,您的messages表可能非常简单:
- 身份证
- 消息(varchar/text)
- 身份证
- 消息id
- 用户id
- 读取(布尔值)