Мы находимся в процессе создания универсальной корпоративной социальной сети в ASP.NET MVC.Одной из ключевых особенностей любого сайта социальной сети являются социальные объекты , которые публикуются пользователями либо явно (текстовые обновления, фотографии, блоги, видео и т. Д.), Либо неявно («пользователь посещает мероприятие», «пользователь»).обновил страницу и т. д.).
Все они, по сути, довольно похожи - то есть все они отображаются в потоках активности пользователей, на страницах групп, на которые они публикуются, в профилях пользователей, которые их опубликовали, и фильтруются похожими способами - например,«показать мне все, что произошло за последние 7 дней для группы X с тегом Y ».
Мы хотим определить несколькоосновные типы сообщений (блог, обновление текста, посещение событий, редактирование страниц и т. д.), но возможность легко расширяться, чтобы реселлеры и клиенты программного обеспечения могли добавлять свои собственные типы (например, новостные статьи) со своими собственными метаданными и полями(который должен быть доступен для поиска / фильтрации).Думайте о них как о «социальном» эквиваленте списков Sharepoint!
В любом случае, у меня возникает вопрос: какова лучшая структура данных для достижения этой цели с точки зрения производительности, масштабируемости и простоты расширяемости?
Это то, о чем я сейчас думаю (псевдокод / структура базы данных):
public class SocialObject
{
int Id;
DateTime Date;
string Url;
string Title;
string Text;
Media[] Attachments; //photos, videos, links etc
int OwnerId; //user who posted it
int GroupId; //group it was posted to
int PageId; //page it was posted to
int PostTypeId;
int? SourceId; //source - e.g. desktop client, email, web
Like[] Likes;
Comment[] Comments;
Repost[] Reposts;
Tag[] Tags;
Mention[] Mentions; //user IDs mentioned in this post
Metadata[] MetadataValues;
}
public class Metadata
{
int SocialObjectId;
int MetadataTypeId;
int? MetadataValueId; //for metadata types with list values - for filtering
string Value;
}
(все массивы ссылаются на отдельные таблицы в БД)
Это разумный способ сделатьЭто?- т.е. хранить все социальные объекты в одной и той же таблице (и разрешить расширение через таблицу метаданных для дополнительных полей / информации) или я курю что-то, чего не должно быть?Имейте в виду, что эта таблица может стать довольно большой - от 100 000 до миллионов строк.
ура, Маркус