- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SNS 底层数据结构的设计架构与开发实现
自从 SNS 热以来,许多技术人员开始钻研SNS 技术,模仿Facebook 去实现一些有意思的功能,这里仅以我的经验介绍一些功能的架构与具体实现。
查阅百度百科,SNS 全称Social Networking Services,即社会性网络服务;它主要是一个人际关系的平台,具有行为信息(event)的传播性,行为的群体性。每一个用户的行为(event) 都可以被记录、传播,进而凝聚具有共性的用户形成社群,导致群体性行为的发生。要架构SNS 平台,从需求上来看,主要是要能把用户的行为浓缩成一个简洁的信息(惯例称之 feed),根据用户设定的传播范围,通过用户的人际进行传播。用户也可以根据自己的喜好来建立与 别的用户的关系(关注或成为朋友),然后根据喜好和人际关系的密切度,来设定接收别人 的 feed 的类型和密度;那么,这里就要解决几个数据之间的关系:
1、人际关系;一般人与人不外乎:有关系、没关系;而有关系在SNS 中,又可以分为:关注,朋友;其中“关注”即是因为对某人感兴趣(因为对方有让人感兴趣的地方),想知道对方的行为和状态,进而“订阅对方的feed”的行为的名称;
2、feed 与人的关系; feed 是用户的行为产生的(谁产生,作用于谁),用户可以设定自己的行为可以被哪些人看见(可见权限);而这个“哪些人”并不是具体的谁谁谁,而是针对人际关系的前提下而言的。
3、范围,指用户设定的接收范围(属于过滤),这个“范围”是相对人际关系而言的,范围也不考虑级别关系(否则整个系统就更加复杂了)。
4、密度,指获得 feedlist 时某些类型的feed 出现的概率,所以“密度”是针对 feed 的“类型”而言的。
好了概念和需求方面的阐述到此结束,以下来一一定义:
1、人际关系在数据上的定义如下:
RELATIONS_FOLLOW_UP = 1 (关注关系,二进制是 RELATIONS_FRIEND = 16 (朋友关系, 二进制是 RELATIONS_SELF = 128 (自己,二进制是)
2、feed、内容(任何SNS 里的内容元素,如日志、照片、投票等)的可见度VIEW_RANK_PUBLIC = 0 (公开可见的,二进制是 比人际关系中的关注还要小) VIEW_RANK_FRIEND = 16 (朋友可见,二进制 数字值上与 RELATIONS_FRIEND 相等)
VIEW_RANK_SECRET = 128 (保密的, 二进制 数值上与 RELATIONS_SELF 相等)
通过以上数据定义,我们可以看出内容可见性(VIEW RANK)对于人际关系( RELATIONS ) 是有对应关系的;实际上我这里定义的含义是当 RELACTIONS 大于等于 VIEW RANK 时,feed
(或内容)是可见的(也就是可以被从数据库中检索出来)。简单举个例子描述:
#表 relations(uid, target_uid, r)
#表 feedlist(fid, uid, title, view_rank, message)
SELECT f.* FROM feedlist f, relations a WHERE f.r = a.view_rank AND a.target_uid=:uid #其中:uid 为要获得 feed list 的用户的 uid
#其它内容元素的表与 relations 表的关系查询也是类似
其中 feed 的 view rank 值可能是根据内容(如日志)发布的时候的设定,也可能是用户的统一设置来决定的。
3、范围(range)
VIEW_RANGE_SELF = 1 ( 二 进 制 VIEW_RANGE_FOLLOW_UP = 2 (二进制 VIEW_RANGE_FRIEND = 4 (二进制
VIEW_RANGE_TO_ME = 8 (二进制这个要注意了,有的时候,某些别的用户的行为是作用与自己的,这个就不可以用人际关系范来限制了)
这里考虑了位运算的组合,例如一个范围是自己的与关注的,则为:
VIEW_RANGE_SELF | VIEW_RANGE_FOLLOW_UP = 3 (二进制
那么,如果我们定义一个函数 get_feed_list($view_range),可以逐个与上面的几个产量“与运算”来判断范围组合,如
function get_feed_list($view_range)
{
//f : table feedli
您可能关注的文档
最近下载
- 配合协调与服务承诺.docx VIP
- 14《称空气》课件 科学三年级上册(苏教版2025).pptx
- 晚期消化道肿瘤临床规范诊疗新进展题库答案-2025年华医网继续教育.docx VIP
- 工程协调配合措施及承诺.docx VIP
- 医院信息科笔试、面试题(附答案).docx VIP
- 施工协调配合的承诺与措施.pdf VIP
- 医院信息科计算机考试精彩试题(附答案).docx
- 2025年最新人教版七年级(初一)数学上册教学计划及进度表(新课标,新教材).docx
- 2025至2030地毯和室内装饰清洁服务行业项目调研及市场前景预测评估报告.docx
- 2025重庆南岸区招聘社区工作者后备库人选300人笔试备考题库及答案解析.docx VIP
文档评论(0)