像Facebook这样的C#mongodb模型

Cur*_*tis 6 c# data-modeling mongodb-.net-driver

我正在开发一个MongoDB模型与Facebook类似的项目.所以我们都知道FB如何工作,用户"喜欢"乐队/公司页面,该用户将看到该页面的所有帖子.

下面的模型是如何设计的?如果一个页面有百万喜欢,那么每个帖子将有一百万个子文档的喜欢.这似乎不对,必须有一个我无法想到的更好的方法.

谢谢.

public class Person
{
    public ObjectId Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Page
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public List<Like> PersonLikes { get; set; }

}
public class Like
{
    public ObjectId Id { get; set; }
    public ObjectId UserId { get; set; }
    public DateTime DateLiked { get; set; }
}

public class Post
{
    public ObjectId Id { get; set; }
    public ObjectId PageId { get; set; }
    public string Message { get; set; }
    public List<Like> PersonLikes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*sco 2

我的看法是假设您只想跟踪点赞数

public class Page
{
    public ObjectId Id { get; set; }
    public DateTimeOffset Date { get; set; }
    public string Name { get; set; }
    public int NumberOfLikes { get; set; }
}

public class Post
{
    public ObjectId Id { get; set; }
    public ObjectId PageId { get; set; }
    public DateTimeOffset Date { get; set; }
    public string Message { get; set; }
    public int NumberOfLikes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,我会将反应(喜欢或不喜欢)排队等待插入,“情绪”信息不必实时存储,不是吗?这些不是药物、银行交易等。

public class Like
{
    public ObjectId Id { get; set; }
    public ObjectId ParentId { get; set;}
    public ObjectId UserId { get; set; }
    public DateTimeOffset Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

去哪里排队?到喜欢的集合。为什么不是页面或帖子的一部分?因为如果一篇帖子疯传(正如你所说,尽管大多数人不会),你最终可能会获得 1,000,000 个赞。除了分析引擎之外,谁会浏览这些信息?

您还必须确保用户对每个项目只能表达一次他们的反应。