关于新浪微薄好友分组设计

yananguo_1985 2011-03-14 02:24:26
最近新浪微薄很流行,对其中的一些数据库设计希望大家可以探讨下。

微薄好友设计:
新浪微薄好友可以创建分组,好友可以属于我设置的几个分组中。

一般我们设计好友都是UserId(用户ID)、FriendId(朋友ID)、CreatedDateTime(创建时间)、
Status(好友之间的状态)、GroupId (分组编号)

表设计一般为:
UserId,FriendId,CreatedDateTime,GroupId,Status,之类的,一般一个好友只属于一个分组中。

但在新浪微薄中好友分组一个好友可以属于几个分组中,即GroupId可能为(2,5,6,7,9),即几个分组组成的字符串表示。

如果这样设计,在查询好友分组的时候就需要拆分GroupId,从而带来一定性能问题。

请教2个问题:

1、关于新浪微薄这样的好友分组mysql中设计问题?如何设计?希望能够给出性能最佳的方式!
2、mysql中由于没有函数返回表,拆分GroupId(2,5,6,7,9),然后和通过拆分的编号和另外一个表进行JOIN的问题,mysql中拆分字符串性能最佳的方式?

以上问题希望高手能够指教。
...全文
686 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2011-03-14
  • 打赏
  • 举报
回复
1、最好将GroupId存为
2
5
6
7
9

2、拆分字符串,用SQL+辅助表方法
示例:
SELECT a.*,
MID(MID(newa,b.id,LENGTH(newa)),2,LOCATE(',',MID(newa,b.id,LENGTH(newa)),2)-2) AS newb
FROM (
SELECT *,CONCAT(',',articles,',') AS newa FROM `test`.tn) a,lsb2 b
WHERE LENGTH(newa)>=b.id
AND MID(newa,b.id,1)=','
AND LENGTH(MID(newa,b.id,LENGTH(newa)))>=2

lsb2:字段ID,内容1-10000,效率不会太高
ACMAIN_CHM 2011-03-14
  • 打赏
  • 举报
回复
标准的范式设计方法是
(UserId,FriendId,CreatedDateTime,....)
'A','B',...
(UserId,FriendId,GroupId)
'A','B',2
'A','B',5
'A','B',6
'A','B',7
'A','B',9


但考虑到一个人添加的好友是有限的,不会几百万,我个人估计平均一个人也就50-200好友,并且分组上所做的查询并不多。因此可以设计为
(UserId,FriendId,CreatedDateTime,....GroupId)
'A','B',.......,'2,5,6,7,9'

至于分组的显示和查询则可以在程序中实现。
数据库系统概论实验-微博系统设计 实验名称:数据库系统概论实验-微博系统设计 实验人员: 实验时间: 实验地点: 实验要求: 了解并使用微博: 参考网站: 搜狐微博 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) 用户
开篇先讲两个小故事故事一:在北京一家创业公司工作的年轻女白领是一个旅行爱好者,喜欢旅行并分享到微博上。趁着五一假期到泰国旅游,她拍摄了一组照片分享到了微博上,24h后,微博阅读量达到1万,她收到了100元的广告费。年轻女白领收到广告费后非常的开心,因为她做着自己喜欢的事,还因此而获得了额外收益,从此决定创作出更多精美内容发送到微博上,与人分享自己的快乐。故事二:201X年,微博用户掀起“打拐”行动(打击拐卖儿童行动),一条“6岁女孩周XX四川彭州被拐”的微博在网上被疯狂转发,引来无数网友关心。不久之后,杭州一位女士,发现该条微博上使用的照片正是自己女儿的照片,而自己的女儿一直在家中,并未被拐。于是立马报警,网警查看了微博的操作记录(全部存在区块链上),快速追溯到了虚假微博的始作俑者,并将其绳之于法。上述故事情节,在去中心化微博平台中都是可以实现的,借助于区块链技术,可以保证微博上的所有数据和行为可溯源,从而保证传播信息的真实性。同时,由于去除掉了中心化主体,微博的参与者将同时成为微博平台的所有者,可以共享微博平台的收益。一、现有的中心化微博平台——新浪微博传统微博(如新浪微博)就是一个中心化的应用平台,新浪公司就是整个微博平台的中心。新浪公司制定新浪微博的运行规则,开发出整个微博平台,为其提供中央服务器,维持着整个新浪微博的运转,并不断地向外推广,吸引用户使用。一切商业行为都是为了追逐利益的,新浪公司运营新浪微博,也是为了吸引广告主投放广告,从而获得巨额的广告收入。在中心化的微博平台中,大致流程是这样的,博主(发微博者)会编辑微博发送到新浪微博平台中,新浪微博将微博推送给观众(看微博者),观众查看微博,微博中会夹杂着一些广告,观众看微博时也会看到一些广告。广告主会为广告的浏览量和点击量,支付广告费给新浪公司。二、去中心化微博平台与传统微博平台不同,在去中心化微博平台中,将没有中心机构,没有中央服务器,主要是通过区块链技术,运用分布式自治组织(DAO)的组织架构,实现微博平台的自治。让每一个微博参与者都成为微博平台的所有者,他们将共享微博平台获得的全部收益。在去中心化微博平台中,参与者主要有:发微博者,他们是微博内容提供者,是最核心的参与者之一。微博平台受不受欢迎,很大程度上依赖于内容的质量,而这就必然取决于发微博者。发微博者可以根据其微博中所包含广告的浏览量(等同于微博浏览量)和点击量,来获得微币(WB)作为奖励。挖矿者(存储节点),提供算力和存储能力,充当着服务器的角色,是微博平台得以正常运行的基础。微博系统每隔10分钟会将最新微博打包发送到各个存储节点中,存储节点会储存最新的微博数据,保证所有数据可溯源(区块链技术特点)。作为奖励,系统会给提供算力和存储能力的挖矿者以微币(WB)作为奖励。看微博者,他们是微博内容的浏览者,是微博平台中的主要用户,根据其对微博以及广告的浏览量和点击量,系统也会给予其微币(WB)作为奖励;广告主,在微博中投放广告,以提高自己品牌知名度或者直接引流的商家,他们可以在微博中投放广告,并根据广告的浏览量和点击量,用微币(WB)来支付广告费。在四个参与者中,发微博者、挖矿者和看微博者在参与过程中,都会获取到微币(WB)作为奖励,而广告主则主要需要消耗微币(WB)才能参与到微博活动中。因此,会形成一个微币(WB)交易市场。在交易市场中,广告主用现实中的通用货币(如RMB)购买其他参与者手中的微币(WB)。此外,博主(发微博者)通过微博下方所包含的广告是可以获得收益的,但广告也会给粉丝(看微博者)带来阅读成本,甚至造成反感,从而取消关注,所以博主会主动去把握好广告与粉丝之间的均衡。因此,在去中心化微博平台中,会将微博中广告数量和内容的选择权让渡给博主,从而降低粉丝阅读广告的心理成本,并提高广告的点击量。如一个摄影博主,发了一个在极地拍摄美景的微博,微博下方的广告则选择了与博主同款单反相机的广告,因为关注他微博的人都是以摄影爱好者为主,因此对这样的广告不会过度反感,甚至还会主动去了解。(注:笔者经常在某浪微博上刷到贷款、祛痘、整形等垃圾广告,表示十分反感,无法忍受!)去中心化微博平台参与者所构成的业务流程图详情如下: 

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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