2013-03-06 67 views
0

所以我下面的域模型:你会如何建模一个阅读/跟踪系统?

Article这基本上是一个博客帖子,目前的实体。现在

,我想补充以下特点:

  • 当用户查看文章(在其浏览器),API调用被设置为“标志”的博客文章作为被读取。

现在,如果我做了一些计算,我应该能够确定哪些文章还没有被读取。

  • 当用户发布的一篇文章评论中,API调用就是“旗帜”的博客文章作为被跟踪制成。现在

,如果我做了一些计算,我应该能够确定是否有因为最新的用户的评论发表了一些新的张贴。

基本上,这两个功能(请参阅&后续)共享属性,文章ID,用户ID和读取/操作日期。

请注意,如果文章被跟随,然后阅读,应使用读取日期。

因此,我虽然我可以使用相同的对象,并添加一个额外的属性来标记为跟随。

你有什么设计想法吗?

请注意,很多文章&用户,我使用Doctrine2和MySQL,但是这适用于任何语言。

回答

1

为了确保您的应用程序可以很好地扩展,我会在事件触发时在本地执行计算。即有人添加评论,并导致系统检查哪些人对该新评论有投资。否则,您最终会得到一个计划任务,处理所有数据,这些数据一开始就运行良好,但随着用户,文章和评论之间的关系增加,工作量将呈指数级增长。

您也可以使用Map/Reduce模式进行研究,Ayende有一篇很好的介绍文章,与您描述的文章,评论等几乎在相同的应用领域。

至于标记文章或评论被特定用户阅读的事件,这是既不是文章也不是用户事物。如果您使用的是文档数据库,并希望将这些数据存储在用户的头上,那么随着时间的推移它可能会建立相当多的数据,我会更愿意将数据存储在新的实体或文档中(因为在理论上这将有一个初步的兴趣爆发,他们沉浸在兴趣水平,代表它的知名度。

希望有一些可能会有所帮助