0

所以我有以下域模型:

Article这基本上是一篇博客文章,目前是一个实体。

现在,我想添加以下功能:

  • 当用户(在其浏览器中)查看文章时,会进行 api 调用以将博客文章“标记”为正在阅读。

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

  • 当用户对一篇文章发表评论时,会进行一个 api 调用以将博客文章“标记”为被关注。

现在,如果我进行一些计算,我应该能够确定自最新用户发表评论以来是否有一些新发表的评论。

基本上,两个功能(阅读和关注)共享属性、文章 ID、用户 ID 和阅读/操作日期。

请注意,如果关注文章,然后阅读,则应使用阅读日期。

因此,我虽然可以使用相同的对象并添加额外的属性来将其标记为如下。

你有什么设计想法吗?

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

4

1 回答 1

1

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

您还可以考虑使用 Map/Reduce 模式,Ayende对此有一篇很好的介绍文章,它几乎与您描述的应用程序领域相同(文章、评论等)。

至于将文章或评论标记为已被特定用户阅读的事件,这既不是文章也不是用户的事情。如果您正在使用文档数据库并希望针对用户存储这些数据,那么随着时间的推移它可能会积累大量数据,我更倾向于将数据存储在新实体中或针对文章(从理论上讲,这将引起最初的兴趣,他们的兴趣下降到代表它的受欢迎程度的水平。

希望其中一些可能会有所帮助。

于 2013-03-08T10:12:34.107 回答