ファイルから約1,000000行のデータを読み取り、Javaを使用してデータベースにデータをアップロードする必要があります。以下は、要件の詳細と、私がすでに作成したソリューションの一部です。
ファイル(任意の形式のXML、フラットファイル、CSV)からデータを読み取ります。ファイル形式に応じて、クラスを初期化します(ファクトリパターンを使用)。テキストファイルの場合、BufferedReaderを使用してから、作成された各オブジェクト(employeeなど)をリストに追加します。同様に、XMLの場合、SAXParserを使用しており、1つのオブジェクトからデータを読み取った後、上記と同じようにリストに追加されます。
しかし、保存できないか、リストに1000000個のオブジェクトを保存する必要があると思います。したがって、ファイルが読み取られ、リストが特定のサイズに達したときに、データをデータベースに並列にフラッシュする必要があります。これは私が立ち往生しているところです。これはどのように処理する必要がありますか?リストサイズがたとえば1000に達すると、データベース内のデータを更新する並列スレッドを実行する必要があります。その間、ファイルを読み取るスレッドは待機する必要がありますか?DBは、任意のデータベースOracle/MSアクセスにすることができます。
以下は、テキストファイルを読み取っているコードです。
public class FlatFileLoader implements Loader {
@Override
public List<Employee> readData(String path) {
try {
List<Employee> personList = new ArrayList<Person>();
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String line=null;
while ((line = br.readLine()) != null) {
Employee person = scanLine(line, DataConstants.DELIMITER);
if(null != person)
personList.add(person);
}
br.close();
}
catch (IOException e) {
System.err.println(e);
}
return null;
}
private Employee scanLine(String recordLine, String delim) {
Employee person=null;
List data= new ArrayList();
StringTokenizer lineScanner = new StringTokenizer(recordLine, delim);
while (lineScanner.hasMoreElements()) {
String nextEle= (String) lineScanner.nextElement();
if(nextEle.equalsIgnoreCase("FIRST_NAME")){
break;
}
data.add(nextEle);
}
if(data.size() > 0){
DataUtil.populatedata(data);
}
return person;
}
}
メソッド
はオブジェクトDataUtil.populatedata(data)
を作成しEmployee
ます。では、DBのデータを更新するための呼び出しをどこに置くべきですか?上記のコードを改善するための提案も歓迎します。