2014-08-28 78 views
0

我有一个具有1600万(ish)记录的DEV DB。我需要'掩饰'个人数据列(名称,地址,电话等)。我发现了一个很好的功能,可以很好地完成数据屏蔽Howto generate meaningful test data using a MySQL functionMYSQL屏蔽更新大数据库上的数据非常慢

问题是,当我调用函数时,它每秒只能处理约30条记录。 这是减慢的方法。

有没有办法加快速度。也许创建一个临时表或其他东西。

这是调用该函数的UPDATE语句。

UPDATE table1 
     SET first_name = (str_random('Cc{3}c(4)')), 
     last_name = (str_random('Cc{5}c(6)')), 
     email = (str_random('c{3}c(5)[.|_]c{8}c(8)@[google|yahoo|live|mail]".com"')), 
     address1 = (str_random('d{3}d{1} Cc{5} [Street|Lane|Road|Park]')), 
     city = (str_random('Cc{5}c(6)')), 
     state = (str_random('C{2}')), 
     zip = (str_random('d{5}-d{4}')) 

谢谢!

+0

任何随机事件在MySQL中本质上都很慢。就我所知,没有什么可以加快速度的。 – ydaetskcoR 2014-08-28 19:13:14

+0

也许程序性地而不是随机地生成项目? – 2014-08-28 19:18:02

+0

是暗影,这是正确的。 – GreetRufus 2014-08-28 19:18:43

回答

0

而不是调用一个7 * 16m的随机函数,如果您使用程序生成的文本进行操作,它可能会更快。

我检出了你链接到的str_random函数。 (这是非常聪明的btw - 很酷的东西)

它为字符串中的每个随机字符调用一次RAND(),每次你说“从列表中选择”时调用一次。这是很多的分歧。

我认为改进它的一种方法是创建并缓存(在一个表中)一大组随机字符,而不是为5个随机字符调用rand(比如说)5次,调用它来确定一个偏移量到随机垃圾的大字符串中,然后只增加它用来从字符串中拉出的索引......(如果它需要一行一堆 - 它可以一次将它们全部拖入一行并多次增加偏移量)

父函数调用的str_random_character函数可以替换为执行此操作的某个函数,而不是将rand函数调用到数组中。

这是一个超出我的代码,但它可能会让你(或更好的mysql大师)在加速这只小狗(也许)的道路上有点超出我。


不同的选项会,而不是随机屏蔽所有的数据...你以某种方式转换数据?既然你不需要原始的背景,你可以在数据的每个字符上做一些凯撒密码,这是基于一个(单个)rand调用旋转计数。 (如果分别旋转每个字符串中的鞋帮,鞋底和数字,数据将保持“正常”,尽管由于随机旋转不易翻转) - 我不会在它上面打一个SECURE贴纸,但它会要快很多,而不是容易反转。

我想我有一个凯撒旋转器,它可以在某个地方做到这一点。

+0

我希望看到凯撒密码。更新已经运行了23个小时.....呃....... – GreetRufus 2014-08-29 12:52:49