We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本文原创,著作权归WGrape所有,未经授权,严禁转载
根据开发过程中遇到的实际场景,总结出开发环境中数据暴露出的以下问题
根据上述背景问题,从数据的生产、使用、销毁三个方面构成完整数据闭环,来提出完整的解决方案
通过问题思考,设计了如下《基于用户ID映射》的数据治理方案,最终基于此方案,实现了一款简单的命令行工具,通过 生产命令generate、查询命令query、转换命令mapping、销毁命令destroy ,最简单最高效的实现了一种粗粒度的对开发环境数据治理的方式
生产命令generate
查询命令query
转换命令mapping
销毁命令destroy
想象一下,如果在数据库中可以使用全局搜索和替换。首先使用 Control + F 搜索全局的某 Cid 后,并点击 Control + R 输入我们需要替换后的新 Cid ,最终回车确定进行全局替换,这样整个数据库中的目标 Cid 就变成了我们想要的 Cid。这就是基于用户ID映射的方式
先把线上数据脱敏导至开发环境中,或者直接使用测试环境自动化的数据,然后假设我们有一份如下图所示的用户CID映射关系,即表示下面的三个线上CID都需要转为我们开发环境中特定的某个CID
在确立上述映射关系后,通过程序再自动把所有开发环境中的CID都完成一次隐示转换,比如把所有 cid=[7686527, 8726352, 8623211] 的数据都转换为 cid=9876543 ,这样就完成了数据使用环节最重要的一个操作 :基于CID做数据转换
cid=[7686527, 8726352, 8623211]
cid=9876543
基于CID做数据转换
把数据治理分为生产、使用、销毁三个阶段,其中每个阶段都尽量简化操作流程。
基于上述最简化流程原则,就有了最终的简化版的解决方案《基于用户ID映射》,目前是一种粗粒度的简便高效的治理方式
设置全局数据治理的配置,配置项如下
<?php $config = [ 'cid_columns' => [ 'cid', 'customer_id', 'user_id', ], 'mapping' => [ // 旧cid => 替换后的新cid 6322317 => 1121446 ], 'tables' => [ // model名和表名不一致时,可以使用这种配置方式 model名 => 表名 'order' => 'business_order', // model名和表名一致时 'test_table', ], 'async_count' => [ // 表名 'table1' => 5000, 'table2' => 3000, 'table3' => 3000, ] ];
通过 php dev_governance generate 命令简单的拉线上数据到开发环境即可
php dev_governance generate
在数据的使用中,先使用 php dev_governance query 命令查询开发环境中所有Cid当前的角色信息,然后修改配置文件添加新的线上与线下Cid映射关系 。最后使用 php dev_governance mapping 命令,通过“用户替换”功能批量进行用户ID替换,实现线上数据的“开发环境私有化”
php dev_governance query
php dev_governance mapping
数据销毁分为定时销毁和手动销毁
当数据被大面积污染,但未到自动销毁时间时,可以进行一次手动销毁。除特殊极端情况外尽量不要手动销毁。
每月20日凌晨3点进行开发环境数据的定时销毁
此命令适用于生产阶段,在 config 配置的 tables 字段确认完所有需要拉线上数据的表后 ,即可执行
php dev_governance.php production generate
注意:每同步一张表数据之前,都会执行一次 Truncate Table
此命令适用于使用阶段,在 config 配置的 cid_columns 字段确认完所有用户ID字段 ,mapping 字段确认完所有 cid 映射关系后 ,即可执行
php dev_governance.php production mapping
注意:此命令在使用阶段可以无限次的执行,正如可以无限次使用全局替换命令一样,即可以先把cid=778866替换为668877,再把 668877恢复为778866
此命令适用于使用阶段,用于查询和统计本地当前数据库中cid所属的角色和环境
php dev_governance.php production query
注意:如在拉完线上数据,执行若干次mapping后,很难确认开发环境数据库中某个Cid是所属Prod环境还是所属DEV环境,不方便继续执行mapping,所以可以先执行一次query查询
此命令适用于销毁阶段,用于手动和自动销毁本地数据
php dev_governance.php production destroy
php xxx.php generate
php xxx.php mapping
在使用个人数据的同时,允许修改运营、产品、前端等非后端同事的数据
由于此情况无法避免,如产品验收、前端开发联调等情况,所以在非必须情况下尽量减少此情况发生
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
本文原创,著作权归WGrape所有,未经授权,严禁转载
一、背景
根据开发过程中遇到的实际场景,总结出开发环境中数据暴露出的以下问题
二、数据治理
根据上述背景问题,从数据的生产、使用、销毁三个方面构成完整数据闭环,来提出完整的解决方案
三、治理方案设计
通过问题思考,设计了如下《基于用户ID映射》的数据治理方案,最终基于此方案,实现了一款简单的命令行工具,通过
生产命令generate
、查询命令query
、转换命令mapping
、销毁命令destroy
,最简单最高效的实现了一种粗粒度的对开发环境数据治理的方式1、基于用户ID映射
(1) 什么是基于用户ID映射
想象一下,如果在数据库中可以使用全局搜索和替换。首先使用 Control + F 搜索全局的某 Cid 后,并点击 Control + R 输入我们需要替换后的新 Cid ,最终回车确定进行全局替换,这样整个数据库中的目标 Cid 就变成了我们想要的 Cid。这就是基于用户ID映射的方式
(2) 实现原理
先把线上数据脱敏导至开发环境中,或者直接使用测试环境自动化的数据,然后假设我们有一份如下图所示的用户CID映射关系,即表示下面的三个线上CID都需要转为我们开发环境中特定的某个CID
在确立上述映射关系后,通过程序再自动把所有开发环境中的CID都完成一次隐示转换,比如把所有
cid=[7686527, 8726352, 8623211]
的数据都转换为cid=9876543
,这样就完成了数据使用环节最重要的一个操作 :基于CID做数据转换
2、方案思想
把数据治理分为生产、使用、销毁三个阶段,其中每个阶段都尽量简化操作流程。
基于上述最简化流程原则,就有了最终的简化版的解决方案《基于用户ID映射》,目前是一种粗粒度的简便高效的治理方式
3、配置驱动
设置全局数据治理的配置,配置项如下
4、数据生产
通过
php dev_governance generate
命令简单的拉线上数据到开发环境即可5、数据使用
在数据的使用中,先使用
php dev_governance query
命令查询开发环境中所有Cid当前的角色信息,然后修改配置文件添加新的线上与线下Cid映射关系 。最后使用php dev_governance mapping
命令,通过“用户替换”功能批量进行用户ID替换,实现线上数据的“开发环境私有化”6、数据销毁
数据销毁分为定时销毁和手动销毁
(1) 手动销毁
当数据被大面积污染,但未到自动销毁时间时,可以进行一次手动销毁。除特殊极端情况外尽量不要手动销毁。
(2) 自动销毁
每月20日凌晨3点进行开发环境数据的定时销毁
7、命令支持
1、generate 命令
此命令适用于生产阶段,在 config 配置的 tables 字段确认完所有需要拉线上数据的表后 ,即可执行
注意:每同步一张表数据之前,都会执行一次 Truncate Table
2、mapping 命令
此命令适用于使用阶段,在 config 配置的 cid_columns 字段确认完所有用户ID字段 ,mapping 字段确认完所有 cid 映射关系后 ,即可执行
注意:此命令在使用阶段可以无限次的执行,正如可以无限次使用全局替换命令一样,即可以先把cid=778866替换为668877,再把
668877恢复为778866
3、query 命令
此命令适用于使用阶段,用于查询和统计本地当前数据库中cid所属的角色和环境
注意:如在拉完线上数据,执行若干次mapping后,很难确认开发环境数据库中某个Cid是所属Prod环境还是所属DEV环境,不方便继续执行mapping,所以可以先执行一次query查询
4、destroy 命令
此命令适用于销毁阶段,用于手动和自动销毁本地数据
四、最终实现
1、使用效果
2、使用中的问题
(1) 禁止修改后端同事数据
在使用个人数据的同时,允许修改运营、产品、前端等非后端同事的数据
(2) 尽量减少修改cid的情况
由于此情况无法避免,如产品验收、前端开发联调等情况,所以在非必须情况下尽量减少此情况发生
The text was updated successfully, but these errors were encountered: