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

时间:2013-03-29 14:53:19

标签: php sql symfony nosql

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

1 个答案:

答案 0 :(得分:1)

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

item_users (id, user_id, item_id, time_added)

其中存在的任何字段(用户和项目的组合)被视为"用户已阅读此内容"。这将生成大量数据,但可以通过巧妙的索引/分片轻松处理。例如:

  • 如果你有很多用户和很多项目,用户分片可能是最好的
  • 如果您经常对阅读某篇文章的人感兴趣,那么按项目分片也是值得的
  • 考虑单独索引user_id和index_id(INDEX + FOREIGN KEY和UPDATE和DELETE上的级联)

这将使您可以非常轻松地查询表格。请记住,如果您有大量用户和帖子,您的数据可能会变大,此时必须进行分片。