Использование Java с JDBC
Запрос данных из базы данных postgres, в которой хранится информация о судне.
Я создаю объект судна из данных и добавляю координатные данные в список координат объекта судна.
Как выполнить итерацию с большой таблицей
ResultSet rs = stmt.executeQuery("SELECT mmsi, report_timestamp, position_geom, ST_X(position_geom) AS Long, "+
"ST_Y(position_geom) AS Lat FROM reports3 WHERE position_geom IS NOT NULL ORDER by report_timestamp ASC");
TreeMap <Long, Vessel> vessels = new TreeMap<Long, Vessel>();
long startTime2 = System.nanoTime();
while(rs.next()){
long mmsi = rs.getLong("mmsi");
java.util.Date time = rs.getTime("report_timestamp");
double longitude = rs.getDouble("Long");
double latitude = rs.getDouble("Lat");
Coordinate coordinate = new Coordinate(longitude, latitude, time);
Vessel vessel = new Vessel(mmsi);
if(!vessels.containsKey(mmsi)) { //if vessel is not present in vessels
vessel.addCoor(coordinate);
vessels.put(mmsi, vessel);
}
else { //if vessel is already in vessels
vessels.get(mmsi).addCoor(coordinate);
}
}
Так я работаю с таблицей, которая содержит миллиард строк, и это будет невозможно сохранить, что многие объекты судов на моей машине.
Мне интересно, как проходить через базу данных, запросив 1000 000 строк за раз с каждой итерацией. У меня будет достаточно информации для запуска некоторых методов и хранения важных ключей, затем очистите карту деревьев сосудов и запустите следующие 1 000 000 строк ,
Первое, что вам нужно сделать, это настроить драйвер, чтобы не буферизовать полный результат в памяти: https://jdbc.postgresql.org/documentation/94/query.html#query -with-cursor –
** Невозможно сохранить много объектов судна на моей машине ** - Если это ваша настоящая проблема ... тогда почему бы не определить требуемые операции в хранимой процедуре и после этого получить ограниченные данные. – Rajesh