【版主大人】 我现在要做一个社交系统,设计到用户和好友管理,数据模型怎么设计合适?

七夜未央 2016-04-26 10:14:09
RT~

我现在的初步思路是用户表打算建一百张表来分表存储,这个倒不是很难,我用用户账号(手机号码)去取余存储即可。

但是好友关系没想到好的方案,刚开始想到的最笨的办法就是用一个表来存储用户和好友的关系,但是这样一来的话如果

一个用户有500个好友,那么就有500条记录,这还只是一个用户的,用户多了的话我都不敢想了,还有一种方案是我用

一条记录来存储该用户的所有好友账号,这个字段的值我设置大一点用个verchar来存储,但是好友多了算下来有几十万个字节,

这样好像也不行,求各位大神给点意见,谢谢~
...全文
176 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
七夜未央 2016-04-29
  • 打赏
  • 举报
回复
引用 3 楼 gikod 的回复:
[quote=引用 2 楼 gikod 的回复:] 可以看看微博的处理,tim yang的博客上有很多。 分布式数据库比如dynamo如果不做应用级别对应业务逻辑的优化,也不一定能很好地处理这些问题。 我觉得还是要解决分库sharding和共享的问题。 1 你需要多少的一致性? 一般来说,社交只需要办到最终一致性,不太需要太多的强一致性。 或者说,只要办到用户级或者会话级一致性就好。 2 你的规模要多大? 百万、千万、亿、十亿,考虑的问题是不完全一样的 先回答了上面两个问题,之后的问题就可以有答案了。 用户级一致性用用户级sharding就可以办到。 即自小粒度是用户,以用户id为key做hash(你说的除余就可以认为是hash的一种) 回话级一致性,一般是针对单个session,如果用户间有对话,不妨用chat_session_id来做hash,把chat相关的表再做以遍hash,单独分库sharding存储,这个的sharding规则可以分得更多,比如50000张表。 这样至少解决了第一步的负载问题。 另外,如果你考虑系统的维护性和扩展性,那么需要更多的设计,比如更多的初期sharding预留,或者consist hash。 这些推荐你多读更多的资料以后再做设计。
上面说的是基础信息存储的问题,接下来说说交互通信的问题。 想必社交平台不是只做静态展示的,那么会有IM聊天、Twitter微博的消息和推送、博客朋友圈的文章、互相点赞、评论这些交互。 这些如果上规模,只用mysql肯定是不合适的。 对于负载,还可以考虑的是redis和memcached做缓存,可是对于通信就必须考虑通信中间件。 对于im,可以考虑rabbitmq。 对于微博、博客通知、点赞通知、评论,可以考虑kafka。 [/quote] 多谢指点
gikod 2016-04-28
  • 打赏
  • 举报
回复
引用 2 楼 gikod 的回复:
可以看看微博的处理,tim yang的博客上有很多。 分布式数据库比如dynamo如果不做应用级别对应业务逻辑的优化,也不一定能很好地处理这些问题。 我觉得还是要解决分库sharding和共享的问题。 1 你需要多少的一致性? 一般来说,社交只需要办到最终一致性,不太需要太多的强一致性。 或者说,只要办到用户级或者会话级一致性就好。 2 你的规模要多大? 百万、千万、亿、十亿,考虑的问题是不完全一样的 先回答了上面两个问题,之后的问题就可以有答案了。 用户级一致性用用户级sharding就可以办到。 即自小粒度是用户,以用户id为key做hash(你说的除余就可以认为是hash的一种) 回话级一致性,一般是针对单个session,如果用户间有对话,不妨用chat_session_id来做hash,把chat相关的表再做以遍hash,单独分库sharding存储,这个的sharding规则可以分得更多,比如50000张表。 这样至少解决了第一步的负载问题。 另外,如果你考虑系统的维护性和扩展性,那么需要更多的设计,比如更多的初期sharding预留,或者consist hash。 这些推荐你多读更多的资料以后再做设计。
上面说的是基础信息存储的问题,接下来说说交互通信的问题。 想必社交平台不是只做静态展示的,那么会有IM聊天、Twitter微博的消息和推送、博客朋友圈的文章、互相点赞、评论这些交互。 这些如果上规模,只用mysql肯定是不合适的。 对于负载,还可以考虑的是redis和memcached做缓存,可是对于通信就必须考虑通信中间件。 对于im,可以考虑rabbitmq。 对于微博、博客通知、点赞通知、评论,可以考虑kafka。
gikod 2016-04-28
  • 打赏
  • 举报
回复
可以看看微博的处理,tim yang的博客上有很多。 分布式数据库比如dynamo如果不做应用级别对应业务逻辑的优化,也不一定能很好地处理这些问题。 我觉得还是要解决分库sharding和共享的问题。 1 你需要多少的一致性? 一般来说,社交只需要办到最终一致性,不太需要太多的强一致性。 或者说,只要办到用户级或者会话级一致性就好。 2 你的规模要多大? 百万、千万、亿、十亿,考虑的问题是不完全一样的 先回答了上面两个问题,之后的问题就可以有答案了。 用户级一致性用用户级sharding就可以办到。 即自小粒度是用户,以用户id为key做hash(你说的除余就可以认为是hash的一种) 回话级一致性,一般是针对单个session,如果用户间有对话,不妨用chat_session_id来做hash,把chat相关的表再做以遍hash,单独分库sharding存储,这个的sharding规则可以分得更多,比如50000张表。 这样至少解决了第一步的负载问题。 另外,如果你考虑系统的维护性和扩展性,那么需要更多的设计,比如更多的初期sharding预留,或者consist hash。 这些推荐你多读更多的资料以后再做设计。
示申○言舌 2016-04-26
  • 打赏
  • 举报
回复
可以考虑表分区。另外如果数据超大,考虑分布式数据库。
英文版:Expert Spring MVC and Web Flow 内容简介 《深入解析Spring MVCgn Web Flow》是Spring MVC 和Web Flow 两个框架的权威指南,书中包括的技巧和提示可以让你从这个灵活的框架中汲取尽可能多的信息。书中包含了一些开发良好设计和解耦的Web 应用程序的最佳实践,介绍了Spring 框架中的Spring MVC 和Spring Web Flow,以及着重介绍利用Spring 框架和Spring MVC 编写Web 应用程序的最佳方法。《深入解析Spring MVCgn Web Flow》还介绍了Spring 框架的设计模式,以及如何将同样的设计和技术应用到读者自己的代码中。 《深入解析Spring MVCgn Web Flow》适合各层次Spring Web 程序员阅读。 编辑推荐 《深入解析Spring MVCgn Web Flow》来自Spring开发团队的权威之作前所未有地深入剖析Spring MVC技术内幕大量专家经验和技巧,全面提升你的Web开发境界 Spring MVC和Spring Web Flow是Spring平台上两个极为灵活而且功能强大的Web框架。前者是构建在Spring框架上的Web应用程序框架,可以同许多其他视图技术无缝集成;后者是控制业务处理流程的有效解决方案,提供了一种编写有状态和基于会话的Web应用程序的简便手段。 《深入解析Spring MVCgn Web Flow》出自Spring核心开发者之手,不仅详细分析代码,全面剖析了两个框架的各种特性(包括一些不为人知的技术亮点)。告诉读者如何最大程度地发挥出它们的潜力。还解密了设计这两个框架时的许多决策内幕、所应用的设计模式和面向对象技术,使读者能够更深入地了解Spring。并在自己的项目中运用这些专家技术,全面提升自己的Web开发境界。 《深入解析Spring MVCgn Web Flow》由spring框架的开发和维护者SpringSource公司组织编写,作者均为资深Spring工程师或咨询师。 Seth Ladd是资深Spring培训师,曾为NEC公司等许多国际性机构构建Web系统。Darren Davison和StevenDevijver都曾是Spring核心开发人员,在Spring源代码和文档中可以很容易地找到他们的名字。而Colin Yates、Keith Donald和Rob Harrop均是SpringSource资深工程师,仍然是Spring新版本开发的核心骨干。Yalcs是.J2EE主架构师,Donald是SpringWeb Flow负责人,Hartop是Spring与Tomcat成产品负责人。“《深入解析Spring MVCgn Web Flow》为Spring社区弥补了一大空白。” ——Lasse Koskela.JavaRanch版主,Test Driven作者“《深入解析Spring MVCgn Web Flow》是非常急缺的深入讲解Spring MVCf~~Spring Web Flow的图书堪与Pro Spring相媲美。” ——Steve Anglin,资深Java技术专家

56,679

社区成员

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

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