C# Mongodb модель, как Facebook
Я работаю над проектом, где модель 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; }
}
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; }
}
Затем я бы поставил в очередь "Реакцию" ("Нравится" или "Не нравится") для вставки, информация о настроениях не должна храниться в реальном времени, не так ли? Это не лекарства, банковские операции и т. Д.
public class Like
{
public ObjectId Id { get; set; }
public ObjectId ParentId { get; set;}
public ObjectId UserId { get; set; }
public DateTimeOffset Date { get; set; }
}
Очередь где? в коллекцию лайков. Почему не часть страницы или пост? Потому что, если сообщение становится вирусным (как вы сказали, хотя большинство этого не сделает), у вас может получиться 1 000 000 лайков. Кто будет просматривать эту информацию, кроме аналитического движка?
Вы также должны убедиться, что пользователь может выразить свою реакцию только один раз за элемент.
Сообщение существует только на одной странице, поэтому это должна быть страница, которой принадлежит сообщение, а не сообщение, владеющее страницей.
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 List<Post> Posts { get; set; }
}
public class Post
{
public ObjectId Id { get; set; }
public string Message { get; set; }
public List<Like> Likes { get; set; }
}
public class Like
{
public ObjectId Id { get; set; }
public ObjectId UserId { get; set; }
public DateTime DateLiked { get; set; }
}