use of org.h2.mvstore.db.MVTableEngine.Store in project h2database by h2database.
the class TestMVStore method testProvidedFileStoreNotOpenedAndClosed.
private void testProvidedFileStoreNotOpenedAndClosed() {
final AtomicInteger openClose = new AtomicInteger();
FileStore fileStore = new OffHeapStore() {
@Override
public void open(String fileName, boolean readOnly, char[] encryptionKey) {
openClose.incrementAndGet();
super.open(fileName, readOnly, encryptionKey);
}
@Override
public void close() {
openClose.incrementAndGet();
super.close();
}
};
MVStore store = new MVStore.Builder().fileStore(fileStore).open();
store.close();
assertEquals(0, openClose.get());
}
use of org.h2.mvstore.db.MVTableEngine.Store in project h2database by h2database.
the class TestMVStore method testExampleMvcc.
private void testExampleMvcc() {
String fileName = getBaseDir() + "/" + getTestName();
FileUtils.delete(fileName);
// open the store (in-memory if fileName is null)
MVStore s = MVStore.open(fileName);
// create/get the map named "data"
MVMap<Integer, String> map = s.openMap("data");
// add some data
map.put(1, "Hello");
map.put(2, "World");
// get the current version, for later use
long oldVersion = s.getCurrentVersion();
// from now on, the old version is read-only
s.commit();
// more changes, in the new version
// changes can be rolled back if required
// changes always go into "head" (the newest version)
map.put(1, "Hi");
map.remove(2);
// access the old data (before the commit)
MVMap<Integer, String> oldMap = map.openVersion(oldVersion);
// print the old version (can be done
// concurrently with further modifications)
// this will print "Hello" and "World":
// System.out.println(oldMap.get(1));
assertEquals("Hello", oldMap.get(1));
// System.out.println(oldMap.get(2));
assertEquals("World", oldMap.get(2));
// print the newest version ("Hi")
// System.out.println(map.get(1));
assertEquals("Hi", map.get(1));
// close the store
s.close();
}
use of org.h2.mvstore.db.MVTableEngine.Store in project h2database by h2database.
the class TestMVStore method testLargeImport.
private void testLargeImport() {
String fileName = getBaseDir() + "/" + getTestName();
FileUtils.delete(fileName);
int len = 1000;
for (int j = 0; j < 5; j++) {
FileUtils.delete(fileName);
MVStore s = openStore(fileName, 40);
MVMap<Integer, Object[]> m = s.openMap("data", new MVMap.Builder<Integer, Object[]>().valueType(new RowDataType(new DataType[] { new ObjectDataType(), StringDataType.INSTANCE, StringDataType.INSTANCE })));
// long t = System.nanoTime();
for (int i = 0; i < len; ) {
Object[] o = new Object[3];
o[0] = i;
o[1] = "Hello World";
o[2] = "World";
m.put(i, o);
i++;
if (i % 10000 == 0) {
s.commit();
}
}
s.close();
// System.out.println(prof.getTop(5));
// System.out.println("store time " +
// TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - t));
// System.out.println("store size " +
// FileUtils.size(fileName));
}
}
use of org.h2.mvstore.db.MVTableEngine.Store in project h2database by h2database.
the class TestMVStoreCachePerformance method testCache.
private void testCache(int threadCount, String fileNamePrefix) {
String fileName = getBaseDir() + "/" + getTestName();
fileName = fileNamePrefix + fileName;
FileUtils.delete(fileName);
MVStore store = new MVStore.Builder().fileName(fileName).open();
final MVMap<Integer, byte[]> map = store.openMap("test");
final AtomicInteger counter = new AtomicInteger();
byte[] data = new byte[8 * 1024];
final int count = 10000;
for (int i = 0; i < count; i++) {
map.put(i, data);
store.commit();
if (i % 1000 == 0) {
// System.out.println("add " + i);
}
}
Task[] tasks = new Task[threadCount];
for (int i = 0; i < threadCount; i++) {
tasks[i] = new Task() {
@Override
public void call() throws Exception {
Random r = new Random();
do {
int id = r.nextInt(count);
map.get(id);
counter.incrementAndGet();
} while (!stop);
}
};
tasks[i].execute();
}
for (int i = 0; i < 4; i++) {
// Profiler prof = new Profiler().startCollecting();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// ignore
}
// System.out.println(prof.getTop(5));
// System.out.println(" " + counter.get() / (i + 1) + " op/s");
}
// long time = System.nanoTime();
for (Task t : tasks) {
t.get();
}
store.close();
System.out.println(counter.get() / 10000 + " ops/ms; " + threadCount + " thread(s); " + fileNamePrefix);
}
use of org.h2.mvstore.db.MVTableEngine.Store in project h2database by h2database.
the class TestMVStoreBenchmark method getMemoryUsed.
private long[] getMemoryUsed(int count, int size) {
long hash, tree, mv;
ArrayList<Map<Integer, String>> mapList;
long mem;
mapList = New.arrayList();
mem = getMemory();
for (int i = 0; i < count; i++) {
mapList.add(new HashMap<Integer, String>(size));
}
addEntries(mapList, size);
hash = getMemory() - mem;
mapList.size();
mapList = New.arrayList();
mem = getMemory();
for (int i = 0; i < count; i++) {
mapList.add(new TreeMap<Integer, String>());
}
addEntries(mapList, size);
tree = getMemory() - mem;
mapList.size();
mapList = New.arrayList();
mem = getMemory();
MVStore store = MVStore.open(null);
for (int i = 0; i < count; i++) {
Map<Integer, String> map = store.openMap("t" + i);
mapList.add(map);
}
addEntries(mapList, size);
mv = getMemory() - mem;
mapList.size();
trace("hash: " + hash / 1024 / 1024 + " mb");
trace("tree: " + tree / 1024 / 1024 + " mb");
trace("mv: " + mv / 1024 / 1024 + " mb");
return new long[] { hash, tree, mv };
}
Aggregations