私は、異なるスキーマを持つ異なるデータベースに2つのテーブルがあるプロジェクトに取り組んでいます。つまり、JDBCを使用して接続する2つのテーブルに2つの異なる接続パラメーターがあることを意味します-
以下が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%
、それが選ぶべき時間table1
と20%
それが選ぶべき時間table2
です。