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