我们正在ASP.NET MVC中构建通用企业社交网络平台。任何社交网站的关键特征之一是用户明确发布的社交对象(文本更新,照片,博客,视频等)或隐式发布('用户正在参加活动','用户已更新页面'等)。
这些都基本上非常相似 - 即它们都显示在用户的活动流上,在发布到的组页面上,在发布它们的用户的用户配置文件上以及以类似的方式过滤 - 例如“使用标记Y ”向我展示组X 的最后 7天所发生的一切。
我们想要定义一些核心帖子类型(博客,文本更新,事件出席,页面编辑等),但是能够轻松扩展,以便软件的经销商和客户可以添加他们自己的类型(例如新闻 - 文章)有自己的自定义元数据和字段(应该是可搜索/可过滤的)。将这些视为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行到数百万行。
欢呼声, 马库斯
答案 0 :(得分:1)
This post应该让您了解扩展时的主要问题。大多数情况下,您需要考虑如何快速生成/提供给定用户朋友发布的所有帖子的列表。
答案 1 :(得分:1)
此外,MySpace还发现了有关同一问题的视频演示: http://ecn.channel9.msdn.com/o9/mix/10/mp4/EX04.mp4