j'ai écrit ci-dessous le programme pour y parvenir:La meilleure façon d'archiver (dans le fichier plat) puis purger les données énormes
try {
PreparedStatement statement = connection.prepareStatement(
"SELECT * FROM some_table some_timestamp<?)");
statement.setTimestamp(1, new java.sql.Timestamp(dt.getTime()));
ResultSet resultSet = statement.executeQuery();
CSVWriter csvWriter = new CSVWriter(new FileWriter(activeDirectory + "/archive_data" + timeStamp + ".csv"), ',');
csvWriter.writeAll(resultSet, true);
csvWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
// delete from table
try {
PreparedStatement statement = connection.prepareStatement(
"DELETE FROM some_table some_timestamp<?)");
statement.setTimestamp(1, new java.sql.Timestamp(dt.getTime()));
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
dbUtil.close(connection);
programme ci-dessus serait tout simplement fonctionner correctement pour un scénario moyen, mais je voudrais savoir comment puis-je améliorer ce programme qui:
fonctionne bien pour un million de disques sans surcharger le serveur d'application
Considérant qu'il y aurait beaucoup de dossiers obtenir inséré dans la même table au moment où ce programme s'exécute, comment puis-je assurer ce programme d'archives, puis purge exactement les mêmes dossiers.
Mise à jour: Je suis à l'aide openscv http://opencsv.sourceforge.net/
pourriez-vous ajouter le code CSVWriter? –
Est-il raisonnable de supposer que les lignes nouvellement insérées auront un horodatage supérieur à la valeur limite que vous utilisez pour votre exportation/purge? Si oui, alors cet aspect de votre question est un non-problème. –
@VladislavKysliy, j'ai ajouté la source pour l'opencsv. @ Gord Thomson, je vois de quoi tu parles. L'horodatage prendrait soin du point n ° 2. – JackSparrow