1.业务场景及痛点描述
当前随着业务发展,由于公司是做海外业务,公司前几年搭建了官网商城,并积累了一定的用户量,然后去年,由于公司发展智能机器人业务,开发了手机APP,供用户控制机器人,也积累了一定的用户,现在公司想要APP端接入商城业务,完成官网商城和APP端用户体系体系打通,建立统一用户中心,并且业务系统接入用户中心的过程中业务系统不能停机,业务不中断。
2. 统一用户中心数据设计
2.1 官网用户表结构(关键字段展示)
序号 | 字段名 | 字段类型 | 字段含义 |
1 | id | | |
2 | email | | 用户邮箱,可用户登录,可以为空 |
4 | user_login | | 用户账号,可用户登录 |
5 | .... | | |
6 | .... | | |
2.2 APP端用户表结构(关键字段展示)
序号 | 字段名 | 字段类型 | 字段含义 |
1 | id | | |
2 | email | | |
3 | app_version | | |
4 | os | | |
5 | last_login_time | | |
6 | ...... | | |
2.3 统一用户中心表接口设计(关键字段展示)
序号 | 字段名 | 字段类型 | 字段含义 |
1 | id | | |
2 | gw_user_id | | |
3 | app_user_id | | |
4 | user_login | | |
5 | email | | |
6 | app_version | | |
7 | os | | |
8 | last_login_time | | |
9 | row_key | | 标识当前行的唯一字段 |
10 | ...... | | |
3. 使用flInk cdc技术,进行数据持续迁移,让业务系统改造完美融合
3.1 创建官网用户数据同步任务,代码如下:
CREATE TABLE gw_user(
id bigInt,
user_login STRING,
password STRING,
email STRING,
PRIMARY KEY (id) NOT ENFORCED
) comment '官网用户信息'
WITH (
'connector'='mysql-cdc',
hostname'='xxx.xx.xxx.xx',
'port'='xx',
'username'='xx',
'password'='xxx',
'scan.startup.mode'='initial',
'database-name'='gw',
'table-name'='user'
);
CREATE TABLE user_center_user (
user_login STRING,
email STRING,
password STRING,
row_key STRING,
PRIMARY KEY (row_key) NOT ENFORCED
) comment 'sink app user'
WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://xx.xx.xx.xx:xxx/user_center?useUnicode=true&characterEncoding=UTF-8',
'driver' = 'com.mysql.cj.jdbc.Driver',
'username' = 'xxx',
'password' = 'xxx',
'table-name' = 'user'
);
insert into
user_center_user
select
user_login,
email,
password,
md5(user_login | email | source)
from gw_user;
3.2 创建APP用户数据同步任务,代码如下:
CREATE TABLE app_user(
id bigInt,
email STRING,
password STRING,
.....
PRIMARY KEY (id) NOT ENFORCED
) comment 'APP用户信息'
WITH (
'connector'='mysql-cdc',
hostname'='xxx.xx.xxx.xx',
'port'='xx',
'username'='xx',
'password'='xxx',
'scan.startup.mode'='initial',
'database-name'='app',
'table-name'='user'
);
CREATE TABLE user_center_user (
user_login STRING,
email STRING,
password STRING,
row_key STRING,
PRIMARY KEY (row_key) NOT ENFORCED
) comment 'sink app user'
WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://xx.xx.xx.xx:xxx/user_center?useUnicode=true&characterEncoding=UTF-8',
'driver' = 'com.mysql.cj.jdbc.Driver',
'username' = 'xxx',
'password' = 'xxx',
'table-name' = 'user'
);
insert into
user_center_user
select
user_login,
email,
password,
md5(user_login | email | source)
from app_user;
4. 总结
当前这里只描述了数据同步相关的设计,更多业务处理还是需要各个自己修改适配。