`
willko
  • 浏览: 383668 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

feed设计

    博客分类:
  • php
阅读更多
对于sns来说,动态就是核心,动态是传播信息的媒体,用户以动态展开各种交互。

从技术角度来说,动态在读和写方面会很多,用户要先看到动态再去做其它操作,而其它操作都会导致动态的更新,表记录会很多,并只有插入,删除和查询,动态显示每个人都不一样,甚至有很大分别。

先说下好友表,好友表需要有用户id和好友的id两个字段,建唯一索引。连接的时候只需using index,如果内存够大,可以缓冲到内存中,速度够快~好友表肯定是sns中的大表之一,所以必须水平切分,好友表比较好分,因为没有查整张表的业务。

而个人动态,从业务来说,就是分为标题和内容。
例如:
引用

[用户a] 上传了 [n] 张照片至 [看图不说话]
[图片1] [图片2]

[用户b] 更新的头像
[新头像]

[用户c] 分享了 [用户h] 的日志 [你好,我也好]
[大家好,才是真的好]

[用户f] 与 [用户h] 成为好友

....

所以可以像设计论坛主题那样来设计这张表,但是为了性能,所以这张表要够小,对于动态字段都保存在持久存储系统中,例如Tokyo Tyrant,memcachedb

表结构:
引用
feed_id mediumint(8)
user_id mediumint(8) 动态产生人
feed_type enum('blog', 'friend', 'album') 动态类型
input_date timestamp 发生动态时间,索引
feed_title 动态标题 放在持久存储系统中
feed_content 动态内容 放在持久存储系统中

如果要考虑用户更改数据后更新动态,例如发表日志后,把标题改了,那可以把动态的数据和模板分离,那只需更新动态的数据就可以了,不过要产生动态的应用要记录动态的id

查询的话sql语句如下
SELECT * 
FROM  `friend` f,  `feed` fd
FORCE INDEX ( input_date ) 
WHERE f.friend_user_id = fd.user_id
AND f.user_id =1
ORDER BY fd.input_date
LIMIT 30

为了防止mysql自作聪明优化sql,所以强制用input_date索引,这样不会出现using filesort。。
可以考虑把最终结果放到memcached中缓存起来,无需考虑命中率,因为这里的cache只需起到分担数据库的压力就可以了,而memcahed自己有淘汰机制,非活跃用户的数据会被刷掉,前提是内存不够。

关于分表,可以把旧记录保存起来,极端点就删掉


后期
这种方式对于初次来说还可以满足,后期的话,好友和feed的数量查询缓慢,所以,只能把feed推给用户,目前还在实验阶段。



参考资料:
uchome
2
0
分享到:
评论
2 楼 willko 2009-12-24  
xianglei 写道
feed的分发是核心,特别是一条信息发送给几百万个好友的情况。

说的很对,所以要有沉默用户。
沉默用户就不推送了。等他下次上线主动获取数据。
1 楼 xianglei 2009-12-24  
feed的分发是核心,特别是一条信息发送给几百万个好友的情况。

相关推荐

    FEED前端工程设计.pdf

    FEED前端工程设计.pdf

    Feed流系统设计-总纲

    Feed流是Feed+流,Feed的本意是饲料,Feed流的本意就是有人一直在往一个地方投递新鲜的饲料,如果需要饲料,只需要盯着投递点就可以了,这样就能源源不断获取到新鲜的饲料。在信息学里面,Feed其实是一个信息单元,...

    网易feed流架构的设计与实现

    目前市面上主流的app首屏基本都是feed流设计。本文主要是从业务特征出发,深入浅出的介绍feed流的架构设计是如何结合公开课的业务特征做到高效落地的。从业务架构看,“feed流”在纵向上可以拆解成三个部分:源内容...

    数据人看Feed流-架构实践

    1手淘,微淘提供给消费者的首页商品信息,用户关注店铺的新消息等2微信朋友圈,及时获取朋友分享的信息3微博,粉丝获取关注明星、大V的信息4头条,用户获取系统推荐的新闻、评论、八卦关于Feed流的架构设计,包括...

    滑轮轴的设计(毕业设计)

    由于输料次数过多会影响电磁炉氩气保护效果,引起铸铁氧化,减少加料次数就要求每次加料重量增加,牵引电机功率增大,本设计在分析了国内外电磁炉发展现状的基础上具体分析了厂家的要求和实际情况,优化设计了适合5T...

    如何打造千万级Feed流系统

    我们在讲如何设计Feed流系统之前,先来看一下Feed流中的一些概念:Feed:Feed流中的每一条状态或者消息都是Feed,比如朋友圈中的一个状态就是一个Feed,微博中的一条微博就是一个Feed。Feed流:持续更新并呈现给用户...

    对XML Feed制作与更新流程研究报告.pdf

    XML被设计用来传输和存储数据。关系型数据库(e.g. Excel,MySQL)的二维表格仅可成为XML一种表现形式。传统关系型数据库通过关联数张“二维表格”的主键保存和更新数据,但此种形式有更新不及时,数据分散,关联易...

    feed:高可用feed流系统

    高可用Feed流动态策略设计和实现业务说明: 1,涉及业务:好友动态,个人动态(也涉及个人动态计数),好友关系(也涉及关注数和粉丝数) 2,涉及操作:添加,查找,删除设计要点: 1,涉及缓存设计和数据库设计2,...

    Feed the monster 喂怪物学习阿拉伯语Unity学习阿拉伯语的游戏项目源码C#

    Feed the monster 喂怪物学习阿拉伯语Unity学习阿拉伯语的游戏项目源码C# ...让游戏更容易为您重新设计 适合儿童的游戏 77 个关卡 6个可爱的怪物 每个怪物都有 4 个更新 28 种背景 简单易玩 适合儿童的游戏

    音乐APP(整套简约APP手机移动端UI界面UX交互设计作品集XD分层素材模板xd).zip

    音乐 png Color Styles.png ...Feed & News 1.png Feed & News 2.png Feed & News 3.png Feed & News 4.png Feed & News 5.png Feed & News 6.png Feed & News 7.png Feed & News 8.png Feed & News 9.png ......

    微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨

    sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang...

    docker-flightradar24:运行Flightradar24 fr24feed的多体系结构Docker容器。 设计与mikenyereadsb(arm32v7arm64x86_64)协同工作

    mikenye / flightradar24 运行FlightRadar24的fr24feed Docker容器。 旨在与协同工作。 在x86_64 , arm32v7 , arm32v6 , arm64和386上构建并运行。 fr24feed从 (或其他提供ModeS / BEAST数据的主机)中提取ModeS...

    信息流UI设计模板 Based Feed UI Kit .sketch素材下载

    信息流UI设计模板 Based Feed UI Kit .sketch素材下载

    laravel-feed:轻松生成RSS feed

    Spatie是一家位于比利时安特卫普的网页设计机构。 您可以找到我们所有开源项目的概述。支持我们 我们投入了大量资源来创建。 您可以通过来支持我们。 非常感谢您从家乡寄给我们一张明信片,其中提到您使用的是哪个...

    feedreader:作业6 Feedreader

    Jasmine将重新进行一系列eigjt预先设计的测试,以确保代码的功能。 我了解到,在开始编码之前编写测试可以确保我的计划不仅公开在我脑海中。项目概况在此项目中,您将获得一个基于Web的应用程序,该应用程序可读取...

    rodeo:用于改进 Feed Wrangler 视觉设计和体验的浏览器扩展

    Feed Wrangler 是一项很棒的服务,可以阅读您的 RSS 提要并保持更新,因为 Google 阅读器已停产,不幸的是,虽然它运行良好,但其设计不如某些人从付费服务中希望的那么好,所以 Rodeo 是为了改善这一点。...

    Gird组件 Part-3:范例RSSFeed Viewer

    在YAHOO.ext.gird包中,大多数类是设计成为“即插即用plug and play”的,可扩展的extended和可自定义的customized,能以最小量的代码插入轻松到web程序中。 要测试和创建一个实现gird的范例,我决定做一个简单的,...

Global site tag (gtag.js) - Google Analytics