【发布时间】:2014-03-27 00:07:22
【问题描述】:
我正在开发一个 jQuery Mobile Web 应用程序,公司将能够向某些用户组发送消息(基于他们的个人资料偏好)。
我正在讨论标记每个用户何时阅读最新消息的最有效方法。我考虑过使用会话来尝试跟踪他们上次打开消息页面的时间,并将其与消息的发布时间进行比较。我还考虑了一个带有 message_id 和 user_id 的表,在打开页面时将每个表标记为已读。
我认为两者都可以,但我正在努力平衡利弊。保存在数据库中可以让我保留历史记录(特别是如果我添加了时间戳列以了解他们何时阅读消息),但如果由于表大小会损害应用程序性能,那么它可能不值得它。该应用可能拥有数十万用户。
我可能应该提到的一件事是,用户可能会在多个设备上使用该应用程序,并且该应用程序的会话时间会很长,可能会让用户保持登录数月。我喜欢这样的想法,如果他们在一台设备上阅读它,那么它将在所有设备上标记它已阅读,这可能会使会话难以处理,对吧?
【问题讨论】:
-
为每条消息添加一个
read列。不应该对性能造成太大影响(如果有的话)。 MySQL 是一款功能强大的数据库软件,只要你有不错的服务器和优化,你就可以处理数百万条记录 -
我不能只在消息表中添加一个已读列,因为一条消息可能来自 1 到 1000 个用户。我正计划在消息表中只保留一行。在消息表中有 1 行和一个带有 message_id、uid 的单独表将它们标记为已读会影响效率吗?
-
额外表的任何性能变化都可以忽略不计(想想几毫秒)。
-
另外,另外,您不应该保持会话数月。它非常不安全,因为它为会话劫持打开了一个更大的窗口。相反,您应该在每次访问应用程序时生成一个新会话,并每次使用不同的“记住我”cookie 或其他东西来验证它们。
-
我相信这实际上是正在发生的事情(我没有亲自编写该代码),但我会仔细检查它。谢谢