请选择 进入手机版 | 继续访问电脑版

默认
发表评论 13
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
请教一下后端IM群聊中,群组和群成员这个表该如何拆分和设计?
drop table if exists crazy_im_join_group;
create table crazy_im_join_group
(
    id            bigint primary key,
    userId        bigint not null comment '用户id',
    groupId       bigint not null comment 'id',
    alias         varchar(50) comment '备注',
    memberType    int    not null comment '类型',
    applyTime     bigint not null comment '申请时间',
    joinTime      bigint comment '加入时间',
    invitorUserId bigint comment '邀请人',
    mute          int    not null default 0 comment '是否被禁言',
    extension     json-- 扩展属性
) engine Innodb ,
  character set utf8mb4,
  collate utf8mb4_unicode_ci,
    comment '群成员表';
照用户id 拆分,但是会导致group查询成员问题,如果按照group分又会存在user查询群组问题 ,这个有何拆分方式建议?





即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:求助 IM开发
上一篇:求教IM未读消息计数在同一账号多端登录情况下的同步问题下一篇:浏览器跟后端要实现即时通信,只能使用websocket协议吗

本帖已收录至以下技术专辑

推荐方案
评论 13
毫无疑问肯定是要建两个表,一个群组表,一个群成员表,群组表跟群成员表是一对多的关系,没有什么好纠结的,这就是最佳实践。

另外,建议你设计数据库时,不要直接建表,去用一下 PowerDesigner 这样的工具,正规团队都会用这类工具去管理数据库设计,这样专业一点。
引用:JackJiang 发表于 2022-06-29 10:06
毫无疑问肯定是要建两个表,一个群组表,一个群成员表,群组表跟群成员表是一对多的关系,没有什么好纠结的 ...

感觉群组和成员表结构一样。
用户 加入了那些群,
这个群有那些用户。感觉表结构 区别不太大。
引用:crazyerror 发表于 2022-06-29 20:58
感觉群组和成员表结构一样。
用户 加入了那些群,
这个群有那些用户。感觉表结构 区别不太大。

你这是大学里数据库理论课没有认真学。。。
引用:JackJiang 发表于 2022-06-29 21:14
你这是大学里数据库理论课没有认真学。。。

楼主能否指点一下区别,没理解上去,谢谢。
引用:JackJiang 发表于 2022-06-29 21:14
你这是大学里数据库理论课没有认真学。。。

drop table if exists crazy_im_group;
create table crazy_im_group
(
    id                  bigint primary key,
    name                varchar(30) not null comment '名称',
    announcement        varchar(250) comment '群公告',
    introduce           varchar(250) comment '群简介',
    memberLimit         int         not null comment '最大成员数',
    verifyType          int         not null comment '加入方式',
    extension           json comment '扩展信息',
    serverExtension     json comment '服务器扩展配置',
    inviteMode          int         not null comment '谁可以邀请加入',
    beInviteMode        int         not null comment '邀请模式,被邀请者需要同意或不需要',
    updateMode          int         not null comment '群资料修改模式,群主管理员,还是所有人',
    extensionUpdateMode int         not null comment '群扩展字段修改模式',
    allMuteMode         int         not null comment '禁言模式',

    creatorUserId       bigint      not null comment '创建者',
    createTime          bigint      not null comment '创建时间',
    updateUserId        bigint comment '修改时间',
    updateTime          bigint comment '修改人',
    state               int default 0 comment '群状态,0:正常,1:解散',
    dissolutionUserId   bigint comment '解散者',
    dissolutionTime     bigint comment '解散时间'
) engine Innodb ,
  character set utf8mb4,
  collate utf8mb4_unicode_ci,
    comment '群组定义表';  这个是我暂时想到的群定义表
引用:JackJiang 发表于 2022-06-29 10:06
毫无疑问肯定是要建两个表,一个群组表,一个群成员表,群组表跟群成员表是一对多的关系,没有什么好纠结的 ...

我可能没表达清楚,如果使用上面的应该为群成员表,如果我想查询某个群有谁加入,和我加入了某个群,这个两个操作,如果对 这个表进行分表,按照群分表,或者按照用户分表,会导致,一个不满足。
引用:crazyerror 发表于 2022-06-30 08:27
我可能没表达清楚,如果使用上面的应该为群成员表,如果我想查询某个群有谁加入,和我加入了某个群,这个 ...

群是主表,群成员是子表,两个表通过join方式,可以很方便实现你的“我想查询某个群有谁加入”和“我加入了某个群”需求,你复习一下数据库理论
引用:JackJiang 发表于 2022-06-30 10:41
群是主表,群成员是子表,两个表通过join方式,可以很方便实现你的“我想查询某个群有谁加入”和“我加入 ...

我想咨询群成员表,如果要进行分表,按照什么维度拆分,有什么利弊
引用:crazyerror 发表于 2022-06-30 19:50
我想咨询群成员表,如果要进行分表,按照什么维度拆分,有什么利弊

先不说im系统里这些数据本身体量就不是特别大,其次,子表如果真要分表肯定是按群进行分表,不可能同一群的群成员还分在几个表里,那难度就大了
引用:JackJiang 发表于 2022-06-30 20:03
先不说im系统里这些数据本身体量就不是特别大,其次,子表如果真要分表肯定是按群进行分表,不可能同一群 ...

谢谢指导

弄俩不就行了,一个按照群分,方便大部分操作。
一个按照人分,查询当前人加入了哪些群组。
另外,假如一个人10个群,你有500w用户。也才5000w数据,加个索引,随便分一下就可以拉。
个人拙见~
引用:a835029688 发表于 2022-07-01 09:54
弄俩不就行了,一个按照群分,方便大部分操作。
一个按照人分,查询当前人加入了哪些群组。
另外,假如 ...

是可以两个表解决,但是又什么最优解呢?
引用:crazyerror 发表于 2022-07-02 00:34
是可以两个表解决,但是又什么最优解呢?

别纠结了。先实现了再说吧,等到用户量真的上去的时候,那时你技术也就更熟练了,自然有思路了。。。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部