Rapide CSV analyse

J'ai un serveur java app télécharger le fichier CSV et l'analyse. L'analyse peut prendre de 5 à 45 minutes, et se produit à chaque heure.Cette méthode est un goulot d'étranglement de l'application de sorte qu'il n'est pas prématuré d'optimisation. Le code pour l'instant:

        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

Est-il une bibliothèque existante qui pourrait m'aider à accélérer les choses? Puis-je améliorer le code existant?

  • Quelle est la taille du fichier? Et avez-vous essayé de profilage de votre code? Cela vous donnera votre goulot d'étranglement et une idée claire d'où l'amélioration. Je ne serais pas surpris si c'est votre réseau est le premier problème. Aussi jeter un oeil à commons.apache.org/sandbox/csv en lieu et place de la construction de l'analyseur de vous-même.
  • Je suis de profilage, et je suis conscient que la grande partie du temps est causée par une connexion réseau. Je veux améliorer l'analyse tout d'abord parce qu'avec le réseau, j'ai besoin de changer l'architecture. (Mon estimation, qui est plus rapide que l'analyse peut améliorer le temps de chargement de 10 à 15%).
  • Juste des sons. Utilisez un csv analyseur ces sont optimisés déjà et vous êtes lié à courir dans l'évasion et de l'i18n questions en bas de la route qui vous ne voulez pas à s'inquiéter. Bonne chance.
  • Semble que la méthode actuelle est assez rapide il faut 2 secondes pour analyser un fichier donc au total avec tous les fichiers d'analyse prend moins de 1% ;/
  • Voir aussi stackoverflow.com/questions/3908012/parsing-csv-in-java
  • Aucune idée si c'est applicable pour votre domaine, mais je considère la création de scripts shell de base de traitement (par exemple, replaceAll dans votre code). SED / AWK sont en fait conçues pour ce genre de choses, ne pensez pas que vous pouvez obtenir beaucoup plus vite que ça. JVM serait alors "seulement" besoin d'analyser les pré-traitées les données. Mais encore une fois, cela peut ne pas être applicable.

InformationsquelleAutor Lukasz Madon | 2011-07-28