Tengo una aplicación de servidor de Java que descarga archivos CSV y los analiza. El análisis puede tomar de 5 a 45 minutos, y ocurre cada hora. Este método es un cuello de botella de la aplicación, por lo que no es una optimización prematura. El código hasta ahora:Análisis de CSV rápido
client.executeMethod(method);
InputStream in = method.getResponseBodyAsStream(); // this is http stream
String line;
String[] record;
reader = new BufferedReader(new InputStreamReader(in), 65536);
try {
// read the header line
line = reader.readLine();
// some code
while ((line = reader.readLine()) != null) {
// more code
line = line.replaceAll("\"\"", "\"NULL\"");
// Now remove all of the quotes
line = line.replaceAll("\"", "");
if (!line.startsWith("ERROR"){
//bla bla
continue;
}
record = line.split(",");
//more error handling
// build the object and put it in HashMap
}
//exceptions handling, closing connection and reader
¿Existe alguna biblioteca que me ayude a acelerar las cosas? ¿Puedo mejorar el código existente?
¿Qué tan grande es el archivo? ¿Y has intentado perfilar tu código? Esto le dará su cuello de botella y una idea clara de dónde mejorar. No me sorprendería que sea su red el principal problema. También eche un vistazo a http://commons.apache.org/sandbox/csv/ en lugar de construir el analizador usted mismo. – joostschouten
Estoy creando perfiles en este momento y soy consciente de que gran parte del tiempo se debe a la conexión de red. Quiero mejorar el análisis primero porque con la red necesito cambiar la arquitectura. (Mi estimación es que un análisis más rápido puede mejorar el tiempo de carga en un 10-15%). –
Suena justo. Utilice un analizador csv, ya que estos ya están optimizados y es probable que se encuentre con problemas de escape e i18n en el camino que no quiere preocuparse. Buena suerte. – joostschouten