我有一个由字符串和数字概率组成的数据库(还有其他列,但它们与问题无关)。一个简化的模式是
+-----------------------+----------------------+
| gopair | P_high |
+-----------------------+----------------------+
| GO:0000398_GO:0030540 | 0.275997567007171 |
| GO:0015198_GO:0016846 | 5.24489289777325e-06 |
| GO:0034649_GO:0072141 | 0.00338367340340417 |
| GO:0004303_GO:0031053 | 0.110417921058026 |
+-----------------------+----------------------+
在我的工作中,我运行一个脚本来查询数据库中与特定 GO 对关联的值。我需要证明我的结果与随机获得的结果不同。因此,我要运行的测试之一是对P_high
列进行洗牌,然后运行我的脚本并分析结果。
我试图洗牌输入文件并重新加载数据库,但这很复杂,因为有问题的输入文件是一个 7GB 的文本文件,在只有 3GB RAM 的机器上很难处理。
那么,有没有一种方法可以随机化数据库中的特定列,同时保持其余部分保持不变?
注意事项:
- 有问题的表很大(60,164,966 行)。
- 我不需要严格的数学随机性
- 我需要保持相同的频率。如果N对在真实数据库中具有P的概率,我需要N对在随机一对中具有P的概率。
- 我需要持久的解决方案。我的脚本可以多次查询数据库中的同一对,因此仅选择随机对是不够的。
- 我需要重复执行所有这些操作,因此首选可编写脚本(最好是 Perl)的解决方案。
- 我在 Ubuntu 服务器上使用 readline 6.1 为 debian-linux-gnu (x86_64) 运行 mysql Ver 14.14 Distrib 5.1.41。