Search in sources :

Example 61 with Store

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());
}
Also used : MVStore(org.h2.mvstore.MVStore) FileStore(org.h2.mvstore.FileStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) OffHeapStore(org.h2.mvstore.OffHeapStore)

Example 62 with Store

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();
}
Also used : MVStore(org.h2.mvstore.MVStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 63 with Store

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));
    }
}
Also used : MVStore(org.h2.mvstore.MVStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ObjectDataType(org.h2.mvstore.type.ObjectDataType)

Example 64 with Store

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);
}
Also used : Task(org.h2.util.Task) MVStore(org.h2.mvstore.MVStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Random(java.util.Random) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 65 with Store

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 };
}
Also used : MVStore(org.h2.mvstore.MVStore) TreeMap(java.util.TreeMap) Map(java.util.Map) HashMap(java.util.HashMap)

Aggregations

MVStore (org.h2.mvstore.MVStore)29 IOException (java.io.IOException)13 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)12 ByteArrayInputStream (java.io.ByteArrayInputStream)10 InputStream (java.io.InputStream)8 HashMap (java.util.HashMap)8 DbException (org.h2.message.DbException)8 StreamStore (org.h2.mvstore.StreamStore)8 PageStore (org.h2.store.PageStore)8 Random (java.util.Random)7 OutputStream (java.io.OutputStream)6 FileStore (org.h2.store.FileStore)6 BufferedInputStream (java.io.BufferedInputStream)5 ArrayList (java.util.ArrayList)5 FileStore (org.h2.mvstore.FileStore)5 Store (org.h2.mvstore.db.MVTableEngine.Store)5 Row (org.h2.result.Row)5 FileStoreInputStream (org.h2.store.FileStoreInputStream)5 PrintWriter (java.io.PrintWriter)4 Database (org.h2.engine.Database)4