前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BerkeleyDB .je 在作为存储时的简单使用

BerkeleyDB .je 在作为存储时的简单使用

作者头像
用户5166556
发布2019-04-16 11:53:27
1.4K0
发布2019-04-16 11:53:27
举报

最近在研究BDB时发现速度特别快(非关系型数据库)下面我给大家共享一下我在学习的过程中的一些收获和问题,不知道哪位大神帮忙解决一下。主要在putNoDupData,不知道该怎么使用

代码语言:javascript
复制
package com.bdb;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;

import jodd.io.FileUtil;

import com.sleepycat.je.Cursor;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;

public class MyBerkeleyDB {
			 
			private Environment env;
			private Database db;
			public MyBerkeleyDB() {
			}
			
			public void setUp(String path, long cacheSize) {
			EnvironmentConfig envConfig = new EnvironmentConfig();
			envConfig.setAllowCreate(true);
			envConfig.setCacheSize(cacheSize);
				try {
				env = new Environment(new File(path),envConfig);
				} catch (DatabaseException e) {
				e.printStackTrace();
				}
			}
			
			public void open(String dbName) {
			DatabaseConfig dbConfig = new DatabaseConfig();
			dbConfig.setAllowCreate(true);//是否允许创建
			dbConfig.setReplicated(false);//是否允许重复
			//dbConfig.setSortedDuplicates(true);这里我已经设置了,我不知道下面在我putNoDupData会出现异常
			try {
			db = env.openDatabase(null, dbName, dbConfig);
			} catch (DatabaseException e) {
			e.printStackTrace();
			}
			}
			
			public void close() {
			try {
			if(db != null) {
			db.close();
			}
			
			if(env != null) {
			env.close();
			}
			} catch (DatabaseException e) {
			e.printStackTrace();
			}
			}
			
			public String get(String key) throws Exception {
			DatabaseEntry queryKey = new DatabaseEntry();
			DatabaseEntry value = new DatabaseEntry();
			queryKey.setData(key.getBytes("UTF-8"));
			
			OperationStatus status = db.get(null, queryKey, value,
			LockMode.DEFAULT);
			if (status == OperationStatus.SUCCESS) {
			return new String(value.getData());
			}
			return null;
			}
			 
			  /**
			   * put data for one to one
			   * @param key
			   * @param value
			   * @return
			   * @throws Exception
			   */
			public boolean put(String key, String value) throws Exception {
			byte[] theKey = key.getBytes("UTF-8");
			byte[] theValue = value.getBytes("UTF-8");
		 
			OperationStatus status = db.put(null, new DatabaseEntry(theKey),new DatabaseEntry(theValue));
			if(status == OperationStatus.SUCCESS) {
			return true;
			}
			return false;
			}
			/**
			 * get all value
			 */
			public static List<String> readFile(String filePathAndName)throws IOException {
				
				FileInputStream fis = new FileInputStream(filePathAndName);
				InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
				BufferedReader br = new BufferedReader(isr);
				LineNumberReader lnr = new LineNumberReader(br);
				
				List<String> returnValue = new ArrayList<String>();
				int cnt = 0;
				while (true) {
					cnt++;
					String tempStr = lnr.readLine();
					if (tempStr == null)
						break;
					/*if(cnt>1)
						break;*/
					/*if(cnt<=1000000)
						continue;
					if(cnt>1500000)
						break;*/
					if (tempStr.length() < 2)
						continue;
					returnValue.add(tempStr);
				}
				lnr.close();
				br.close();
				isr.close();
				fis.close();
				return returnValue;
				}
			
		  public List<String> getAllValue(){
				List<String> returnValue = new ArrayList<String>();
				DatabaseEntry keyEntry = new DatabaseEntry();
			    DatabaseEntry dataEntry = new DatabaseEntry();
			    Cursor cursor = db.openCursor(null, null);
			    while(cursor.getNext(keyEntry, dataEntry, LockMode.DEFAULT) == OperationStatus.SUCCESS){
			    	returnValue.add(new String(dataEntry.getData()));
			    }
			    cursor.close();
				return returnValue;
			}
		  public int getCount(String key){
				DatabaseEntry keyEntry = new DatabaseEntry();
				DatabaseEntry dataEntry = new DatabaseEntry();
			    keyEntry.setData(key.getBytes());
			    Cursor cursor = db.openCursor(null, null);
			    cursor.getSearchKey(keyEntry, dataEntry, LockMode.DEFAULT);
			    int returnValue = 0;
			    try{
			    	returnValue = cursor.count();
			    }catch(IllegalStateException e){
			    	returnValue = 0;
			    }finally{
			    	cursor.close();
				    close();
			    }
				return returnValue;
			}
			
		  
			public static void main(String[] args) throws Exception {
			MyBerkeleyDB mbdb = new MyBerkeleyDB();
			/*mbdb.get("myKey1");
			System.out.println(mbdb.get("myKey1"));*/
			mbdb.setUp("D:\\bdb", 1000000);//设置文件夹进行存储,并设置大小
			mbdb.open("myDB");
			//System.out.println(mbdb.get("myKey8"));
			//System.out.println(mbdb.getCount("myKey1"));
			//System.out.println(mbdb.get("myKeyq3"));
			List<String> list1 = mbdb.getAllValue();
			for(String str:list1){
				System.out.println(str);//从库里取出数据
		      //FileUtil.appendString("f:\\bdb2.txt", str);
			}
			System.out.println("开始向Berkeley DB中存入数据...");
		    List<String> listData = readFile("d:/。。.txt");//读取数据
			try {
			int i = 0;
			for(String list:listData){
				String key = "myKey"+i;
				String value = "myValuesq"+list;
				mbdb.put(key , value);//存入数据
				i++ ;
			}
 
			} catch (Exception e) {
			e.printStackTrace();
			}
 
			mbdb.close();

}}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年05月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档