posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Db4o查詢測試

          Posted on 2010-10-21 00:24 penngo 閱讀(1900) 評論(0)  編輯  收藏 所屬分類: Java
          在使用Db4o時做分頁時,做了個測試。分別對1000條、10000條、100000、300000條數據進行了插入和NQ、QBE查詢測試。
          public class Test {
              
          final static String DB4OFILENAME = "formula1.db";
               
          public static void main(String[] args) {
                   ObjectContainer db
          =Db4oEmbedded.openFile(Db4oEmbedded
                              .newConfiguration(), DB4OFILENAME);
                   
          try {
                       storePilots(db);
                       retrieveComplexNQ(db);
                   }

                   
          catch(Exception e){
                       e.printStackTrace();
                   }

                   
          finally {
                          db.close();
                      }

               }

               
               
          public static void storePilots(ObjectContainer db) {
                       
          long time = System.currentTimeMillis();
                      System.out.println(
          "插入100000條數據前內存:" + Runtime.getRuntime().totalMemory());
                      
          for(int i = 0; i < 100000; i++){
                          db.store(
          new Pilot("Michael Schumacher",100));
                      }

                      System.out.println(
          "插入100000條數據后內存:" + Runtime.getRuntime().totalMemory() 
                              
          + " 時間" + (System.currentTimeMillis() - time));
                  }

               
               
          public static void retrieveComplexNQ(ObjectContainer db) {
                   
          long time = System.currentTimeMillis();
                  System.out.println(
          "NQ查詢前內存:" + Runtime.getRuntime().totalMemory());
                  
          ///NQ方式不會把查詢到的數據加載到內存,分頁的話,可以用這個先查詢出結果集
                  List<Pilot> result=db.query(new Predicate<Pilot>() {
                      
          public boolean match(Pilot pilot) {
                          
          return true;
                      }

                  }
          );
                  System.out.println(
          "NQ查詢后內存:" + Runtime.getRuntime().totalMemory()
                          
          + " 時間" + (System.currentTimeMillis() - time));
                  time 
          = System.currentTimeMillis();
                  System.out.println(
          "QBE查詢前內存:" + Runtime.getRuntime().totalMemory());
                  ObjectSet result1
          =db.queryByExample(Pilot.class);
                  System.out.println(
          "QBE查詢后內存:" + Runtime.getRuntime().totalMemory()
                         
          + " 時間" + (System.currentTimeMillis() - time));
             }

          }

          public class Pilot {    
              
          private String name;
              
          private int points;  
              
              
          public Pilot(String name,int points) {
                  
          this.name=name;
                  
          this.points=points;
              }

                  
              
          public int getPoints() {
                  
          return points;
              }

              
              
          public void addPoints(int points) {
                  
          this.points+=points;
              }

              
              
          public String getName() {
                  
          return name;
              }

              
              
          public String toString() {
                  
          return name+"/"+points;
              }

          }

          //////1000條數據的測試結果
          插入1000條數據前內存:5177344
          插入1000條數據后內存:5177344 時間219
          NQ查詢前內存:5177344
          NQ查詢后內存:5177344 時間546
          QBE查詢前內存:5177344
          QBE查詢后內存:5177344 時間32

          //////10000條數據的測試結果
          插入10000條數據前內存:5177344
          插入10000條數據后內存:5177344 時間625
          NQ查詢前內存:5177344
          NQ查詢后內存:5177344 時間344
          QBE查詢前內存:5177344
          QBE查詢后內存:5177344 時間47

          //////100000條數據的測試結果
          插入100000條數據前內存:5177344
          插入100000條數據后內存:15978496 時間4743
          NQ查詢前內存:15978496
          NQ查詢后內存:15978496 時間297
          QBE查詢前內存:15978496
          QBE查詢后內存:22306816 時間312

          //////300000條數據的測試結果
          插入100000條數據前內存:5177344
          插入100000條數據后內存:55123968 時間14040
          NQ查詢前內存:55123968
          NQ查詢后內存:55123968 時間313
          QBE查詢前內存:55123968
          QBE查詢后內存:66650112 時間748

          結論,在數據量少時,使用QBE查詢比NQ查詢要快。可以使用NQ查詢做分頁處理,因為NQ并沒有把查詢結果的所有數據加載到內存中,查詢前后,內存都是沒有變化的。

          主站蜘蛛池模板: 来宾市| 资阳市| 英山县| 蕲春县| 安福县| 安多县| 深泽县| 东乌珠穆沁旗| 韶关市| 那坡县| 新蔡县| 巴彦县| 铅山县| 黑山县| 漾濞| 双桥区| 望城县| 安图县| 玛沁县| 岳阳市| 静海县| 拉孜县| 黎川县| 福海县| 克山县| 高密市| 资兴市| 临沧市| 维西| 新巴尔虎左旗| 武威市| 两当县| 平潭县| 连江县| 沭阳县| 濉溪县| 罗定市| 涟源市| 巩义市| 高碑店市| 石家庄市|