Berkeley DB

41082 ワード

最近はBBBで何か書いて、テスト工程をたくさん書いています.下表を並べて,最近の考え方もはっきりしている.
1.追加レコードのオープン、レコードの照会、すべてのレコードの取得を含むBBBプログラムをテストします.mysqlにデータを転送
プログラムの不足、増加記録はkeyとvalueだけで、クエリー記録はkeyあるいは同時にkeyとvalueを制定して調べるだけで、すべての記録だけを取得して、一部の記録を取得していないで、mysqlを転送するのは比較的に大きいです
2.mysqlとBDBのデータ比較の挿入と選択.
Java仮想マシンのメモリが同じ条件の下で、mysqlがデータ量を挿入するのは比較的に大きい時メモリがあふれていることを報告して、BDBがデータの量を挿入するのはmysqlより大きいことができます.しかもスピードも速い.すべてのレコードmysqlを検索するのは非常に速く、BBBは相対的に遅く、hbaseは挿入レコードをテストしただけで、千のレコードを挿入するのは死ぬほど遅い.単一データ選択BDBはmysqlに対して絶対的な利点がある.
3.1のデータ転送mysqlを変更します.2台のパソコン、2つのBD+mysqlで行います.
大まかな流れは、1台のパソコンAにBDBがあり、もう1台のパソコンBにBDBとmysqlがあります.Aで採取したデータは、BDに格納される.それから自分で1つのファイルの発送するプログラムを书いてBDBをハードディスクの上での.jdbファイルは別のパソコンに送信されます.もう1台のパソコンは、BDで読み取る.jdbファイルはmysqlに書きます.動作効果は良好ですが、1千万本を直接挿入してBDに記録するよりも時間がかかります.今は応用分野を見ていません.
4.シリアル化ストレージ.学生情報をBBBで記憶することを実現
5.BBBカーソルの使用.getSearchKey,getSearchBoth,getSearchKeyRange,getSearchBothRange関数を比較します.最後にkeyのあいまいなクエリーを書きました.
以上は基本的に1週間で学んだBerkeley DBに関する知識です.
 
getSearchKey,getSearchBoth,getSearchKeyRange,getSearchBothRangeコントラストプログラム
  1 import java.io.File;

  2 import java.io.UnsupportedEncodingException;

  3 import java.util.ArrayList;

  4 

  5 import com.sleepycat.je.Cursor;

  6 import com.sleepycat.je.Database;

  7 import com.sleepycat.je.DatabaseConfig;

  8 import com.sleepycat.je.DatabaseEntry;

  9 import com.sleepycat.je.Environment;

 10 import com.sleepycat.je.EnvironmentConfig;

 11 import com.sleepycat.je.LockMode;

 12 import com.sleepycat.je.OperationStatus;

 13 

 14 

 15 public class Query {

 16     private Environment dbEnvironment = null;

 17     private Database db = null;

 18     

 19     

 20     private void DataConstruct(int t) throws UnsupportedEncodingException {

 21         int Total = t;

 22         long BDBTime = 0;

 23         long start = System.currentTimeMillis();

 24         /*

 25          * 

 26          */

 27         OpenBDB();

 28         while(Total!=0)

 29         {

 30 

 31             int k = Total;

 32             int v = Total+1;

 33             DatabaseEntry iKey = new DatabaseEntry(Integer.valueOf(k).toString().getBytes("UTF-8"));

 34             DatabaseEntry iValue = new DatabaseEntry(Integer.valueOf(v).toString().getBytes("UTF-8"));

 35            

 36             

 37             //System.out.println("Writing : Key= " + k + "  Value = " + v + " count: " + Total);

 38            

 39             

 40             db.put(null, iKey, iValue);

 41             Total--;

 42             }

 43         long end = System.currentTimeMillis();

 44         BDBTime = end - start;

 45         System.out.println(BDBTime);

 46         

 47         

 48         

 49     }

 50     

 51     //      

 52     

 53     public void QueryCompare(int t) throws UnsupportedEncodingException{

 54         

 55         DataConstruct(t);

 56         //OpenBDB();

 57         

 58         Cursor cursor = null;

 59         cursor = db.openCursor(null, null);

 60         

 61         DatabaseEntry thekey = new DatabaseEntry();

 62         String key = "12345";

 63         thekey.setData(key.getBytes("utf-8"));

 64         

 65         DatabaseEntry thedata = new DatabaseEntry();

 66         

 67         System.out.println("   >======== getSearchKey Start ========<");

 68         cursor.getSearchKey(thekey, thedata, LockMode.DEFAULT);

 69         byte[] temp = thedata.getData();

 70         String res = new String(temp,"utf-8");

 71         System.out.println("          Key " + key + " Value " + res);

 72         System.out.println("   >======== getSearchKey End ========<");

 73         System.out.println();

 74         

 75         System.out.println("   >======== getSearchKeyRange Start ========<");

 76         cursor.getSearchKeyRange(thekey, thedata, LockMode.DEFAULT);

 77         temp = thedata.getData();

 78         res = new String(temp,"utf-8");

 79         System.out.println("          Key " + key + " Value " + res);

 80         System.out.println("   >======== getSearchKeyRange End ========<");

 81         System.out.println();

 82         

 83         //

 84         System.out.println("   >======== getSearchBoth Start ========<");

 85         thedata.setData("12346".getBytes("utf-8"));

 86         OperationStatus status = cursor.getSearchBoth(thekey, thedata, LockMode.DEFAULT);

 87         if(status == OperationStatus.SUCCESS){

 88             temp = thedata.getData();

 89             res = new String(temp,"utf-8");

 90             System.out.println("          Key " + key + " Value " + res);

 91         }

 92         else

 93             System.out.println("   Not Such Record");

 94         

 95         System.out.println("   >======== getSearchKeyBoth End ========<");

 96         System.out.println();

 97         

 98         System.out.println("   >======== getSearchBothRange Start ========<");

 99         thedata.setData("123451".getBytes("utf-8"));

100         status = cursor.getSearchBoth(thekey, thedata, LockMode.DEFAULT);

101         if(status == OperationStatus.SUCCESS){

102             temp = thedata.getData();

103             res = new String(temp,"utf-8");

104             System.out.println("          Key " + key + " Value " + res);

105         }

106         else

107             System.out.println("   Not Such Record");

108         System.out.println("    RecordCount: " + cursor.count());

109         

110         System.out.println("   >======== getSearchKeyBothRange End ========<");

111         System.out.println();

112         

113         /*

114          * getSearchKeyRange getSearchKey          key      ,    Cursor.getNext              。      B    

115          *   getSearchKeyRange getSearchKey Cursor.getNext            ,BDB          ,     

116          * getSearchBoth    Key Value    ,    OperationStatus.SUCCESS      

117          * 

118          */

119         /*

120          *       , getSearchKey  getNext  

121          * 

122          */

123         //           ,  12345,     12346

124         

125         System.out.println("   >======== Simple  Pattern key = 12345 getSearchKey Start ========<");

126         thedata = new DatabaseEntry();//     ,    thedata    

127         cursor.getSearchKeyRange(thekey, thedata, LockMode.DEFAULT);

128         temp = thedata.getData();  //

129         res = new String(temp,"utf-8");

130         System.out.println("          Key " + key + " Value " + res);

131         thekey = new DatabaseEntry();

132         while(cursor.getNext(thekey, thedata, LockMode.DEFAULT) != OperationStatus.NOTFOUND){        //     OperationStatus.NOTFOUND

133             temp = thedata.getData();

134             byte[] tempkey = thekey.getData();

135             res = new String(temp,"utf-8");

136             String res1 = new String(tempkey,"utf-8");

137             if(res1.equals("12346"))

138                 break;

139             System.out.println("          Key " + res1 + " Value " + res);

140         }

141         System.out.println("   >======== Simple  getSearchKey End ========<");

142         System.out.println();

143         

144         //       ,                  ,

145         //  

146         

147         System.out.println("   >======== multiplication  Pattern Key=12345 Value = 123451 getSearchBothRange Start ========<");

148         thedata.setData("123451".getBytes("utf-8"));

149         thekey.setData(key.getBytes("utf-8"));

150         status = cursor.getSearchBothRange(thekey, thedata, LockMode.DEFAULT);

151         //      12345 123456

152         if(status==OperationStatus.SUCCESS){

153             temp = thedata.getData();  //

154             res = new String(temp,"utf-8");

155             System.out.println("          Key " + key + " Value " + res);

156             while(cursor.getNext(thekey, thedata, LockMode.DEFAULT) != OperationStatus.NOTFOUND){        //     OperationStatus.NOTFOUND

157                 temp = thedata.getData();

158                 byte[] tempkey = thekey.getData();

159                 res = new String(temp,"utf-8");

160                 String res1 = new String(tempkey,"utf-8");

161                 if(res1.equals("12346"))

162                     break;

163                 System.out.println("          Key " + res1 + " Value " + res);

164             }

165         }

166         else

167             System.out.println("   Not Such Record");

168             

169         

170         System.out.println("   >======== multiplication  getSearchBothRange End ========<");

171         System.out.println();

172         cursor.close();

173         CloseBDB();

174         

175     }

176     

177     //     

178     public void OpenBDB(){

179         EnvironmentConfig envConfig = new EnvironmentConfig();

180         envConfig.setAllowCreate(true);

181         dbEnvironment = new Environment( new File("D:/dbEnv"), envConfig );

182          DatabaseConfig dbConfig = new DatabaseConfig();

183 

184          dbConfig.setAllowCreate(true);

185          dbConfig.setSortedDuplicates(true);

186          db = dbEnvironment.openDatabase(null,"BDB", dbConfig); 

187          System.out.println("       ");

188     }

189     //     

190     public void CloseBDB(){

191         if(db != null){

192             db.close();

193         }

194         if(dbEnvironment != null){

195             dbEnvironment.close();

196         }

197     }

198     

199     

200     //

201     public ArrayList<String> getEveryItem() throws UnsupportedEncodingException {

202         Cursor cursor = null;

203         OpenBDB();

204         cursor= db.openCursor(null,null);

205         DatabaseEntry theKey=null;

206         DatabaseEntry theData=null;    

207         theKey = new DatabaseEntry();

208         theData = new DatabaseEntry();

209         long total = 0;

210         ArrayList<String> list = new ArrayList<String>(); 

211         

212         while (cursor.getNext(theKey, theData, LockMode.DEFAULT) == OperationStatus.SUCCESS) {

213             //System.out.println("Reading: Key: " + new String( theKey.getData()) + "Value: " + new String(theData.getData()));

214             list.add(new String( theKey.getData()) );

215             list.add(new String( theData.getData()) );

216             total++;

217         }

218         cursor.close();

219         System.out.println("total:" + total);

220         return list;

221          

222     }

223     

224     //getSearchKey

225     

226     

227 

228         

229     

230     

231     

232 }

シーケンス化学生情報の作成
import java.io.File;



import com.sleepycat.bind.EntryBinding;

import com.sleepycat.bind.serial.SerialBinding;

import com.sleepycat.bind.serial.StoredClassCatalog;

import com.sleepycat.je.Cursor;

import com.sleepycat.je.Database;

import com.sleepycat.je.DatabaseConfig;

import com.sleepycat.je.DatabaseEntry;

import com.sleepycat.je.Environment;

import com.sleepycat.je.EnvironmentConfig;

import com.sleepycat.je.LockMode;

import com.sleepycat.je.OperationStatus;





public class SeriableDemo {



    public static void main(String args[]){

      Environment dbEnv = null;

      Database db = null;

      Cursor cursor=null;

      try {

          

       EnvironmentConfig envconfig = new EnvironmentConfig();

       envconfig.setAllowCreate(true);

       dbEnv = new Environment(new File("D:/dbEnv/"),envconfig);

       

       DatabaseConfig dbconfig = new DatabaseConfig();

       dbconfig.setAllowCreate(true);

       dbconfig.setReadOnly(false);

       dbconfig.setSortedDuplicates(false);

       //data

       db = dbEnv.openDatabase(null, "Student_Data", dbconfig);

       //class

       Database myclassdb=dbEnv.openDatabase(null, "Student_class", dbconfig);

       //cataglog     

       StoredClassCatalog classCatalog =new StoredClassCatalog(myclassdb);

       

     //      

       EntryBinding dataBinging=new SerialBinding(classCatalog,Student.class);

       

       DatabaseEntry thekey=new DatabaseEntry("1200340233".getBytes("utf-8"));

       DatabaseEntry thedata=new DatabaseEntry();

       Student st=new Student();

       

       st.setStudentId(1200340233);

       st.setStudentName("   ");

       st.setStudentAge(20);

       st.setStudentDept("        ");

       

       //    

       dataBinging.objectToEntry(st, thedata);

       //  

       db.put(null, thekey, thedata);

       

       DatabaseEntry data = new DatabaseEntry();

       //DatabaseEntry key = new DatabaseEntry();

       DatabaseEntry key = new DatabaseEntry("1200340233".getBytes("utf-8"));

       Student st1 = new Student();

       st1.setStudentId(1200340233);

       dataBinging.objectToEntry(st1, data);

       //  

       OperationStatus status=db.get(null, key, data, LockMode.DEFAULT);

       if(status==OperationStatus.SUCCESS){

        Student s=(Student) dataBinging.entryToObject(thedata);

        System.out.println(s.getStudentId()+"   "+s.getStudentName()+"    "+

        s.getStudentAge() + "   " + s.getStudentDept());

       }

       

      }catch(Exception e){

          e.printStackTrace();

      }

    }

}

上のコードは学生クラスに使用されます.
import java.io.Serializable;





public class Student implements Serializable {

    

    private long StudentId;

    private String StudentName;

    private int StudentAge;

    private String StudentDept;

    

    public long getStudentId() {

        return StudentId;

    }

    

    public void setStudentId(long studentId) {

        StudentId = studentId;

    }

    

    public String getStudentName() {

        return StudentName;

    }

    

    public void setStudentName(String studentName) {

        StudentName = studentName;

    }

    

    public int getStudentAge() {

        return StudentAge;

    }

    

    public void setStudentAge(int studentAge) {

        StudentAge = studentAge;

    }

    

    public String getStudentDept() {

        return StudentDept;

    }

    

    public void setStudentDept(String studentDept) {

        StudentDept = studentDept;

    }

    



}

以上は先生の将来のプロジェクトの需要で、後で私もこのような需要があると思います.時間がなくて、やはり自分で実践して音楽の推薦システムを作りたいです.