通过生成随机数随机选择表格的百分比

时间:2013-02-28 22:36:50

标签: java random

我正在开发一个项目,其中我在具有不同模式的不同数据库中有两个表。这意味着我有两个不同的连接参数,用于使用JDBC连接这两个表 -

我们假设下面是config.property文件,其中table1.percentage表示80%时间table1将被选中20%时间table2将以随机数为基础。

TABLES: table1 table2

#For Table1
table1.percentage: 80    

#For Table2
table2.percentage: 20

下面的方法将阅读上面的config.property文件并为每个表创建一个ReadTableConnectionInfo对象。

private static HashMap<String, ReadTableConnectionInfo> tableList = new HashMap<String, ReadTableConnectionInfo>();

private static void readPropertyFile() throws IOException {

    prop.load(Read.class.getClassLoader().getResourceAsStream("config.properties"));

    tableNames = Arrays.asList(prop.getProperty("TABLES").split(" "));

    for (String arg : tableNames) {

        ReadTableConnectionInfo ci = new ReadTableConnectionInfo();

        double percentage = Double.parseDouble(prop.getProperty(arg + ".percentage"));

        ci.setPercentage(percentage);

    tableList.put(arg, ci);
    }
}

以下是ReadTableConnectionInfo类,它将保存特定表格的所有table connection info

public class ReadTableConnectionInfo {

    public String percentage;

    public double getPercentage() {
        return percentage;
    }

    public void setPercentage(double percentage) {
        this.percentage = percentage;
    }
}

现在在我的run方法中,每个线程必须生成随机数,然后根据每个表的百分比决定我需要使用哪个表。

private static Random random = new SecureRandom();


@Override
public run() {
  ...


  while ( < 60 minutes) {
    double randomNumber = random.nextDouble() * 100.0;
    ReadTableConnectionInfo tableInfo = selectRandomConnection(randomNumber);

    // do query...
  }
}


//Any problem with the below method?
private ReadTableConnectionInfo selectRandomConnection(double randomNumber) {
  double limit = 0;
  for (ReadTableConnectionInfo ci : tableLists.values()) {
    limit += ci.getPercentage();
    if (randomNumber < limit) {
      return ci;
    }
      }
    throw new IllegalStateException();
   }

问题陈述: -

我的selectRandomConnection方法有问题吗?因为每个线程只运行60分钟,每次运行60分钟,每次只选择table1

我正在寻找的是80%时间应该选择table120%时间选择table2

1 个答案:

答案 0 :(得分:1)

如果你想要80%的时间选择A,并且20%的时间选择B,平均只需选择0(含)和100(不包括)之间的随机数。如果数字是&lt; 80,选择A,否则选择B.

就这么简单。