0

私は、異なるスキーマを持つ異なるデータベースに2つのテーブルがあるプロジェクトに取り組んでいます。つまり、JDBCを使用して接続する2つのテーブルに2つの異なる接続パラメーターがあることを意味します-

以下がconfig.propertyファイルであると仮定しましょう。このファイルでtable1.percentage80%、時間の平均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です。

4

1 に答える 1

1

A を 80% の確率で選択し、B を平均 20% の確率で選択する場合は、0 (含む) から 100 (含まない) の間の乱数を選択するだけです。数が 80 未満の場合は A を選択し、それ以外の場合は B を選択します。

それと同じくらい簡単です。

于 2013-02-28T22:52:32.450 に答える