基于ORACLE数据库的海量数据脱敏方法与流程

文档序号:20686481发布日期:2020-05-08 18:52阅读:来源:国知局

技术特征:

1.一种基于oracle数据库的海量数据脱敏方法,其特征在于,包括如下步骤:

s1:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;

s2:根据表的数据量分配定义线程管道组数和线程数量;

s3:执行表的所有线程管道的线程从数据库的原表中抽取数据分片脱敏后加载到目标表中,完成数据脱敏。

2.如权利要求1所述的基于oracle数据库的海量数据脱敏方法,其特征在于,所述表的数据分片为均匀分片,具体包括:每个表单独使用oracle的sample()函数均匀取出表的n个物理存储地址rowid,物理存储地址的数量根据oracle的表大小动态修改,直到抽取到合适的rowid数量,然后将rowid排序后两两为一区间划分成多个分片,分片完成后,表的所有分片sql都放入该表的分片队列;如果表为普通表,则对表进行一次分片,如果是分区表,则对表的每个分区都进行一次分片。

3.如权利要求2所述的基于oracle数据库的海量数据脱敏方法,其特征在于,所述表数据进行分区切片后,对分片进行重新排序,把不同的分区映射到不同磁盘进行i/o平衡,使多个线程能轮询获取到不同分区的分片,多个线程同时操作不同的磁盘。

4.如权利要求1所述的基于oracle数据库的海量数据脱敏方法,其特征在于,所述步骤s2具体包括:

s21:根据表的数据量将表分为四类:分类一:数据量为0mb-10mb;分类二:数据量为10mb-1gb;分类三:数据量1gb-10gb;分类四,数据量大于10gb;

s22:根据表的数据量的分类给每个表分配合适的线程管道组数:分类一分配1组线程管道;分类二分配4组线程管道;分类三分配16组线程管道;分类四分配32组线程管道;

s23:分配的线程数量为线程管道的组数的3倍,所述线程分为抽取线程、脱敏线程和加载线程,每一组线程管道由对应设置的抽取线程、脱敏线程和加载线程组成,对应设置的抽取线程、脱敏线程和加载线程通过队列进行数据传递,组成一条串行的线程管道,所述抽取线程和脱敏线程通过管道队列一进行数据传递,所述脱敏线程和加载线程通过管道队列二进行数据传递。

5.如权利要求4所述的基于oracle数据库的海量数据脱敏方法,其特征在于,所述步骤s3中执行线程管道的线程具体包括:

s311:线程管道的抽取线程去分片队列里轮询取出分片sql来连接oracle数据库读取数据,将数据发送到管道队列一;

s312:线程管道的脱敏线程从管道队列一拉取数据,进行数据脱敏,将脱敏后数据传递到管道队列二;

s313:线程管道的加载线程从管道队列二拉取数据,再加载到目标数据表。

6.如权利要求5所述的基于oracle数据库的海量数据脱敏方法,其特征在于,所述步骤s313中数据加载是通过直通路径加载到目标数据表,插入的数据通过oracle程序全局区直接把数据格式化成oracle块,然后由普通的oracle服务器进程把数据块写入目标数据表,把数据直接插入到段的高水位以上;数据加载到目标数据表的过程中禁用日志,生成最少量的redo和undo,减少目标数据库的i/o。

7.如权利要求5所述的基于oracle数据库的海量数据脱敏方法,其特征在于,进行单表的脱敏时,所述步骤s3中直接执行该表分配定义的每个线程管道的线程进行数据的抽取、脱敏和加载。

8.如权利要求5所述的基于oracle数据库的海量数据脱敏方法,其特征在于,进行多表脱敏时,所述步骤s3中通过线程总调度器来调度线程来执行所有表的线程管道的线程进行数据的抽取、脱敏和加载,具体包括如下步骤:

s321:在线程总调度器中配置总线程管道数和总表数;

s322:线程总调度器将需要脱敏的所有表,按照数据量从大到小进行排序;

s323:将每个表分配定义的线程数量和线程管道组数交由线程总调度器保存,统一分配执行顺序;

s324:线程总调度器按照表的排序依次执行每个表的第一组线程管道的线程,然后按照表的排序依次执行每个表的第二组线程管道的线程,直到总线程管道数分配完毕;

s325:线程总调度器监听线程管道,如果有线程管道的线程执行完毕,继续按照步骤s324的顺序执行线程管道的线程进行数据的抽取、脱敏和加载,当线程总调度器监听到有表的所有线程管道的线程都执行完毕,那么线程总调度器给该表打上完成标记,直到所有表都打上完成标记,则完成所有表数据的脱敏。

9.如权利要求8所述的基于oracle数据库的海量数据脱敏方法,其特征在于,所述线程总调度器里存放有总管道数和总表数的配置值,所述总管道数和总表数的配置值通过主机cpu核心数和jvm内存大小计算得到或者根据任务指定。

10.如权利要求8所述的基于oracle数据库的海量数据脱敏方法,其特征在于,进行多表脱敏时,不同的表映射到不同表空间磁盘以平衡i/o,使多个线程能轮询获取到不同表的不同分区的分片,多个线程同时操作不同的磁盘。


技术总结
本发明公开了一种基于ORACLE数据库的海量数据脱敏方法,包括如下步骤:S1:根据数据库中需要脱敏的表的数据量,对每个表进行数据分片;S2:根据表的数据量分配定义线程管道组数和线程数量;S3:执行表的所有线程管道的线程从数据库的原表中抽取数据分片脱敏后加载到目标表中,完成数据脱敏。本发明通过表数据分片,分片均匀,提高数据抽取性能,实现高速数据抽取;通过直通路径加载,并采用禁用日志提高加载性能,实现单表下的高速数据加载;设置线程总调度器,实现线程动态分配提高加载性能,实现多表下的高速数据加载;全程脱敏都在内存中操作,保证数据不落地,确保数据不泄漏。

技术研发人员:程永新;宋辉;郭振宇
受保护的技术使用者:上海轻维软件有限公司
技术研发日:2019.12.27
技术公布日:2020.05.08
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1