# 《分布式IM系统》总体架构-第02节:分布式IM即时通讯系统数据模型设计
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/14ie4NqRD (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本节难度:★★★☆☆
- 本节重点:对分布式IM即时通讯系统的数据模型进行设计,主要涉及到用户、好友关系、群组、群成员、单聊消息和群聊消息等的数据模型设计。
- 课程视频:https://t.zsxq.com/14ie4NqRD (opens new window)
大家好,我是冰河~~
经过前面对分布式IM即时通讯系统的功能需求、业务流程和技术流程的梳理,我们已经明确了分布式IM即时通讯系统的业务需求和技术需求,明确了分布式IM即时通讯系统的方案目标,以及对分布式IM即时通讯系统进行了总体架构设计。
# 一、前言
至此,我们已经清楚了分布式IM即时通讯系统的功能需求、业务流程、技术流程、方案目标以及总体架构设计,对这些内容做到心中有数后,我们就可以开始尝试梳理和设计分布式IM即时通讯系统的数据模型了。将这些数据模型梳理清楚,能够更好的指导我们研发分布式IM即时通讯系统。
# 二、本章诉求
在整个分布式IM即时通讯系统的设计和研发过程中,尽量简化复杂的流程设计和无关紧要的业务设计,保留最核心的功能,让大家从分布式IM即时通讯系统中领略如何编写高并发程序,从总体上对系统的优化处理做到心中有数。
分布式IM即时通讯系统简化无关紧要的业务后,主要涉及到用户、好友关系、群组、群成员、单聊消息和群聊消息。这也是我们在设计和研发分布式IM即时通讯系统的过程中,要实现的最基础和最核心的功能。
本章,我们就一起对用户、好友关系、群组、群成员、单聊消息和群聊消息的数据模型进行简单的设计。
# 三、数据模型设计
数据模型对于系统的建设是至关重要的,可以这么说,数据模型是系统正常运行的基石。无论一个系统如何建设和运行,最终这个系统的价值基本都会以数据的形式呈现出来。如何对这些数据建立对应的数据模型,来更好的支撑系统的运行,并且能够为人们带来更好的体验,使系统的价值最大化,这是在设计和研发系统的过程中需要重点考虑的问题。
本节,就本着最简化的原则来设计用户、好友关系、群组、群成员、单聊消息和群聊消息的数据模型。
注意:数据库脚本已经存放到bh-im-resource
仓库下的environment/mysql/init
目录下,脚本文件为bh_im_init.sql
,后续在搭建分布式IM即时通讯系统的研发环境时,会自动将数据脚本导入到MySQL数据库,无需自己重新运行脚本文件。
# 3.1 用户模型设计
对于用户模型数据来说,简化后的模型字段包括:用户id、用户名、密码、用户昵称、用户头像、用户头像缩略图、性别、用户类型、个性签名、最后登录时间、创建时间,整体如下所示。
字段名称 | 类型 | 长度 | 默认值 | 是否必填 | 说明 |
---|---|---|---|---|---|
id | bigint | 20 | 无 | 是 | 用户id |
user_name | varchar | 20 | 无 | 是 | 用户名 |
password | varchar | 64 | 无 | 是 | 密码 |
nick_name | varchar | 64 | 无 | 是 | 用户昵称 |
head_image | varchar | 255 | 空 | 否 | 用户头像 |
head_image_thumb | varchar | 255 | 空 | 否 | 用户头像缩略图 |
sex | tinyint | 1 | 0 | 否 | 性别 0:男 1:女 |
type | smallint | 6 | 1 | 否 | 用户类型 1:普通用户 2:审核账户 |
signature | varchar | 1024 | 空 | 否 | 个性签名 |
last_login_time | datetime | 默认 | NULL | 否 | 最后登录时间 |
created_time | datetime | 默认 | NULL | 否 | 创建时间 |
# 3.2 好友关系模型设计
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码