comparison backend/src/main/java/org/dive4elements/river/importer/ImportHYK.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 4c3ccf2b0304
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.ArrayList;
12 import java.util.List;
13
14 import org.apache.log4j.Logger;
15 import org.dive4elements.river.importer.common.StoreMode;
11 import org.dive4elements.river.model.HYK; 16 import org.dive4elements.river.model.HYK;
12 import org.dive4elements.river.model.River; 17 import org.dive4elements.river.model.River;
13 18 import org.hibernate.Query;
14 import java.util.List;
15 import java.util.ArrayList;
16
17 import org.hibernate.Session; 19 import org.hibernate.Session;
18 import org.hibernate.Query;
19
20 import org.apache.log4j.Logger;
21 20
22 public class ImportHYK 21 public class ImportHYK
23 { 22 {
24 private static Logger log = Logger.getLogger(ImportHYK.class); 23 private static Logger log = Logger.getLogger(ImportHYK.class);
25 24
26 protected ImportRiver river; 25 protected ImportRiver river;
27 protected String description; 26 protected String description;
28 27
29 protected List<ImportHYKEntry> entries; 28 protected List<ImportHYKEntry> entries;
30 29
30 protected StoreMode storeMode;
31
31 protected HYK peer; 32 protected HYK peer;
32 33
33 public ImportHYK() { 34 public ImportHYK() {
34 entries = new ArrayList<ImportHYKEntry>(); 35 this.entries = new ArrayList<>();
36 this.storeMode = StoreMode.NONE;
35 } 37 }
36 38
37 public ImportHYK(ImportRiver river, String description) { 39 public ImportHYK(final ImportRiver river, final String description) {
38 this(); 40 this();
39 this.river = river; 41 this.river = river;
40 this.description = description; 42 this.description = description;
41 } 43 }
42 44
43 public ImportRiver getRiver() { 45 public ImportRiver getRiver() {
44 return river; 46 return this.river;
45 } 47 }
46 48
47 public void setRiver(ImportRiver river) { 49 public void setRiver(final ImportRiver river) {
48 this.river = river; 50 this.river = river;
49 } 51 }
50 52
51 public void addEntry(ImportHYKEntry entry) { 53 public void addEntry(final ImportHYKEntry entry) {
52 entries.add(entry); 54 this.entries.add(entry);
53 entry.setHYK(this); 55 entry.setHYK(this);
54 } 56 }
55 57
56 public void storeDependencies() { 58 public void storeDependencies() {
57 log.info("store HYK '" + description + "'"); 59 log.info("store HYK '" + this.description + "'");
58 getPeer(); 60 getPeer();
59 for (int i = 0, N = entries.size(); i < N; ++i) { 61 for (int i = 0, N = this.entries.size(); i < N; ++i) {
60 ImportHYKEntry entry = entries.get(i); 62 final ImportHYKEntry entry = this.entries.get(i);
61 log.info(" store km " + entry.getKm() + 63 log.info(" store km " + entry.getKm() +
62 " (" + (i+1) + " of " + N + ")"); 64 " (" + (i+1) + " of " + N + ")");
63 entry.storeDependencies(); 65 entry.storeDependencies();
64 } 66 }
65 } 67 }
66 68
67 public HYK getPeer() { 69 public HYK getPeer() {
68 if (peer == null) { 70 if (this.peer == null) {
69 River r = river.getPeer(); 71 final River r = this.river.getPeer();
70 Session session = ImporterSession.getInstance() 72 final Session session = ImporterSession.getInstance()
71 .getDatabaseSession(); 73 .getDatabaseSession();
72 Query query = session.createQuery( 74 final Query query = session.createQuery(
73 "from HYK where river=:river and description=:description"); 75 "from HYK where river=:river and description=:description");
74 query.setParameter("river", r); 76 query.setParameter("river", r);
75 query.setParameter("description", description); 77 query.setParameter("description", this.description);
76 List<HYK> hyks = query.list(); 78 final List<HYK> hyks = query.list();
77 if (hyks.isEmpty()) { 79 if (hyks.isEmpty()) {
78 peer = new HYK(r, description); 80 this.peer = new HYK(r, this.description);
79 session.save(peer); 81 session.save(this.peer);
82 this.storeMode = StoreMode.INSERT;
80 } 83 }
81 else { 84 else {
82 peer = hyks.get(0); 85 this.peer = hyks.get(0);
86 this.storeMode = StoreMode.UPDATE;
83 } 87 }
84 } 88 }
85 return peer; 89 return this.peer;
86 } 90 }
87 } 91 }
88 // 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