`
jlaky
  • 浏览: 42847 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SNS网站feed的设计思考

阅读更多

SNS网站一般都有这么一个功能:feed或者叫做新鲜事之类的

之前在我们自己的网站也做了类似的一个功能,当时让人最郁闷的就是数据量的问题,上网搜了下,大部分结构都是类似。

 

我当时设计了这么一种简单的机制,数据量相对较小,但是运算复杂,并且限制较多:

 

1)feed字典表:

feeds

(

id, 

event_type: int, //事件类别:写日记,上传照片,成为好友等等

share_type: int, //公开类别:私密信息(收到新消息之类的),公开信息等

msg:string //feed消息模板

)

 

2)user_feed表,用于保存用户操作的每个:

user_feeds

(

id,

feed_id: int, //feed字典表所属ID

user_id: int, //用户名

share_type: int, //公开类别

params: string,//参数,可以是jason格式

attach_text: string,//附加说明

created_at: datetime

updated_at: datetime

)

 

3)user_watch表,用于保存用户对哪些好友进行关注,关注哪种类别消息:

user_watches

(

id,

user_id, //用户ID

friend_id, //好友ID

watch_type

)

 

 

在这种结构下,我们采用的方法就是连接查询并生成该用户(current_account)可见好友的feeds:

select uf.*

from user_feeds uf,user_watches uw

where uf.user_id = uw.friend_id and uf.user_id = (current_account_id) and uf.share_type = (public)

 

个人产生私有feeds

select * from user_feeds where user_id = (current_account_id) and uf.share_type = (private)

 

在页面层再调用feed render方法: 

render_feed(user_feed) 来根据feed类别来渲染不同的显示。

 

然后做页面层的cache,每10分钟或者20分钟刷新一次,并且每一段时间清空一次过期的user_feeds表。

 

目前这种机制我们使用的还没有遇到太多问题,在我们网站还是百万量级的存储。

 

这种方式最大的缺点就是无法删除feed,并且feed需要重复运算。优点就是存储空间小。

当时想到一种支持删除feed的方法就是做一个feed_watches表,用于存储某个查看某个user_feed的状态,

目前没有实现。

 

目前其他网站的做法貌似都是使用了一张表专门存储某个用户收到的feed。

这个表会非常大,每天产生100万个事件,如果平均每个人有20个好友,那么将会有两千万条消息。

假设要保存10天的数据,将会有两亿多条数据,只能通过分表来解决。

不知道Facebook这些公司咋搞的~

分享到:
评论
2 楼 happyking 2011-01-08  
可以考虑下nosql来实现,一些知名的SNS都是用NOSQL实现的
1 楼 chennanfei 2010-04-01  
有必要给每一个好友创建一条feed记录吗?考虑到用户可以删除好友动态信息,我觉得可以给feed加一个字段excludedFriends。当用户删除动态时,如果记录主体是用户自己,就将记录从table里删除,如果是记录的主体是用户好友,就将用户ID写入到excludedFriends字段。查询时增减一个full text,检索当前用户ID是否在excludedFriends中。

相关推荐

    大型SNS网站数据库设计

    ### 大型SNS网站数据库设计精要 在构建大型社交网络服务(SNS)时,数据库设计是至关重要的环节,直接影响着系统的可扩展性、性能和成本效益。本文将深入探讨大型SNS网站数据库设计的关键要素,包括数据库选型、...

    社交(SNS)网站完整设计思路.pdf

    社交(SNS)网站设计是一个复杂的过程,涉及到用户体验、功能规划、社区建设以及用户增长策略等多个方面。以下将根据提供的内容,详细阐述SNS网站设计的关键点。 首先,SNS网站的特点在于其用户基础庞大,主要由年轻...

    SNS网站系统的设计与实现

    《SNS网站系统的设计与实现》是一份综合性的毕业设计,涵盖了从理论到实践的全过程,旨在构建一个社交网络服务(Social Networking Service)平台。该设计不仅包括了系统的架构设计,还提供了完整的源代码、论文、...

    盘点中国SNS网站

    ### 盘点中国SNS网站 #### 中国SNS网站概览 近年来,社交网络服务(Social Networking Service,简称SNS)在中国互联网市场迅速崛起,成为互联网应用中的重要组成部分。这些平台不仅改变了人们的社交方式,也为...

    SNS网站建设方案

    SNS(Social Networking Services,社交网络...综上所述,这个SNS网站建设方案涵盖了从技术选型到功能设计的全面规划,旨在打造一个安全、互动、个性化的社交网络平台,满足用户社交、娱乐、信息获取和互动交流的需求。

    sns 数据结构设计

    在设计SNS平台时,数据结构的设计至关重要,它直接关系到系统性能、数据管理效率以及用户体验。 2. 新闻系统与微博数据结构设计: 新闻系统和微博系统都是SNS平台中常见的功能模块,它们具有各自独特的数据结构需求...

    SNS社交网站数据库设计[归纳].pdf

    SNS社交网站数据库设计 数据库设计是社交网站的核心组件之一,良好的数据库设计可以提高网站的性能、可扩展性和可维护性。本文将对SNS社交网站数据库设计进行归纳和总结,涵盖用户表、好友关系表、消息表、活动表、...

    SNS网站构建

    手把手教你构建SNS网站,SNS网站构建pdf

    SNS社交网络社区网站设计

    ### SNS社交网络社区网站设计的关键知识点 #### 一、SNS社交网络社区设计的核心要素 SNS(Social Networking Service)社交网络服务是指帮助人们建立社会性网络的在线平台。设计一个成功的SNS社交网络社区,需要从...

    SNS.rar_SNS_sns site_sns网站

    SNS网站策划是构建此类平台的关键步骤,它涉及到网站的功能设计、用户体验、数据管理等多个方面。以下是对SNS网站策划的深入探讨。 一、用户需求分析 在策划SNS网站时,首要任务是对目标用户群体进行深入研究,理解...

    sns社交网站论文

    在系统架构设计方面,高校SNS系统采用分层架构,包括表示层、业务逻辑层、数据访问层和数据持久层。这种架构有利于职责分明,便于维护和扩展。 总之,这篇论文探讨了使用Spring MVC和MongoDB构建高校SNS系统的关键...

    SNS社交网站 数据库设计

    ### SNS社交网站数据库设计详解 #### 一、引言 随着互联网技术的快速发展和社会网络服务(SNS)的兴起,越来越多的人通过社交平台进行交流与互动。为了支持这些功能和服务,一个合理且高效的数据库设计至关重要。...

    SNS社交网站-数据库设计说明书

    标题中提到的"SNS社交网站-数据库设计说明书"所涉及的知识点主要集中在社交网络服务(Social Networking Services,简称SNS)的数据库架构设计上。SNS网站作为一种允许用户建立个人资料,与他人建立联系、共享信息、...

    SNS网站及用户分析报告

    《SNS网站及用户分析报告》是一份深入探讨社交网络服务(Social Networking Service,简称SNS)领域的专业报告。这份报告全面涵盖了SNS的基本概念、当前的发展状况、用户行为分析、网站功能解析以及盈利模式与前景...

    社交(SNS)网站的完整设计思路

    社交(SNS)网站的完整设计思路

    SNS网站需求分析的报告.pdf

    SNS网站需求分析报告的知识点涵盖社交网络服务的基本概念、项目背景、目标用户、产品构架、用户需求、电子商务模块设计以及产品设计原则等多个方面。 首先,报告明确了SNS的定义,即基于六度理论的社交网络服务,它...

    SNS2124&SNS2224&SNS2248&SNS3096&SNS5192&SNS5384产品文档.hdx

    SNS2124&SNS2224&SNS2248&SNS3096&SNS5192&SNS5384产品文档

    sns社交类网站源码

    【sns社交类网站源码】 SNS(Social Networking Services)社交网络服务是一种在线平台,让人们可以建立和维护联系,并分享各种形式的信息和活动。这款国外SNS社交网站源码是构建此类平台的基础,它提供了完整的...

    SNS网站需求分析的报告.doc

    产品经理在项目中扮演核心角色,负责网站设计、建设和需求管理,需要具备宏观需求分析、微观产品呈现、艺术设计感和科学设计技巧。 **3. 任务概述** **2.1 目标** 在SNS网站中集成一个类似淘宝的电子商务模块,...

Global site tag (gtag.js) - Google Analytics