comparison flys-backend/src/main/java/de/intevation/flys/importer/ImportWstColumnValue.java @ 478:db430bd9e0e0

Implemented a WstColumnValue cache to speed up inserting WST files into database. flys-backend/trunk@1734 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 20 Apr 2011 07:21:03 +0000
parents 29a408f80a89
children 67fd63e4ef66
comparison
equal deleted inserted replaced
477:0addc2663a4d 478:db430bd9e0e0
4 import de.intevation.flys.model.WstColumn; 4 import de.intevation.flys.model.WstColumn;
5 import de.intevation.flys.model.River; 5 import de.intevation.flys.model.River;
6 6
7 import java.math.BigDecimal; 7 import java.math.BigDecimal;
8 8
9 import org.apache.log4j.Logger;
10
9 import org.hibernate.Session; 11 import org.hibernate.Session;
10 import org.hibernate.Query;
11 12
12 import java.util.List; 13 import java.util.Map;
14
13 15
14 public class ImportWstColumnValue 16 public class ImportWstColumnValue
15 { 17 {
18 protected Logger logger = Logger.getLogger(ImportWstColumnValue.class);
19
16 protected BigDecimal position; 20 protected BigDecimal position;
17 protected BigDecimal w; 21 protected BigDecimal w;
18 protected ImportWstColumn wstColumn; 22 protected ImportWstColumn wstColumn;
23
24 protected Map<WstColumnValueKey, WstColumnValue> cache;
19 25
20 protected WstColumnValue peer; 26 protected WstColumnValue peer;
21 27
22 public ImportWstColumnValue() { 28 public ImportWstColumnValue() {
23 } 29 }
24 30
25 public ImportWstColumnValue( 31 public ImportWstColumnValue(
26 ImportWstColumn wstColumn, 32 ImportWstColumn wstColumn,
27 BigDecimal position, 33 BigDecimal position,
28 BigDecimal w 34 BigDecimal w,
35 Map<WstColumnValueKey, WstColumnValue> cache
29 ) { 36 ) {
30 this.wstColumn = wstColumn; 37 this.wstColumn = wstColumn;
31 this.position = position; 38 this.position = position;
32 this.w = w; 39 this.w = w;
40 this.cache = cache;
33 } 41 }
34 42
35 public BigDecimal getPosition() { 43 public BigDecimal getPosition() {
36 return position; 44 return position;
37 } 45 }
57 } 65 }
58 66
59 public WstColumnValue getPeer(River river) { 67 public WstColumnValue getPeer(River river) {
60 if (peer == null) { 68 if (peer == null) {
61 WstColumn c = wstColumn.getPeer(river); 69 WstColumn c = wstColumn.getPeer(river);
70
71 // check the cache before we fire a db query
72 WstColumnValue value = cache.get(new WstColumnValueKey(
73 c.getId(),
74 position.doubleValue(),
75 w.doubleValue()));
76
77 if (value != null) {
78 peer = value;
79 return peer;
80 }
81
62 Session session = Importer.sessionHolder.get(); 82 Session session = Importer.sessionHolder.get();
63 Query query = session.createQuery( 83 peer = new WstColumnValue(c, position, w);
64 "from WstColumnValue where " + 84 session.save(peer);
65 "wstColumn=:c and position=:p and w=:w"); 85
66 query.setParameter("c", c); 86 cache.put(new WstColumnValueKey(peer), peer);
67 query.setParameter("p", position);
68 query.setParameter("w", w);
69 List<WstColumnValue> values = query.list();
70 if (values.isEmpty()) {
71 peer = new WstColumnValue(c, position, w);
72 session.save(peer);
73 }
74 else {
75 peer = values.get(0);
76 }
77 } 87 }
88
78 return peer; 89 return peer;
79 } 90 }
80 } 91 }
81 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 92 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org