1 2 3 package com.db4odoc.querymode; 4 5 import java.io.File ; 6 import com.db4o.Db4o; 7 import com.db4o.ObjectContainer; 8 import com.db4o.ObjectSet; 9 import com.db4o.config.QueryEvaluationMode; 10 import com.db4o.query.Query; 11 import com.db4o.tools.QueryStats; 12 13 14 15 public class QueryModesExample { 16 public final static String YAPFILENAME="formula1.yap"; 17 18 public static void main(String [] args) { 19 Db4o.configure().objectClass(Pilot.class).objectField("points").indexed(true); 20 testImmediateChanged(); 26 } 27 29 public static void fillUpDB(int pilotCount){ 30 new File (YAPFILENAME).delete(); 31 ObjectContainer db=Db4o.openFile(YAPFILENAME); 32 try { 33 for (int i=0; i<pilotCount;i++){ 34 addPilot(db,i); 35 } 36 } 37 finally { 38 db.close(); 39 } 40 } 41 43 private static void addPilot(ObjectContainer db, int points) { 44 Pilot pilot = new Pilot("Tester", points); 45 db.set(pilot); 46 } 47 49 public static void testImmediateQueries() { 50 System.out.println("Testing query performance on 10000 pilot objects in Immediate mode"); 51 fillUpDB(10000); 52 ObjectContainer db = Db4o.openFile(YAPFILENAME); 53 try { 54 db.ext().configure().queries().evaluationMode(QueryEvaluationMode.IMMEDIATE); 55 QueryStats stats = new QueryStats(); 56 stats.connect(db); 57 Query query = db.query(); 58 query.constrain(Pilot.class); 59 query.descend("points").constrain(99).greater(); 60 query.execute(); 61 long executionTime = stats.executionTime(); 62 System.out.println("Query execution time: " + executionTime); 63 } finally { 64 db.close(); 65 } 66 } 67 69 public static void testLazyQueries() { 70 System.out.println("Testing query performance on 10000 pilot objects in Lazy mode"); 71 fillUpDB(10000); 72 ObjectContainer db = Db4o.openFile(YAPFILENAME); 73 try { 74 db.ext().configure().queries().evaluationMode(QueryEvaluationMode.LAZY); 75 QueryStats stats = new QueryStats(); 76 stats.connect(db); 77 Query query = db.query(); 78 query.constrain(Pilot.class); 79 query.descend("points").constrain(99).greater(); 80 query.execute(); 81 long executionTime = stats.executionTime(); 82 System.out.println("Query execution time: " + executionTime); 83 } finally { 84 db.close(); 85 } 86 } 87 89 public static void testLazyConcurrent() { 90 System.out.println("Testing lazy mode with concurrent modifications"); 91 fillUpDB(10); 92 ObjectContainer db = Db4o.openFile(YAPFILENAME); 93 try { 94 db.ext().configure().queries().evaluationMode(QueryEvaluationMode.LAZY); 95 Query query1 = db.query(); 96 query1.constrain(Pilot.class); 97 query1.descend("points").constrain(5).smaller(); 98 ObjectSet result1 = query1.execute(); 99 100 Query query2 = db.query(); 101 query2.constrain(Pilot.class); 102 query2.descend("points").constrain(1); 103 ObjectSet result2 = query2.execute(); 104 Pilot pilotToDelete = (Pilot)result2.get(0); 105 System.out.println("Pilot to be deleted: " + pilotToDelete); 106 db.delete(pilotToDelete); 107 Pilot pilot = new Pilot("Tester",2); 108 System.out.println("Pilot to be added: " + pilot); 109 db.set(pilot); 110 111 System.out.println("Query result after changing from the same transaction"); 112 listResult(result1); 113 } finally { 114 db.close(); 115 } 116 } 117 119 public static void listResult(ObjectSet result) { 120 while(result.hasNext()) { 121 System.out.println(result.next()); 122 } 123 } 124 126 public static void testSnapshotQueries() { 127 System.out.println("Testing query performance on 10000 pilot objects in Snapshot mode"); 128 fillUpDB(10000); 129 ObjectContainer db = Db4o.openFile(YAPFILENAME); 130 try { 131 db.ext().configure().queries().evaluationMode(QueryEvaluationMode.SNAPSHOT); 132 QueryStats stats = new QueryStats(); 133 stats.connect(db); 134 Query query = db.query(); 135 query.constrain(Pilot.class); 136 query.descend("points").constrain(99).greater(); 137 query.execute(); 138 long executionTime = stats.executionTime(); 139 System.out.println("Query execution time: " + executionTime); 140 } finally { 141 db.close(); 142 } 143 } 144 146 public static void testSnapshotConcurrent() { 147 System.out.println("Testing snapshot mode with concurrent modifications"); 148 fillUpDB(10); 149 ObjectContainer db = Db4o.openFile(YAPFILENAME); 150 try { 151 db.ext().configure().queries().evaluationMode(QueryEvaluationMode.SNAPSHOT); 152 Query query1 = db.query(); 153 query1.constrain(Pilot.class); 154 query1.descend("points").constrain(5).smaller(); 155 ObjectSet result1 = query1.execute(); 156 157 Query query2 = db.query(); 158 query2.constrain(Pilot.class); 159 query2.descend("points").constrain(1); 160 ObjectSet result2 = query2.execute(); 161 Pilot pilotToDelete = (Pilot)result2.get(0); 162 System.out.println("Pilot to be deleted: " + pilotToDelete); 163 db.delete(pilotToDelete); 164 Pilot pilot = new Pilot("Tester",2); 165 System.out.println("Pilot to be added: " + pilot); 166 db.set(pilot); 167 168 System.out.println("Query result after changing from the same transaction"); 169 listResult(result1); 170 } finally { 171 db.close(); 172 } 173 } 174 176 177 public static void testImmediateChanged() { 178 System.out.println("Testing immediate mode with field changes"); 179 fillUpDB(10); 180 ObjectContainer db = Db4o.openFile(YAPFILENAME); 181 try { 182 db.ext().configure().queries().evaluationMode(QueryEvaluationMode.IMMEDIATE); 183 Query query1 = db.query(); 184 query1.constrain(Pilot.class); 185 query1.descend("points").constrain(5).smaller(); 186 ObjectSet result1 = query1.execute(); 187 188 Query query2 = db.query(); 190 query2.constrain(Pilot.class); 191 query2.descend("points").constrain(2); 192 ObjectSet result2 = query2.execute(); 193 Pilot pilot2 = (Pilot)result2.get(0); 194 pilot2.addPoints(22); 195 db.set(pilot2); 196 listResult(result1); 197 } finally { 198 db.close(); 199 } 200 } 201 } 203 | Popular Tags |