我正在寻找一种最佳方式来存储有关哪些用户已经阅读了我正在构建的简单论坛引擎上的帖子的信息,因此我可以为他们标记新帖子.我正在寻找空间和性能优化的方式.
首先想到的是使用post_id和user_id列创建表的纯粹方法,其中每行代表用户的阅读帖子.但这会导致大量数据插入并对数据库造成性能压力.点击"全部标记为已读"后插入更多数据.如果所有用户都已阅读所有帖子,则表示数据库中的(用户数)*(帖子计数)行.
可以优化此方法以存储每个线程和每个用户的时间戳,并在每次用户阅读新帖子时更新这些时间戳.但它仍然是很多数据.这意味着(用户数)*(线程数)行.
我可以简化这个以在论坛(即线程类别)级别存储"上次访问"时间戳.这意味着(用户数)*(论坛数量),这并不是那么糟糕,但有一个问题我应该何时更新此时间戳,因此对用户来说不会太混淆.
谢谢你的任何想法.
我想“每个线程有 n 个帖子”就是您使用这些术语的方式。
我认为最好的方法是存储每个(user_id、read thread_id、timestamp)。我知道您意识到它不是(用户数)*(线程数)行,而是(用户数)*(读取线程数)行。
如果用户将所有标记为已读,请插入一个特殊值作为 thread_id,例如 0。
正如 Dagon 指出的那样,一个好的开源论坛就已经解决了所有问题。