我们有一个每周生成1000万个随机数的过程,并将它们存储在数据库表(Oracle)中。 我们有下面的逻辑来创建给定范围的随机数字。我们保持生成号码的严格唯一性与先前生成的号码 (已在db表中)。在插入表 (异常情况下重新生成随机数)时,我们通过索引存储随机数和捕获异常的表列来实现此目的。完成这一过程需要将近一天的时间,并继续增加所需的处理时间。用数据库表生成唯一随机数
请帮助我们进行以下查询以改善此过程的性能。
- 任何可能的方法来改善我们的随机数生成算法?
- 任何可能性,以提高数据库的操作
的事情,我们尝试: 我们已经清除多达可以表数据。 对表格的批插入(2500条记录)已将该过程增加到3-4天,因为每个异常都会导致重新创建每批数字。 我们正在评估并行处理以获得一些改进。
int itemsInPack = 10000000;
int pinLength = 10;
int randomSeedByteCount = 10;
long lowerRangeValue = (long) Math.pow(10.0, (double) (pinLength - 1));
long higherRangeValue = 10 * lowerRangeValue;
long numberRange = higherRangeValue - lowerRangeValue;
SecureRandom secureRandomNumberGen = SecureRandom.getInstance("SHA1PRNG");
byte[] bytes = new byte[1024/8];
secureRandomNumberGen.nextBytes(bytes);
byte[] seed = secureRandomNumberGen.generateSeed(randomSeedByteCount);
secureRandomNumberGen.setSeed(seed);
for(int k=0;k<itemsInPack;k++){
double nextDouble = secureRandomNumberGen.nextDouble();
long fraction = (long)(numberRange * nextDouble);
long pinNumber = (long)(fraction + lowerRangeValue);//Insert this to table
System.out.println("pinNumber: " + pinNumber);
}
您不能在Oracle中使用存储过程来执行此操作吗?这似乎是最合适的方法? – RobAu
还有什么是随机数的用例? – RobAu
在数据库中,生成一个从最小值到最大值的数字列表 - 随机排序,然后获取前n行。 – MT0