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.追加レコードのオープン、レコードの照会、すべてのレコードの取得を含む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;
}
}
以上は先生の将来のプロジェクトの需要で、後で私もこのような需要があると思います.時間がなくて、やはり自分で実践して音楽の推薦システムを作りたいです.