新浪微博的“关注功能”数据库是如何设计的?

风之子1 2010-12-20 05:48:21
在新浪微博中,一个用户可以关注另外一个用户,当关注后,这个被关注用户的博客更新就显示在关注用户的主页面中。
我想问一下,它的这个关注功能部分的数据库是如何设计的,比如用户A关注用户B,是不是就在数据库中生成一条关注记录(估且不管它的关注表具体字段都有什么);还是说在A用户表中修改关注用户ID这么个字段(可能会存在,将关注的用户Id,以逗号分隔的形式存在这个字段中),是这两种方式中的哪一种呢,还是说是别的方式?
假设此处用的是第一种方式,比如用户A关注了10000个用户,而用户A在登陆后,将显示这些被关注好友的更新,那按照我的思路就是系统先查出这10000个用户的ID,再根据这些ID以时间排序获取更新博客内容(当然这里运用到了分页的功能),我就是想问一下,这种方式是不是性能太低了。如果我想错了,还请会的朋友帮忙纠正一下!它的实际设计方式或者更好的设计方式都有什么方式呢?
...全文
4512 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
Liu_cy88 2012-12-10
  • 打赏
  • 举报
回复
我觉得应该跟QQ的好友原理差不多 关注了某个人,就相当于QQ加了某个人为好友类似 首先有一个用户表 记录用户自己的ID 然后再有一个好友关系表,比如A和B是好友 就在好友关系表里面添加一条A和B的对应关系记录 关注的原理,我想也是这样吧
极品老土豆 2012-12-10
  • 打赏
  • 举报
回复
做过销售系统么?知道单据和明细的关系么? 知道的话,就不难知道这个了。
xiaoyong990 2012-12-10
  • 打赏
  • 举报
回复
引用 35 楼 anjolan 的回复:
喵喵喵喵喵喵喵Java code?1System.out.println("Holle world!~");
酱油党。。。
anjolan 2012-12-09
  • 打赏
  • 举报
回复
喵喵喵喵喵喵喵

System.out.println("Holle world!~");
fihuang 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 maco_wang 的回复:]

新浪围脖怎么实现的我不知道,但是csdn怎么实现的貌似可以看得出来:
MySQL Error
Message: MySQL Query Error
SQL: SELECT * FROM uchome_feed WHERE uid IN (0,174027,144477,143357,142827,142004,141254,141171,140805,140631,146288,14762……
[/Quote]csdn这个太业余了吧 这个性能应该非常非常底
fihuang 2011-06-28
  • 打赏
  • 举报
回复
网上查了一下 新浪微博用的mysql+分布式缓存等等高效率的架构
但是我个人还是觉得新浪微博应该用了nosql数据库 facebook twitter都用Cassandra
cd731107 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 maco_wang 的回复:]
新浪围脖怎么实现的我不知道,但是csdn怎么实现的貌似可以看得出来:
MySQL Error
Message: MySQL Query Error
SQL: SELECT * FROM uchome_feed WHERE uid IN (0,174027,144477,143357,142827,142004,141254,141171,140805,140631,146288,147622……
[/Quote]
这句如果放在一起,只是一句,感觉有可能会超长
叶子 2011-06-26
  • 打赏
  • 举报
回复
新浪围脖怎么实现的我不知道,但是csdn怎么实现的貌似可以看得出来:
MySQL Error
Message: MySQL Query Error
SQL: SELECT * FROM uchome_feed WHERE uid IN (0,174027,144477,143357,142827,142004,141254,141171,140805,140631,146288,147622,148647,167268,167266,167263,158764,158620,154916,152488,149747,140195,140170,65387,56761,56508,54209,53389,52673,48628,43679,82488,84792,85262,138409,138259,137553,137179,134229,124338,109927,86287,41757,2708660,960311,834084,764443,429088,407988,394379,378191,378188,1025919,1528198,1972098,2636949,2635644,2507505,2278680,2262135,2262133,2240424,2127090,366280,358913,211482,207897,204615,203295,192138,192134,189762,186169,219044,228305,246254,354172,334301,328912,327377,321864,319738,308807,265358,181008,41195,19087,10242,10102,9032,7374,6957,6858,6762,6277,11471,11555,11694,19083,18423,16318,15548,15066,13676,13439,12506,6028,5884,967,951,914,715,609,547,539,490,1140,1141,1142,5801,4588,4173,2983,2292,2150,1716,1703,318,40393,32796,32795,32794,32279,32246,31981,30812,30076,32804,32806,33159,38729,38725,38215,37228,37170,37006,35129,33493,29990,29762,25327,23946,23945,21912,20928,20927,20875,20874,26420,27771,27822,29612,29599,29437,) ORDER BY dateline DESC LIMIT 0,50
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY dateline DESC LIMIT 0,50' at line 2
Errno.: 1064
Click here to seek help.
狼牙工作室 2011-06-26
  • 打赏
  • 举报
回复
sdf
jackluo2013 2011-06-26
  • 打赏
  • 举报
回复
CREATE TABLE IF NOT EXISTS `uchome_friend` (
`uid` mediumint(8) unsigned NOT NULL DEFAULT '0',
`fuid` mediumint(8) unsigned NOT NULL DEFAULT '0',
`fusername` varchar(15) NOT NULL DEFAULT '',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`,`fuid`),
KEY `fuid` (`fuid`),
KEY `status` (`uid`,`dateline`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CainLai 2011-06-08
  • 打赏
  • 举报
回复
如果你关注的好友很多,同时这些人又都有更新的话,那么好像系统只会显示一部分最新更新的消息,而当你把浏览器的滑动条网下拖的时候,他才会即时的再去读取信息
老潘 2011-06-08
  • 打赏
  • 举报
回复
应该是MySQL和NoSQL结合,MySQL存用户及微博消息,NoSQL存关注、被关注等
Sphonix 2011-06-08
  • 打赏
  • 举报
回复
可以肯定的说,这个不是存储在关系数据库里的,一般都是用的高性能的嵌入式数据库。至于具体的设计结构,应该与普通的关系数据库中的表结构差异不大,但其性能要比关系数据库快很多。不过肯定不是楼主所说的“先查出这10000个用户的ID,再根据这些ID以时间排序获取更新博客内容”这种方式。
阿里瓜瓜 2011-06-07
  • 打赏
  • 举报
回复
哎估计一个表存关系 其他表调用
whb147 2011-03-29
  • 打赏
  • 举报
回复
还有就是分表
whb147 2011-03-29
  • 打赏
  • 举报
回复
如果知道QQ好友是怎么设计的,
原理一样

whb147 2011-03-29
  • 打赏
  • 举报
回复
感觉交叉关注那个表太大了
比如说有10万个用户,如果交叉关注,每个就10个话,就是1000000万
像新浪这样的,那么行记录就太大了
luoyoumou 2011-03-29
  • 打赏
  • 举报
回复
-- 用户表(如果这个表数据相当多,可以用分区表)
create table userinfo
( userid number(38,0), -- 可以用序列递增值也成,自己看着办
username varchar2(60),
phone varchar2(20),
address varchar2(20),
sex char(1),
cdate date default sysdate
-- 其他字段,自己添加
);

alter table userinfo add constraints pk_userinfo primary key(userid);

-- 用户关注信息表(如果这个表数据相当多,可以用分区表):
create table userattention
( userid number(38,0), -- 用户ID
attention_userid number(38,0), -- 被关注的用户ID
status number(18,0), -- 关注状态(或者说关注等级,自己定义:0代表什么,1代表什么)
cdate date default sysdate, -- 创建时间
udate date default sysdate -- 修改时间
-- 其他字段,自己添加
);

-- 为保持数据完整性:不管是“用户ID”还是“被关注的用户ID”其ID必须在userinfo表中存在!
alter table userattention add constraints pk_userattention primary key(userid,attention_userid);
alter table userattention add constraints fk_userattention_userid foreign key (userid) references userinfo(userid);
alter table userattention add constraints fk_userattention_att_userid foreign key (attention_userid) references userinfo(userid);

userattention表中一个userid对应该可能有N条记录(而不像你说的:用一条记录,其不同的attention_userid 用逗号隔开,这样设置是不合理的)

-- 好比QQ号,我的QQ可以添加N个QQ好友,但我想:腾迅应该不会将我这N个QQ好友用字串连成一条记录(这也太吝啬啦)
junhe0723 2011-03-29
  • 打赏
  • 举报
回复
非关系型数据库
anlianganl 2011-01-24
  • 打赏
  • 举报
回复
行至水穷处,坐等云起时。
像这类SNS类型的,应该不是用的关系数据存储,应该是Nosql存储的。
加载更多回复(17)
数据库系统概论实验-微博系统设计 实验名称:数据库系统概论实验-微博系统设计 实验人员: 实验时间: 实验地点: 实验要求: 了解并使用微博: 参考网站: 搜狐微博 t.sohu.com、 新浪微博 weibo.com 或腾讯微博 t.qq.com 等; 根据你了解到的情况和分析, 划分微博的基本功能, 完成需求分析, 并画出业务流程图; (参 考搜索关键词:微博 数据库 设计) 基本功能: 一、 需求分析 1、 功能需求 (1) 功能描述 用户注册功能 用户注册时,需要分配给每一个用户一个独立的 ID,并且保存用户 的用户名、密码、出生日期、单位等信息。 消息管理功能 发表消息: 用户可以随时发表 140 个字左右的消息,其中可包括音乐, 图片,视频等,发布时会显示发布者、发布时间等。 评论消息:用户可对其它用户发表的消息进行评论,每条消息均会显 示评论条数与评论内容、评论时间。 删除消息:用户对自己不满意或其它原因的消息可删除。 删除评论:用户对自己不满意或其它原因的评论可删除。 转发消息: 用户可以转发关注者所发表的消息,转发后,每条消息转发 次数及转发时间均会显示。 查看消息:用户可以在当前页面查看到被自己关注者的所有消息, 按时间排序。 收藏消息: 用户可对其它用户发表的感兴趣的消息收藏,供以后查看, 每条消息下均会显示收藏次数。 用户关注功能 用户可以关注他人,同时也可以被他人关注。 创建关注组:当用户关注的人特别多时,显得有些不易于查看被关注 者发表的信息,关注组即是对众多用户关注的人进行再次分组,并添加显 示名称,可最为快捷的知道想要特别关注的一些人的最新动态。 删除关注组:即取消关注组里面人的特别关注,此处只是删除关注 组,并不会取消组里用户的关注。 添加用户:添加已关注的用户至关注组中。 删除用户:删除关注组中的用户。 用户查找功能 用户可以查找其他的用户并关注; 用户可以查找已经关注的好友; 用户可以查找自己之前发布过的消息; 用户可以查找好友发布过的消息。 (2) 功能流程图 登陆 2、 数据需求 (1)数据需求描述 消息: 消息包含消息编号, 用户编号, 发表时间, 转发次数, 评论次数组成。 评论:由消息编号,评论编号,用户编号,评论时间,评论内容组成。 用户:用户由用户编号,妮称,用户头像,邮箱,性别,密码,真实姓名, 皮肤编号,QQ,毕业院校,职位,手机号,自我介绍,用户标签,兴趣,个人 博客地址,注册时间组成。 关注组:由关注组编号,被关注组编号,关注名称,创建时间组成。 (2) 数据字典 1. 用户表: 开始 注册 消息 管理 关注 管理 查找 管理 评论 管理 转发 管理 数据项名 取值范围 数据项含义说明 用户编号 以 U 开头加 10 位数字组成 用户编号,唯一识用户的字段 用户名 任意字符 即用户在微博中显示的妮称。 密码 至少 6 个可打印字符 用户登陆所用密码 性别 男,女,保密 用户性别 自我介绍 任意可打印字符 用户一些简要的自我介绍 2、普通消息表: 数据项名 取值范围 数据项含义说明 消息编号 以 M 开头加 15 位数字组成 用户发表消息编号 用户编号 以 U 开头加 10 位数字组成 用户编号 消息内容 任意可打印字符 用户发表消息内容 发表时间 时间 用户发表消息时间 3、转发消息表: 数据项名 取值范围 数据项含义说明 消息编号 以 M 开头加 15 位数字组成 用户发表消息编号 用户编号 以 U 开头加 10 位数字组成 用户编号 转发时间 时间 用户转发消息时间 4、评论表: 数据项名 取值范围 数据项含义说明 评论编号 以 R 开头加 15 位数字组成 用户评论 消息编号 同消息编号 同消息编号 用户编号 同用户编号 同用户编号 评论时间 时间 用户发表评论时间 评论内容 任意可打印字符 用户发表评论内容 5. 关注表: 数据项名 取值范围 数据项含义说明 用户编号 同用户编号 同用户编号 被关注者编号 同用户编号 同用户编号 关注时间 时间 关注时间 (3)数据约束描述(暂无) 二、 功能流程图 登陆 三、 E—R 图 1、用户 开始 注册 消息 管理 关注 管理 查找 管理 评论 管理 转发 管理 用户 用户名 自我介绍 性别 用户编号 密码 2、消息 3、转发表 Relay 4、评论表 Commit 消息 用户编号 内容 消息编号 时间 转发消息 用户编号 消息编号 时间 5 关注表 Attention 四、 数据库设计 消息 用户编号 消息编号 评论编号 时间 时间 关注 用户编号 被关注者 编号 时间 1. 用户 user 表: 属性名称 数据类型 属性说明 备注 Uid char(11) 用户编号 主键 UName varchar(20) 用户
《计算机毕业设计:Java实现的仿新浪微博系统》是一项精心设计的项目资源,旨在帮助本科学生、毕业设计参与者以及Java学习者深入理解和掌握SSM框架的应用。该系统以新浪微博为原型,通过Java语言的编程实现,构建了一个功能丰富、交互性强的社交媒体平台。 该系统不仅实现了用户注册登录、个人信息管理、发布动态、关注与粉丝互动等核心功能,还注重用户体验,提供了友好的界面设计和流畅的操作流程。用户可以在平台上浏览他人的动态,发表自己的观点,与其他用户进行互动交流,形成一个充满活力的社交网络。 在技术实现上,该系统采用了SSM框架,通过Spring的依赖注入和面向切面编程,简化了代码结构,提高了系统的可维护性;SpringMVC负责处理前端请求和响应,实现了前后端的分离;MyBatis则作为持久层框架,简化了数据库操作。源码编写规范,逻辑清晰,并附带了详细的注释和说明文档,为学习者提供了深入学习和实践SSM框架的宝贵资源。 此外,该资源还附赠了计算机答辩PPT模板,为学习者提供了从项目实现到答辩展示的全方位支持。PPT模板内容丰富,结构清晰,涵盖了项目的背景、需求分析、系统设计、实现过程。
设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。它主要包括两部分内容:确定最基本的数据结构;对约束建模。数据库建模的过程:概念模型->逻辑模型->物理模型概念模型的用途:概念模型用于信息世界的建模是现实世界到机器世界的一个中间层次是数据库设计的有力工具数据库设计人员和用户之间进行交流的语言 对概念模型的基本要求: 较强的语义表达能力能够方便、直接地表达应用中的各种语义知识简单、清晰、易于用户理解  逻辑模型:对概念模型的进一步细化,逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等 物理模型:是概念数据模型和逻辑数据模型在计算机中的具体表示。该模型描述了数据在物理存储介质上的具体组织结构,不但与具体的数据库管理系统相关,同时还与具体的操作系统以及硬件有关。 可以通过物理模型直接生成对应数据库的SQL,也在此模型上调整对应数据库特有的内容。比如Oracle的表空间等。 对于数据模型的建模,最有名的要数PowerDesigner,PowerDesigner是在中国软件公司中非常有名的,其易用性、功能、对流行技术框架的支持、以及它的模型库的管理理念,都深受设计师们喜欢。他的优势在于:不用在使用create table等语句创建表结构,数据库设计人员只关注如何进行数据建模即可,将来的数据库语句,可以自动生成 课程将基于上述理论进行讲解,会讲解理论以及实战,课程涉及内容:数据设计思想1、建模理论2、设计规范数据库建模设计1、逻辑模型2、物理模型3、汽车租赁系统建模实战 
Spacebuilder是一款基于asp.net mvc业内领先的web2.0建站平台。结合博客、群组、论坛、微博、分享、相册、文件、活动、投票、资讯等应用模块(此外还提供问答、招贴、招聘等扩展模块),可以一站式快速的搭建具有SNS特征的在线社区。借助SpaceBuilder平台的服务(私信、邀请、权限、审核、隐私、积分、通知、动态、标签、分类、附件、全文检索…),二次开发者可以快速的增加新的应用模块或者对现有的应用模块进行定制。   SpaceBuilder(简称SPB,软件著作权登记号: 2008SR14027)诞生于2007年, 是asp.net技术中最为强大的社区产品。作为国内最早的web2.0社区产品,SpaceBuilder始终专注于web2.0在国内的应用创新,竭尽全力为社区的发展做出自己的贡献。使用预置的博客、群组、论坛、微博、分享、相册、文件、活动、投票、资讯等应用模块,用户可以一站式快速搭建具有sns特征的社区网站。此外,为站点运营者考虑还提供了问答、招贴、招聘等扩展应用模块。     SpaceBuilder采用了"平台 应用"的设计理念,依托SpaceBuilder平台的服务(私信、邀请、权限、审核、隐私、积分、通知、动态、标签、分类、附件、全文检索...),二次开发者可以快速添加新的应用模块。 面向高端,为客户站点的飞跃式发展保驾护航,一直是SpaceBuilder孜孜不倦的追求。通过数据库优化设计、分页算法、全文检索,SpaceBuilder可以轻松处理千万级以上数据。借助于当前最优的分布式部署方案,SpaceBuilder已经在多个客户站点验证了万人同时在线的性能目标。     Spacebuilder v3.2与上个版本相比,主要有以下重要改进: 1. 集成QQ和新浪微博账号,可以直接使用新浪微博和QQ账号进行登录。 2. 微博进一步增强,v3.2中的微博功能已经可以与新浪微博、腾讯微博媲美,并尽量保留了这些主流微博的使用习惯。v3.2的微博主要增加了以下功能: 1) 发布微博时可以同步到新浪微博,方便两个微博的维护(需要绑定新浪微博账号); 2) 可以对关注的用户进行分组,并且可以根据分组查看进入自己时间线的微博; 3) 可以创建特色话题,通过图片、文字加强话题的展现; 4) 可以创建微博大屏幕,尤其可以在活动、会议中吸引更多人参与互动; 5) 加强了微博显示的即时性,在“我的首页”、“大屏幕导播室”、“广场”等位置基本没有页面刷新也会即时得到最新信息; 6) 可以对感兴趣的微博进行收藏,以便以后随时查看。 3. 新增了4套频道皮肤和2套空间皮肤; 4. 其他改进: 1) 增加发布公告功能:管理员可以在后台发布公告,并且可以控制在频道、空间、群组不同的区域显示;公告也可以是外链;可以设置公告标题高亮显示(颜色、加粗、字号);阅读过的公告不再提示; 2) 增加身份认证功能:管理员可以定义不同的身份名称及图标,管理员可以为用户赋予身份及身份说明,身份标识在用户的空间显著显示,并且同时在微博、动态中显示; 3) 增强邀请朋友加入群组功能,可以自己邀请站外用户加入群组; 4) 后台首页增加了管理员待处理事项,对于需要做哪些管理操作一目了然; 5) 重新优化全文检索,使搜索结果更加准确; 6) 修复了70多个bug。   注意:Spacebuilder v3.2采用asp.net mvc 2.0开发,服务器安装 .net framework 3.5 (建议安装.net framework3.5 SP1)或 .NET Framework4.0。 如果使用SDK版本还需要安装 asp.net mvc 2.0。开发工具可以使用vs2010或vs2008(vs2008必须安装 sp1补丁)。

34,597

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧