IM 开源项目 群组服务 数据库设计 (01)
来源:互联网 发布:重庆大学网络自助 编辑:程序博客网 时间:2024/06/05 05:42
废话不说,直接上表
列名
说明
类型
长度
是否主键
可否为空
描述
p_group_id
群组ID
Bigint
20
Yes
No
p_group_creater_id
创建者ID
Bigint
20
No
p_group_create_datetime
创建时间
Bigint
20
No
p_group_statu
状态
Tinyint
20
No
1 表名 t_group_base_property “群组基本信息”
其中 p_change_type 1 表增加;2 表修改 3 表删除
p_group_statu 1 可用; 2 不可用(例如被禁用的群) 后续会增加类型
列名
说明
类型
长度
是否主键
可否为空
描述
p_change_id
递增ID
bigint
20
Yes
No
p_group_id
群组ID
bigint
20
No
p_change_type
变化类型
tinyint
4
No
1 ,2, 3
p_group_creater_id
创建者ID
Bigint
20
No
p_group_create_datetime
创建时间
Bigint
20
No
p_group_change_datetime
变化时间
Bigint
20
No
p_group_statu
状态
Tinyint
20
No
2. 表名 t_group_base_property_change “群组基本信息变化表
列名
说明
类型
长度
是否主键
可否为空
描述
p_group_id
群组ID
bigint
20
Yes
No
p_group_owner_uid
群主ID
bigint
20
No
p_group_level
等级
Int
11
No
p_group_parents_type
父类型
int
11
No
p_group_child_type
子类型
int
11
No
p_group_name
名称
varchar
20
No
p_group_announcement
公告
varchar
50
Yes
p_group_description
描述
varchar
50
Yes
p_group_join_type
加入类型
tinyint
4
No
3. 表名 t_group_dynamic_property “群组动态信息表”
其中 p_group_parents_type EG:技术联盟 p_group_child_type EG: 软件交流 需配类型表
列名
说明
类型
长度
是否主键
可否为空
描述
p_change_id
递增ID
bigint
20
Yes
No
p_group_change_type
变化类型
smallint
6
No
p_group_change_datetime
变化时间
bigint
Bigint
No
p_group_id
群组ID
bigint
20
No
p_group_owner_uid
群主ID
bigint
20
No
p_group_level
等级
Int
11
No
p_group_parents_type
父类型
int
11
No
p_group_child_type
子类型
int
11
No
p_group_name
名称
varchar
20
No
p_group_announcement
公告
varchar
50
Yes
p_group_description
描述
varchar
50
Yes
p_group_join_type
加入类型
tinyint
4
No
4. 表名 t_group_dynamic_property “群组动态信息变化表”
以上表是固定表,存储过程太简单就不列在这里了
列名
说明
类型
长度
是否主键
可否为空
描述
p_group_id
群组ID
bigint
20
Yes
No
p_group_member_id
成员ID
bigint
20
Yes
No
p_group_member_identity
成员身份
smallint
6
No
p_group_member_join_datetime
加入时间
bigint
20
No
5.表名 t_group_member_... “群组成员表”
群组成员表是横向分表的一系列表,通过存储过程动态创建,这样可以避免数据过大导致的效率问题,你懂的:)
同时配合它的还有 “群组成员变化表” t_group_member_change_...
列名
说明
类型
长度
是否主键
可否为空
描述
p_group_change_id
…
p_group_change_type
…
p_group_member_change_datetime
…
p_group_id
群组ID
bigint
20
Yes
No
p_group_member_id
成员ID
bigint
20
Yes
No
p_group_member_identity
成员身份
smallint
6
No
p_group_member_join_datetime
加入时间
bigint
20
No
针对其操作的存储过程主要有
pr_group_member_add
pr_group_member_del
pr_group_member_get
BEGIN-- =============================================-- 创 建 人: Snight-- 创建时间: 2012-02-20-- 功能描述: 增加新的群组成员,通过本存储过程,支持动态分表-- =============================================declarel_table_idint;-- 临时群组IDdeclarel_datetimebigint;-- 当前时间declarel_table_namevarchar(200);--表名setl_table_id =truncate(a_group_id/10000,0);--设定每10000个群组分表 精度保持哦setl_table_name='t_group_member_';--初始化表名setl_table_name= concat(l_table_name,cast(l_table_id AS char));--拼接目标表名seta_result = 1;--返回1 表示成功-- ------------------------------ 动态处理成员表------------------------------------------ if ( exists(select table_name from information_schema.tables where table_schema = 'db_im_group' and table_name = l_table_name) <=0 )thenset@l_sqlstr = concat('create table ',l_table_name,' (p_group_id bigint(20) not null ,' ,'p_group_member_id bigint(20) not null , ','p_group_member_identity smallint(6) not null ,','p_group_member_join_datetime bigint(20) not null ,','primary key(p_group_id, p_group_member_id));');prepare stmt from @l_sqlstr;execute stmt;end if;set l_datetime= timestampdiff(microsecond,'1970-01-01 08:00:00',now())/1000 ;set@l_sqlstr =concat( ' insert into ', l_table_name, ' (p_group_id, p_group_member_id, p_group_member_identity, p_group_member_join_datetime) ' , ' values(' , cast(a_group_id as char) , ',' , cast(a_group_member_id as char) , ',' , cast(a_group_member_identity as char) , ',' , cast(l_datetime as char) ,' );');prepare stmt from @l_sqlstr;execute stmt;-- ------------------------------ 动态处理成员表变化------------------------------------------setl_table_name='t_group_member_change_';--重置表名setl_table_name= concat(l_table_name,cast(l_table_id AS char));--拼接目标表名 if ( exists(select table_name from information_schema.tables where table_schema = 'db_im_group' and table_name = l_table_name) <=0 )thenset@l_sqlstr = concat('create table ',l_table_name,' (p_group_change_id bigint(20) AUTO_INCREMENT primary key ,' ,'p_group_change_type smallint(6) not null , ','p_group_idbigint(20) not null ,','p_group_member_id bigint(20) not null ,','p_group_member_identity smallint(6) not null ,','p_group_member_join_datetime bigint(20) not null ,','p_group_member_change_datetime bigint(20) not null, ','index idx_gid_uid(p_group_id , p_group_member_id) ',');');prepare stmt from @l_sqlstr;execute stmt;end if;set@l_sqlstr =concat( ' insert into ', l_table_name, ' (p_group_change_type, p_group_id, p_group_member_id , p_group_member_identity, p_group_member_join_datetime , p_group_member_change_datetime) ' , ' values(' , cast(1 as char) , ',' , cast(a_group_id as char) , ',' , cast(a_group_member_id as char) , ',' , cast(a_group_member_identity as char) , ',' , cast(l_datetime as char) , ',' , cast(l_datetime as char) ,' );');prepare stmt from @l_sqlstr;execute stmt;END
BEGIN-- =============================================-- 创 建 人: Snight-- 创建时间: 2012-02-22-- 功能描述: 删除群组成员-- =============================================declarel_table_idint;-- 临时群组IDdeclarel_datetimebigint;-- 当前时间declarel_table_namevarchar(200);--表名setl_table_id =truncate(a_group_id/10000,0);--设定每10000个群组分表 精度保持哦setl_table_name='t_group_member_';--初始化表名setl_table_name= concat(l_table_name,cast(l_table_id AS char));--拼接目标表名set@l_sqlstr =concat( ' delete from ', l_table_name, ' where p_group_id =' , cast(a_group_id as char) , ' and p_group_member_id = ',cast(a_group_member_id as char) ,' ;');prepare stmt from @l_sqlstr;execute stmt;-- ------------------------------ 动态处理成员表变化------------------------------------------setl_table_name='t_group_member_change_';--重置表名setl_table_name= concat(l_table_name,cast(l_table_id AS char));--拼接目标表名 if ( exists(select table_name from information_schema.tables where table_schema = 'db_im_group' and table_name = l_table_name) >=0 )thenset l_datetime= timestampdiff(microsecond,'1970-01-01 08:00:00',now())/1000 ;set@l_sqlstr =concat( ' insert into ', l_table_name, ' (p_group_change_type, p_group_id, p_group_member_id , p_group_member_identity, p_group_member_join_datetime , p_group_member_change_datetime) ' , ' values(' , cast(2 as char) , ',' , cast(a_group_id as char) , ',' , cast(a_group_member_id as char) , ',' , cast(1 as char) , ',' , cast(l_datetime as char) , ',' , cast(l_datetime as char) ,' );');prepare stmt from @l_sqlstr;execute stmt;end if;
BEGIN-- =============================================-- 创 建 人: Snight-- 创建时间: 2012-02-20-- 功能描述: 获取成员记录集-- =============================================declarel_table_idint;-- 临时群组IDdeclarel_table_namevarchar(200);--表名setl_table_id =truncate(a_min_gid/10000,0);--设定每10000个群组分表 精度保持哦setl_table_name='t_group_member_';--初始化表名setl_table_name= concat(l_table_name,cast(l_table_id AS char));--拼接目标表名 if ( exists(select table_name from information_schema.tables where table_schema = 'db_im_group' and table_name = l_table_name) >=0 )thenset@l_sqlstr = concat('select p_group_id, p_group_member_id, p_group_member_identity, p_group_member_join_datetime from ',l_table_name,' where p_group_id>', cast(a_min_gid as char) ,' order by p_group_id limit ', cast(a_ret_cnt as char) , ';');prepare stmt from @l_sqlstr;execute stmt;end if;END
BEGIN-- =============================================-- 创 建 人: Snight-- 创建时间: 2012-02-20-- 功能描述: 获取变化记录集-- =============================================declarel_table_idint;-- 临时群组IDdeclarel_table_namevarchar(200);--表名setl_table_id =truncate(a_min_change_id/10000,0);--设定每10000个群组分表 精度保持哦setl_table_name='t_group_member_change_';--初始化表名setl_table_name= concat(l_table_name,cast(l_table_id AS char));--拼接目标表名 if ( exists(select table_name from information_schema.tables where table_schema = 'db_im_group' and table_name = l_table_name) >=0 )thenset@l_sqlstr = concat('select p_group_change_id, p_group_change_type, p_group_id, p_group_member_id, p_group_member_identity, p_group_member_join_datetime, p_group_member_change_datetime from ',l_table_name,' where p_group_change_id>', cast(a_min_change_id as char) ,' order by p_group_id limit ', cast(a_ret_cnt as char) , ';');prepare stmt from @l_sqlstr;execute stmt;end if;END
- IM 开源项目 群组服务 数据库设计 (01)
- IM 开源项目 群组服务 数据库设计-数据库访问 (02)
- IM 开源项目 群组服务 数据库设计-数据库访问 (03)
- IM 开源项目 群组服务 数据库设计-数据库访问 (04)
- IM 开源项目 群组服务 数据库设计-数据库访问 (05)
- IM 开源项目 群组服务 缓存设计实现之 群组属性
- IM 开源项目 群组服务 缓存设计实现之 成员属性
- IM 开源项目(01 序)
- IM项目-数据库的开端
- IM项目-数据库的封装
- IM 开源项目 客户端UI框架 Direct UI(01)
- 一个IM开源项目LiteTalk
- IM开源项目 壮士征集贴
- IM 开源项目 登录服务器 <1>
- 开源的 IM 项目 Sealtalk
- 初步测试IM开源项目:TeamTalk
- IceWarp 即时通讯(IM)服务
- IceWarp 即时通讯(IM)服务
- java之初学习
- WinForm分页控件
- set::insert
- 看〈快乐的大脚〉
- find_first_of()和 find_last_of()
- IM 开源项目 群组服务 数据库设计 (01)
- 关于文件异常捕获--新手篇
- 『C程序设计』读书笔记
- Android 之 内存管理
- Sicily1031. Campus
- linux蓝牙配置
- 设置UIButton字体的大小
- (转)写代码如坐禅:你是哪一类程序员
- Temporary Variable in C++