我有以下設計問題,希望得到您的幫助來解決。 下面的代碼是什麼樣子我可以使用什麼數據結構或設計模式來解決此問題
class DataProcessor{
public List<Record> processData(DataFile file){
List<Record> recordsList = new ArrayList<Record>();
for(Line line : file.getLines()){
String processedData = processData(line);
recordsList.add(new Record(processedData));
}
}
private String processData(String rawLine){
//code to process line
}
}
class DatabaseManager{
saveRecords(List<Record> recordsList){
//code to insert records objects in database
}
}
class Manager{
public static void main(String[] args){
DatabaseManager dbManager = new DatabaseManager("e:\\databasefile.db");
DataFile dataFile = new DataFile("e:\\hugeRawFile.csv");
DataProcessor dataProcessor = new DataProcessor();
dbManager.saveRecords(dataProcessor.processData(dataFile));
}
}
一個簡單的外觀正如你所看到的,階級的「過程數據」方法「數據處理器」採用數據文件的對象,處理整個文件,創建記錄對象的每一行,然後它返回一個「記錄」對象列表。
我與「processData」方法的問題:當原始文件非常龐大時,「記錄列表」對象佔用大量內存,有時程序失敗。我需要更改當前的設計,以便將內存使用量降至最低。 「DataProcessor」不應直接訪問「DatabaseManager」。 我正在考慮將隊列傳遞給「processData」方法,其中一個線程運行「processData」方法在隊列中插入「Record」對象,而另一個線程從隊列中移除「Record」對象並將其插入到數據庫中。但我不確定這個問題的性能問題。
請您詳細說明一下嗎? DatabaseManager使用SQLite的JDBC接口,以及簡單的準備好的語句,其中我從「Record」對象中獲取值並將它們放入「insert」語句中,然後執行此插入語句。 –
這裏是一個例子:https://tododev.wordpress.com/2014/08/14/creating-and-object-stream-from-a-jdbc-resultset/ –