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

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

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

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

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

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

这样好像也不行,求各位大神给点意见,谢谢~
...全文
229 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
  • 打赏
  • 举报
回复
可以考虑表分区。另外如果数据超大,考虑分布式数据库。
代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...

57,064

社区成员

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

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