Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java @ 8986:392bbcd8a88b
Database inserts accelerated by suppressing unnecessary database queries for new data series
author | mschaefer |
---|---|
date | Sun, 08 Apr 2018 18:07:06 +0200 |
parents | d9d2bd78eff6 |
children |
comparison
equal
deleted
inserted
replaced
8985:27851cfda84a | 8986:392bbcd8a88b |
---|---|
10 | 10 |
11 import java.util.ArrayList; | 11 import java.util.ArrayList; |
12 import java.util.List; | 12 import java.util.List; |
13 | 13 |
14 import org.apache.log4j.Logger; | 14 import org.apache.log4j.Logger; |
15 import org.dive4elements.river.importer.common.StoreMode; | |
16 import org.dive4elements.river.model.Porosity; | |
17 import org.dive4elements.river.model.River; | |
15 import org.hibernate.Query; | 18 import org.hibernate.Query; |
16 import org.hibernate.Session; | 19 import org.hibernate.Session; |
17 | |
18 import org.dive4elements.river.model.River; | |
19 import org.dive4elements.river.model.Porosity; | |
20 | 20 |
21 | 21 |
22 public class ImportPorosity { | 22 public class ImportPorosity { |
23 | 23 |
24 private static Logger log = Logger.getLogger(ImportPorosity.class); | 24 private static Logger log = Logger.getLogger(ImportPorosity.class); |
31 | 31 |
32 protected ImportTimeInterval timeInterval; | 32 protected ImportTimeInterval timeInterval; |
33 | 33 |
34 protected List<ImportPorosityValue> values; | 34 protected List<ImportPorosityValue> values; |
35 | 35 |
36 public ImportPorosity(String description) { | 36 protected StoreMode storeMode; |
37 | |
38 public ImportPorosity(final String description) { | |
37 this.description = description; | 39 this.description = description; |
38 this.values = new ArrayList<ImportPorosityValue>(); | 40 this.values = new ArrayList<>(); |
41 this.storeMode = StoreMode.NONE; | |
39 } | 42 } |
40 | 43 |
41 public String getDescription() { | 44 public String getDescription() { |
42 return description; | 45 return this.description; |
43 } | 46 } |
44 | 47 |
45 public void setDepth(ImportDepth depth) { | 48 public void setDepth(final ImportDepth depth) { |
46 this.depth = depth; | 49 this.depth = depth; |
47 } | 50 } |
48 | 51 |
49 public void setTimeInterval(ImportTimeInterval importTimeInterval) { | 52 public void setTimeInterval(final ImportTimeInterval importTimeInterval) { |
50 this.timeInterval = importTimeInterval; | 53 this.timeInterval = importTimeInterval; |
51 } | 54 } |
52 | 55 |
53 public void addValue(ImportPorosityValue value) { | 56 public void addValue(final ImportPorosityValue value) { |
54 values.add(value); | 57 this.values.add(value); |
55 } | 58 } |
56 | 59 |
57 public void storeDependencies(River river) { | 60 public void storeDependencies(final River river) { |
58 log.info("store dependencies"); | 61 log.info("store dependencies for '" + getDescription() + "'"); |
59 | 62 |
60 if (depth != null) { | 63 if (this.depth != null) { |
61 depth.storeDependencies(); | 64 this.depth.storeDependencies(); |
62 } | 65 } |
63 | 66 |
64 Porosity peer = getPeer(river); | 67 final Porosity peer = getPeer(river); |
65 | 68 |
66 if (peer != null) { | 69 if (peer != null) { |
67 log.info("store porosity values."); | 70 // log.info("store porosity values."); |
68 for (ImportPorosityValue value : values) { | 71 for (final ImportPorosityValue value : this.values) { |
69 value.storeDependencies(peer); | 72 value.storeDependencies(peer, this.storeMode); |
70 } | 73 } |
74 log.info("Porosity values processed: " + this.values.size()); | |
71 } | 75 } |
72 } | 76 } |
73 | 77 |
74 public Porosity getPeer(River river) { | 78 public Porosity getPeer(final River river) { |
75 log.info("get peer"); | 79 // log.info("get peer"); |
76 | 80 |
77 if (depth == null) { | 81 if (this.depth == null) { |
78 log.warn("cannot store porosity '" + description | 82 log.warn("cannot store porosity '" + this.description |
79 + "': no depth"); | 83 + "': no depth"); |
80 return null; | 84 return null; |
81 } | 85 } |
82 | 86 |
83 if (peer == null) { | 87 if (this.peer == null) { |
84 Session session = ImporterSession.getInstance() | 88 final Session session = ImporterSession.getInstance() |
85 .getDatabaseSession(); | 89 .getDatabaseSession(); |
86 | 90 |
87 Query query = session.createQuery("from Porosity where " | 91 final Query query = session.createQuery("from Porosity where " |
88 + " river=:river and " | 92 + " river=:river and " |
89 + " depth=:depth and " | 93 + " depth=:depth and " |
90 + " description=:description"); | 94 + " description=:description"); |
91 | 95 |
92 query.setParameter("river", river); | 96 query.setParameter("river", river); |
93 query.setParameter("depth", depth.getPeer()); | 97 query.setParameter("depth", this.depth.getPeer()); |
94 query.setParameter("description", description); | 98 query.setParameter("description", this.description); |
95 | 99 |
96 List<Porosity> porosity = query.list(); | 100 final List<Porosity> porosity = query.list(); |
97 | 101 |
98 if (porosity.isEmpty()) { | 102 if (porosity.isEmpty()) { |
99 log.debug("Create new Porosity DB instance."); | 103 log.debug("Create new Porosity DB instance."); |
100 | 104 |
101 peer = new Porosity(river, depth.getPeer(), | 105 this.peer = new Porosity(river, this.depth.getPeer(), |
102 description, timeInterval.getPeer()); | 106 this.description, this.timeInterval.getPeer()); |
103 | 107 |
104 session.save(peer); | 108 session.save(this.peer); |
109 this.storeMode = StoreMode.INSERT; | |
105 } | 110 } |
106 else { | 111 else { |
107 peer = porosity.get(0); | 112 this.peer = porosity.get(0); |
113 this.storeMode = StoreMode.UPDATE; | |
108 } | 114 } |
109 } | 115 } |
110 | 116 |
111 return peer; | 117 return this.peer; |
112 } | 118 } |
113 } | 119 } |
114 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 120 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |