В настоящее время я пытаюсь реализовать пользовательские взаимодействия в стиле Tumblr, такие как реблог, подписка, подписчики, комментирование, публикации в блогах людей, за которыми я сейчас следую, и т. Д.
Также есть требование отображать активность для каждого сообщения в блоге.
Я застрял с созданием правильной схемы для базы данных. Существует несколько способов достижения такой функциональности (определение встроенных структур данных, таких как посты и комментарии в блоге, создание документа активности для каждого действия и т. Д.), Но в настоящее время я не могу решить, какой из них является лучшим с точки зрения производительности и масштабируемости.
Например, давайте посмотрим на реализацию людей, за которыми я следую. Вот пример документа пользователя.
User = { id: Integer,
username: String,
following: Array of Users,
followers: Array of Users,
}
Это кажется тривиальным. Я могу управлять следующим полем для каждого пользовательского действия (подписаться / отписаться), но что если пользователь, за которым я в данный момент следую, будет удален. Эффективно ли обновлять все записи пользователя, которые следуют за удаленным пользователем.
Другая проблема заключается в создании просмотра поста в блоге людей, на которых я подписан.
Post = { id: Integer,
author: User,
body: Text,
}
Так ли эффективен запрос последних сообщений типа;
db.posts.find( { author: { $in : me.followers} } )