问题 在做项目的时候经常会遇到这样的问题: 根据数据模型建立了数据库,但是数据库中却没有数据,在给客户做Demo的时候必须要一条一条的添加假数据,而且这些假数据还得像模像样的,不能乱输入,尽是看不出任何意义的“aaaaa”、“ttttttttttttt”、“123123”、“是打发斯蒂芬”这样的数据。 已经做好了一个系统,并且上线给部分客户使用了,现在要将该系统推广到所有的客户,所以需要做一个虚拟客户的系统,系统中需要有许多像样的数据,但是由于保密方面的原因,原有客户的数据必须经过处理,不能出现真实的信息。 系统开发完成了,需要制造大量的假数据,以进行压力测试,看在有几百万上千万数据量的情况下的系统性能。 方案 其中要生成大量的没意义的测试数据,以便进行压力测试,这个数据是最好生成的,只需要写几条SQL语句,多运行几次即可。如果不想写SQL语句,也可以使用数据生成工具:VisualStudio、PowerDesigner、DataFactory等都可以使用。我推荐使用DataFactory,有较强的定制性。 下面主要说一下另外一种假数据,那就是前面2种情况,具有一定业务规则和可读性的假数据。要生成比较像样的假数据主要是基于已有的系统,在真实数据的基础上进行随机的混淆和交叉,从而产生大量看起来比较真实但是实际上却全是假的数据。对于第一种情况,可以将其他系统中的对应实体表的数据导入到Demo环境中,然后再进行混淆交叉。 我们可以将系统中的数据分为:数字、日期和字符串3种类型分别进行混淆。 数字类型的数据混淆最简单,使用随机函数RAND()即可,如果是整数则可以再乘以一个系数后取整,也可以用原来的数据加上生成的随机数,从而使得数据的范围保持在原真实数据相同的分布。比如有Revenue字段,是从客户处的收入,大客户和小客户参数的收入数不能完全随机,可以在原有Revenue的基础上随机增加10000以内的数即可:Revenue+RAND()*10000 日期类型的数据混淆可以在原日期或者当前日期的基础上加减一个随机的天数形成,使用DATEADD()函数和RAND()函数即可。比如生成随机的最近100天内的日期:DATEADD("day",0-RAND()*100,GETDATE()) 字符串类型的数据混淆最为复杂,因为字符串具有很明确的意义,比如名字字段、公司名字段等,如果随机的生成字符将没有任何意义。这时可以考虑将字符串拆分成两部分然后进行交叉组合,用随机的交叉组合来代替真是的数据。比如原来的姓名是:李宇春、曾轶可、刘著,经过交叉组合就会形成:李著、曾宇春、刘轶可之类的组合。 姓名的拆分是分为姓和名,而公司的拆分可以拆分成前2个字和后面的字。如果是英文姓名或者英文公司名则可以按照第一个空格将英文字符串拆分成第一个单词和后面的单词。然后将产生的两个字段存入临时表,用两个临时表进行交叉联接,得到两个字段的所有组合,然后再随机选出一定条数的数据,用选出的随机数据将原有数据替换即可。 示例 以一个HR系统为例。假设其中有一个Employee表,该表记录了员工的工号、姓名等信息,现在要对姓名进行处理,具体操作如下: 1.区分出中文名和英文名,分别进行拆分。中文姓名以第一个字为A列,剩下的字尾B列,英文名以第一个单词为A列,剩下的单词为B列,将拆分的数据存入临时表,具体SQL语句如下: select SUBSTRING(Name,1,1) A,SUBSTRING(Name,2,10) B into #CName from Employee where UNICODE( Name)>255 --中文 select Name,SUBSTRING(Name,1,CHARINDEX(' ',Name,1)) A,SUBSTRING(Name,CHARINDEX(' ',Name,1),50) B into #EName from Employee where UNICODE( Name)255 --中文 4.更新Employee表中的姓名字段为随机生成的姓名: update Employee set Name=n.Name from Employee e inner join #newEmployeeID i on e.EmployeeId=i.EmployeeID inner join #newCName n on i.ID=n.ID where UNICODE(e.Name)>255 --只更新中文姓名 5.用同样的方法,可以对英文姓名进行混淆交叉替换。 优化 这里需要注意的是第2步,使用了CROSS JOIN操作,也就是求两个表的笛卡尔积,如果一个表中有10W条数据,那么将会产生100亿行结果,然后再进行排序,那将是近乎不可能完成的任务,所以必须减少进行笛卡尔积的表的数据量,比如每个表只取500条不重复的数据,那么修改后的SQL语句是: select top 5000 n1.A+n2.B from (select distinct top 500 A from #CName )n1 --取不重复的500个姓 cross join (select distinct top 500 B from #CName ) n2--取不重复的500个名 order by NEWID() --随机选取行 这样最多只是500*500条记录,进行排序选取随机行将会很快完成。
- 浏览: 99209 次
- 性别:
- 来自: 北京
最新评论
-
liusong6196:
...
Oracle连接查询,子查询(相关子查询,嵌套子查询) -
happybine:
以前从来没有觉得,有必要使用团队协作的工具,平时用邮件+QQ, ...
团队协作平台
相关推荐
龙龙老师教程gan,wgan 280M训练数据集,二次元头像,一共280M,原来的baidupan里的失效了。
点目标的高分辨一维距离像的仿真程序,代码中会生成回波数据。
生成动漫头像的可运行代码,可自主训练,内含已训练出的模型和五万张动漫图像数据集
这是一个仿照Mock.js语法的Java语言使用的假数据生成工具框架。 部分方法与类介绍详细可查看JavaDoc文档(推荐先下载下来再看): 码云生成的在线javaDoc文档: 如果存在BUG或者有什么意见、建议,可以通过 issue 进行...
包含51223张网络爬取的二次元头像,数据做了裁剪,只保存了人物的头像部分。 可以用作GAN数据集
当用户没有上传头像时,像钉钉app一样可以根据用户名字生成用户名后两位的默认头像,颜色大小都可在工具类里自定义
该数据集为动漫人物头像数据集,一共有21511个动漫人物头像,供大家使用。 可以用于训练GAN,DCGAN等一系列的生成对抗神经网络的实验。具体实验方法已经更新,大家可以点击我的主页进行查看,pytorch 使用DCGAN生成...
pytorch学习练手项目 pytorch版本DCGAN生成二次元头像, 包含源码训练测试代码,以及训练数据和训练权重
为任何东西(不仅仅是用户)生成伪随机SVG头像
使用Wgan生成二次元人物头像,train部分代码写的不全,自己根据需求补就行了,数据就使用李宏毅网课上提供的数据,太大了上传不了,网络使用的是DenseNet
基于pythonGAN的动漫头像生成源码+数据集+预训练模型.zip
是一个动漫头像的数据集,可以利用GAN来训练学习。如Tensorflow中的DCGAN
AI插画师:生成对抗网络数据集。数据集包含有6万多张二次元妹子的头像。
学习雷达系统课程,根据雷达数据,生成物体二维像。
国庆头像生成.zip
2014中华架构师大会材料 大数据,用户画像,机器学习,数据挖掘
通过序列号生成树形结构数据、代码实现
微信小程序使用echarts,实现左右双Y轴,动态获取数据,生成折线图 本来使用的是wxcharts,但发现实现不了左右双y轴的效果,就换成echarts 要实现这样的效果,需要以下几步: (1)去github下载插件,放进自己的...
java向EXCEL中写入数据。里面有一个ExcelWrite.java的文件和一个jxl的jar包。
我们正在寻找一种更像黑客的方式来查看数据,所以我们建立了一个。 Redash 旨在允许快速轻松地访问数十亿条记录,我们使用 Amazon Redshift(“说”PostgreSQL 的“PB 级数据仓库”)处理和收集这些记录。 如今,...