comparison backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.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 5e38e2924c07
children
comparison
equal deleted inserted replaced
8985:27851cfda84a 8986:392bbcd8a88b
6 * documentation coming with Dive4Elements River for details. 6 * documentation coming with Dive4Elements River for details.
7 */ 7 */
8 8
9 package org.dive4elements.river.importer; 9 package org.dive4elements.river.importer;
10 10
11 import java.util.List;
12
13 import org.dive4elements.river.importer.common.StoreMode;
14 import org.dive4elements.river.model.River;
15 import org.dive4elements.river.model.WstColumn;
11 import org.dive4elements.river.model.WstColumnQRange; 16 import org.dive4elements.river.model.WstColumnQRange;
12 import org.dive4elements.river.model.WstQRange; 17 import org.dive4elements.river.model.WstQRange;
13 import org.dive4elements.river.model.WstColumn; 18 import org.hibernate.Query;
14 import org.dive4elements.river.model.River;
15
16 import org.hibernate.Session; 19 import org.hibernate.Session;
17 import org.hibernate.Query;
18
19 import java.util.List;
20 20
21 public class ImportWstColumnQRange 21 public class ImportWstColumnQRange
22 { 22 {
23 protected ImportWstColumn wstColumn; 23 protected ImportWstColumn wstColumn;
24 protected ImportWstQRange qRange; 24 protected ImportWstQRange qRange;
25
26 protected StoreMode storeMode;
25 27
26 protected WstColumnQRange peer; 28 protected WstColumnQRange peer;
27 29
28 public ImportWstColumnQRange() { 30 public ImportWstColumnQRange() {
29 } 31 }
30 32
31 public ImportWstColumnQRange( 33 public ImportWstColumnQRange(
32 ImportWstColumn wstColumn, 34 final ImportWstColumn wstColumn,
33 ImportWstQRange qRange 35 final ImportWstQRange qRange
34 ) { 36 ) {
35 this.wstColumn = wstColumn; 37 this.wstColumn = wstColumn;
36 this.qRange = qRange; 38 this.qRange = qRange;
39 this.storeMode = StoreMode.NONE;
37 } 40 }
38 41
39 public ImportWstColumn getWstColumn() { 42 public ImportWstColumn getWstColumn() {
40 return wstColumn; 43 return this.wstColumn;
41 } 44 }
42 45
43 public void setWstColumn(ImportWstColumn wstColumn) { 46 public void setWstColumn(final ImportWstColumn wstColumn) {
44 this.wstColumn = wstColumn; 47 this.wstColumn = wstColumn;
45 } 48 }
46 49
47 public ImportWstQRange getQRange() { 50 public ImportWstQRange getQRange() {
48 return qRange; 51 return this.qRange;
49 } 52 }
50 53
51 public void setQRange(ImportWstQRange qRange) { 54 public void setQRange(final ImportWstQRange qRange) {
52 this.qRange = qRange; 55 this.qRange = qRange;
53 } 56 }
54 57
55 public WstColumnQRange getPeer(River river) { 58 public WstColumnQRange getPeer(final River river) {
56 if (peer == null) { 59 if (this.peer == null) {
57 WstColumn c = wstColumn.getPeer(river); 60 final WstColumn c = this.wstColumn.getPeer(river);
58 WstQRange q = qRange.getPeer(river); 61 final WstQRange q = this.qRange.getPeer(river);
59 Session session = ImporterSession.getInstance() 62 List<WstColumnQRange> cols;
60 .getDatabaseSession(); 63 final Session session = ImporterSession.getInstance()
61 Query query = session.createQuery( 64 .getDatabaseSession();
62 "from WstColumnQRange where " + 65 if (this.wstColumn.storeMode == StoreMode.INSERT)
63 "wstColumn=:c and wstQRange=:q"); 66 cols = null;
64 query.setParameter("c", c); 67 else {
65 query.setParameter("q", q); 68 final Query query = session.createQuery(
66 List<WstColumnQRange> cols = query.list(); 69 "from WstColumnQRange where " +
67 if (cols.isEmpty()) { 70 "wstColumn=:c and wstQRange=:q");
68 peer = new WstColumnQRange(c, q); 71 query.setParameter("c", c);
69 session.save(peer); 72 query.setParameter("q", q);
73 cols = query.list();
74 }
75 if ((cols == null) || cols.isEmpty()) {
76 this.peer = new WstColumnQRange(c, q);
77 session.save(this.peer);
78 this.storeMode = StoreMode.INSERT;
70 } 79 }
71 else { 80 else {
72 peer = cols.get(0); 81 this.peer = cols.get(0);
82 this.storeMode = StoreMode.UPDATE;
73 } 83 }
74 } 84 }
75 return peer; 85 return this.peer;
76 } 86 }
77 } 87 }
78 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 88 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org