管理已读/未读项目(NoSQL/SQL)的最佳方式是什么?


What's the best way to manage read/unread items (NoSQL/SQL)?

我要构建一个Symfony 2.1应用程序,需要知道项目的状态(已读/未读),是否有任何有效的方法来保存项目状态(与许多项目)?使用SQL关系表是最佳选择吗?或者像MongoDB这样的NoSQL数据库是处理读/未读状态的更好的主意?

准确管理这一点的最佳方法(即不偷工减料)是关联表。假设您的数据库包含用户,按照如下方式构建另一个表:

item_users (id, user_id, item_id, time_added)

里面出现的任何字段(user和item的组合)都被视为"用户已经阅读了这个"。这将生成大量数据,但可以通过巧妙的索引/分片轻松处理。例如:

  • 如果你有很多用户和很多物品,用户分片可能是最好的
  • 如果你经常对谁读了某篇文章感兴趣,按条目进行分片也是值得的
  • 考虑分别索引user_id和index_id (INDEX + FOREIGN KEY,在UPDATE和DELETE上进行级联)

这将允许您非常容易地查询表。请记住,如果您有很多用户和帖子,那么您的数据可能会变得很大,这时切分就变得非常必要了。