--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Database.java 2015/02/10 11:03:44 2262 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Database.java 2015/02/10 16:27:15 2263 @@ -24,6 +24,8 @@ Connection conn; PreparedStatement saveStmt; + Adresse alleAdresser[]; + private HashMap bbCache = new HashMap(); public Database(SafeProperties conf) throws SQLException,IOException { @@ -172,7 +174,9 @@ return list; } + @Deprecated public Adresse[] hentDaekkedeAdresser( BoundingBox bbox) throws SQLException { + long start = System.currentTimeMillis(); String sql = "SELECT id,a.postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + "FROM fulddaekning.adressetabel a " + "LEFT JOIN bogleveringer.postnummerdistributor p on (a.postnr=p.postnr) " + @@ -194,29 +198,47 @@ stmt.setString(5, LookupMain.distributor); List list = hentAdresseListe( stmt ); + long stop = System.currentTimeMillis(); + logger.info("Elapsed DB: " + (stop - start)); return list.toArray( new Adresse[ list.size() ] ); } + public Adresse[] hentDaekkedeAdresserCache( BoundingBox bbox) { + long start = System.currentTimeMillis(); + ArrayList list = new ArrayList(); + for (Adresse a : alleAdresser) { + if ( a.latitude > bbox.latitudeMin && a.latitude< bbox.latitudeMax && a.longitude> bbox.longitudeMin && a.longitude < bbox.longitudeMax) { + list.add(a); + } + } + long stop = System.currentTimeMillis(); + logger.info("Elapsed cache: " + (stop - start)); + return list.toArray( new Adresse[ list.size() ] ); + } + public Adresse[] hentAlleDaekkedeAdresser() throws SQLException { - String sql = "SELECT id,a.postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + - "FROM fulddaekning.adressetabel a " + - "LEFT JOIN bogleveringer.postnummerdistributor p on (a.postnr=p.postnr) " + - "WHERE rute IS NOT NULL " + - "AND latitude IS NOT NULL " + - "AND longitude IS NOT NULL " + - "AND a.distributor = ? "; - - // Forward only + concur_read_only + fetchsize tvinger driver til at hente en række af gangen (bedre performance ved store result sets) - // Se http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html - //PreparedStatement stmt = conn.prepareStatement(sql); - PreparedStatement stmt = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); - stmt.setFetchSize(Integer.MIN_VALUE); - - stmt.setString(1, LookupMain.distributor); - - List list = hentAdresseListe( stmt ); - return list.toArray( new Adresse[ list.size() ] ); + if ( alleAdresser == null ) { + String sql = "SELECT id,a.postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + + "FROM fulddaekning.adressetabel a " + + "LEFT JOIN bogleveringer.postnummerdistributor p on (a.postnr=p.postnr) " + + "WHERE rute IS NOT NULL " + + "AND latitude IS NOT NULL " + + "AND longitude IS NOT NULL " + + "AND a.distributor = ? "; + + // Forward only + concur_read_only + fetchsize tvinger driver til at hente en række af gangen (bedre performance ved store result sets) + // Se http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html + //PreparedStatement stmt = conn.prepareStatement(sql); + PreparedStatement stmt = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); + stmt.setFetchSize(Integer.MIN_VALUE); + + stmt.setString(1, LookupMain.distributor); + + List list = hentAdresseListe( stmt ); + alleAdresser = list.toArray( new Adresse[ list.size() ] ); + } + return alleAdresser; }