Проектирование потока активности с RavenDb - PullRequest
1 голос
/ 28 января 2012

Это больше вопрос дизайна шаблона / документа, чем технического ...

Я хочу отобразить на своем веб-сайте ленту действий, в которой будут перечислены все последние события, которые пользователи делали на моем сайте.сайт ... вот некоторые из действий, которые я хотел бы показать:

  • Новые медиа загружены (Боб загрузил новый трек)
  • Комментарии к профилю (Павел прокомментировал)в профиле Боба)
  • Комментарии к СМИ (Стив прокомментировал трек Пола 'my track name')
  • Обновления статуса (Стив может написать любое обновление статуса, которое он пожелает)

Каждое действие должно иметь собственный набор данных, например, новое загруженное мультимедийное действие, которое я хотел бы включить в него, например, изображение, заголовок, описание и т. Д.).

Это действие будетв основном используется в качестве глобального канала, поэтому он одинаков для всех пользователей, хотя мне нужно, чтобы пользователи могли отображать элементы каналов только тех пользователей, за которыми они следят (например, Twitter).

Я думаю, что у меня есть 2 варианта:

1) Вставить все данные Ad-Hoc с индексом, чтобы информация всегда была актуальной, даже если пользователь изменяет свое название заголовка мультимедиа ... яне уверен, насколько хорошо это будет масштабироваться, хотя ??

2) Есть документ ActivityFeed, который содержит вспомогательный документ, такой как NewMediaUploadActivity (как показано ниже).

ActivityFeed
 - DateTime
 - AccountId
 - ActivityType
 - Activity (this is a polymorphic object)

NewMediaUploadActivity : Activity
 - MediaTitle
 - MediaDescription
 - GenreName

StatusUpdateActivity : Activity
 - StatusText

ProfileCommentActivity : Activity
 - CommentText
 - ProfileAccountId
 - ProfileUsername

Etc ...

Если у кого-то есть опыт или какой-либо вклад в лучший способ сделать это в RavenDB, я был бы благодарен, мой живой веб-сайт, созданный на SQL Server, в настоящее время делает то, что мне нужно, используя слегка измененный вариант 2.

Пол

1 Ответ

0 голосов
/ 29 января 2012

Я бы смоделировал это как:

public class ActivityTracking<TActivity>
{
   public string[] AffectedUsers {get;set;}
   public TActivity Activity {get;set;}
}

Вы можете выполнять различные действия (не обязательно находиться в иерархии наследования), которые «привязаны» к разным пользователям.Например, Боб, комментирующий фотографию Джейн, будет отображаться в обоих потоках.Затем вы можете просто запросить действия для этого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...