我正在开发一个jQuery Mobile Web App,公司将能够向某些用户群发送消息(基于他们的个人资料偏好)。
我正在讨论每个用户阅读最新消息时最有效的标记方式。我已经考虑过使用会话来尝试跟踪他们上次打开消息页面的时间,并将其与消息的发布时间进行比较。我还考虑了一个带有message_id和user_id的表,在打开页面时将每个表标记为已读。
我认为两者都有效,但我试图平衡利弊。保留在数据库中将允许我保留历史记录(特别是如果我添加时间戳列以了解他们何时阅读消息),但如果由于表大小而导致应用程序性能受损,则可能不值得它。该应用程序可能拥有数以万计的用户。
我应该提到的一件事是,用户可能会在多个设备上使用该应用,并且该应用会有非常长的会话时间,可能允许用户保持登录数月。我喜欢这样的想法:如果他们在一台设备上读取它,那么它会在所有设备上标记它,这可能会使会话难以使用,对吧?
答案 0 :(得分:6)
好的,我会把我在评论中说的所有内容都写成一个可靠的答案。
简答:您应该使用数据库来存储“阅读”通知
背后的逻辑:
特别是为什么你不应该使用会话
会话旨在存储临时用户数据(想想ram),它们不应该记录内容。
你不应该保持几个月的会议。它非常不安全,因为它为会话劫持打开了一个更大的窗口。相反,你应该在每次访问应用程序时生成一个新会话,并且每次使用不同的“记住我”cookie或其他东西来验证它们。
即使您确实让会话持续数月,在这几个月之后用户不会突然收到大量“未读”的通知吗?
如何将其存储在数据库中
这称为many-to-many
关系(从消息角度看)或one-to-many
关系(从用户角度来看)
表1:消息
ID, message, timestamp
表2:messages_users
ID, user_id, message_id, read
表3:用户
(Do user business as usual)
答案 1 :(得分:0)
我可以做一件事,如果一个用户或100个用户没有问题,您创建了一个名为readUnread
的列,该列包含63,999个以上的字符,您在其中使用的每个用户的消息分配为0和1,例如{jeff:0,kevin:1,Sal:0}
当读取的更新从0升级到1并在屏幕上将其打开时,将其与当前用户和“;”分开,这将对您有所帮助(这是提高性能的逻辑)。