📄 jestoretest.java
字号:
package org.apache.lucene.store.je;/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */import java.io.File;import java.io.IOException;import java.util.Arrays;import java.util.Date;import java.util.Random;import junit.framework.TestCase;import org.apache.lucene.store.Directory;import org.apache.lucene.store.IndexInput;import org.apache.lucene.store.IndexOutput;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;import com.sleepycat.je.Transaction;/** * Tests {@link JEDirectory}. * * Adapted from Andi Vajda's org.apache.lucene.db.DbStoreTest. * * @author Aaron Donovan */public class JEStoreTest extends TestCase { protected File dbHome = new File(System.getProperty("java.io.tmpdir"),"index"); protected Environment env; protected Database index, blocks; public void setUp() throws Exception { if (!dbHome.exists()) dbHome.mkdir(); else { File[] files = dbHome.listFiles(); for (int i = 0; i < files.length; i++) { String name = files[i].getName(); if (name.endsWith("jdb") || name.equals("je.lck")) files[i].delete(); } } EnvironmentConfig envConfig = new EnvironmentConfig(); DatabaseConfig dbConfig = new DatabaseConfig(); envConfig.setTransactional(true); envConfig.setAllowCreate(true); dbConfig.setAllowCreate(true); dbConfig.setTransactional(true); env = new Environment(dbHome, envConfig); Transaction txn = null; try { txn = env.beginTransaction(null, null); index = env.openDatabase(txn, "__index__", dbConfig); blocks = env.openDatabase(txn, "__blocks__", dbConfig); } catch (DatabaseException e) { if (txn != null) { txn.abort(); txn = null; } index = null; blocks = null; throw e; } finally { if (txn != null) txn.commit(); txn = null; } } public void tearDown() throws Exception { if (index != null) index.close(); if (blocks != null) blocks.close(); if (env != null) env.close(); } public void tesBytes() throws Exception { final int count = 250; final int LENGTH_MASK = 0xffff; Random gen = new Random(1251971); int totalLength = 0; int duration; Date end; Date veryStart = new Date(); Date start = new Date(); Transaction txn = null; Directory store = null; System.out.println("Writing files byte by byte"); try { txn = env.beginTransaction(null, null); store = new JEDirectory(txn, index, blocks); for (int i = 0; i < count; i++) { String name = i + ".dat"; int length = gen.nextInt() & LENGTH_MASK; IndexOutput file = store.createOutput(name); totalLength += length; for (int j = 0; j < length; j++) { byte b = (byte) (gen.nextInt() & 0x7F); file.writeByte(b); } file.close(); } } catch (IOException e) { txn.abort(); txn = null; throw e; } catch (DatabaseException e) { if (txn != null) { txn.abort(); txn = null; } throw e; } finally { if (txn != null) txn.commit(); store.close(); } end = new Date(); duration = (int) (end.getTime() - start.getTime()); System.out.print(duration); System.out.print(" total milliseconds to create, "); System.out.print(totalLength / duration); System.out.println(" kb/s"); try { txn = env.beginTransaction(null, null); store = new JEDirectory(txn, index, blocks); gen = new Random(1251971); start = new Date(); for (int i = 0; i < count; i++) { String name = i + ".dat"; int length = gen.nextInt() & LENGTH_MASK; IndexInput file = store.openInput(name); if (file.length() != length) throw new Exception("length incorrect"); for (int j = 0; j < length; j++) { byte b = (byte) (gen.nextInt() & 0x7F); if (file.readByte() != b) throw new Exception("contents incorrect"); } file.close(); } } catch (IOException e) { txn.abort(); txn = null; throw e; } catch (DatabaseException e) { if (txn != null) { txn.abort(); txn = null; } throw e; } finally { if (txn != null) txn.commit(); store.close(); } end = new Date(); duration = (int) (end.getTime() - start.getTime()); System.out.print(duration); System.out.print(" total milliseconds to read, "); System.out.print(totalLength / duration); System.out.println(" kb/s"); try { txn = env.beginTransaction(null, null); store = new JEDirectory(txn, index, blocks); gen = new Random(1251971); start = new Date(); for (int i = 0; i < count; i++) { String name = i + ".dat"; store.deleteFile(name); } } catch (IOException e) { txn.abort(); txn = null; throw e; } catch (DatabaseException e) { if (txn != null) { txn.abort(); txn = null; } throw e; } finally { if (txn != null) txn.commit(); store.close(); } end = new Date(); System.out.print(end.getTime() - start.getTime()); System.out.println(" total milliseconds to delete"); System.out.print(end.getTime() - veryStart.getTime()); System.out.println(" total milliseconds"); } public void testDelete() throws Exception { final int count = 250; final int LENGTH_MASK = 0xffff; Random gen = new Random(1251971); int totalLength = 0; int duration; Date end; Date veryStart = new Date(); Date start = new Date(); Transaction txn = null; Directory store = null; System.out.println("Writing files byte by byte"); try { txn = env.beginTransaction(null, null); store = new JEDirectory(txn, index, blocks); for (int i = 0; i < count; i++) { String name = i + ".dat"; int length = gen.nextInt() & LENGTH_MASK; IndexOutput file = store.createOutput(name); totalLength += length; for (int j = 0; j < length; j++) { byte b = (byte) (gen.nextInt() & 0x7F); file.writeByte(b); } file.close(); } } catch (IOException e) { txn.abort(); txn = null; throw e; } catch (DatabaseException e) { if (txn != null) { txn.abort(); txn = null; } throw e; } finally { if (txn != null) txn.commit(); store.close(); } end = new Date(); duration = (int) (end.getTime() - start.getTime()); System.out.print(duration); System.out.print(" total milliseconds to read, "); System.out.print(totalLength / duration); System.out.println(" kb/s");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -