⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskhashtest.java

📁 Java的面向对象数据库系统的源代码
💻 JAVA
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Library License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.//// $Id$package test.ozoneDB.DxLib;import org.ozoneDB.DxLib.DxDiskHashMap;import org.ozoneDB.DxLib.DxIterator;import org.ozoneDB.DxLib.DxMap;import org.ozoneDB.util.OzoneDebugLevel;import org.apache.log4j.Logger;import java.util.Random;import java.io.File;import test.OzoneTestCase;public class DiskHashTest extends AbstractTest {    private static Logger log = Logger.getLogger(OzoneTestCase.class);    private DxDiskHashMap map;    public DiskHashTest(String name) {        super(name);    }    public void testDiskHashTest() throws Exception {        //int n = Integer.valueOf(args[0]).intValue();        int n = 990;        int cacheBits = 8;        int bufferSize = 5;        log.debug(n + " elements");        String mapDir = System.getProperty("java.io.tmpdir")+ "/diskhash/map/";        File mapDirFile = new File(mapDir);        mapDirFile.mkdirs();        log.debug("storing the DiskHashMap at " + mapDir);        map = new DxDiskHashMap(mapDir, bufferSize, cacheBits, 8);        log.debug( "creating..." );        for (int i=0; i<n; i++) {            map.addForKey( new Integer( i ), new Integer( i ) );        }        useMap(n);        map.close();        // test that reusing a map also works as expected        map.re_use();        map.setReusable(true);        useMap(n);//        testAll( map, n, bufferSize );        map.printStatistics();        map.cleanFiles();    }    private void useMap(int n) {        log.debug("accessing...");        for (int i = 0; i < n; i += 100) {            Integer value = (Integer) map.elementForKey(new Integer(i));            assertNotNull(value);            assertEquals("key-value does not match",value.intValue(), i);        }        log.debug("iterating...");        DxIterator it = map.iterator();        while (it.next() != null) {            if (log.isEnabledFor(OzoneDebugLevel.DEBUG1)) {                System.out.print(((Integer) it.key()).intValue() + " ");            }        }        System.out.flush();        log.debug("iterating again...");        it = map.iterator();        while (it.next() != null) {            if (log.isEnabledFor(OzoneDebugLevel.DEBUG1)) {                System.out.print(((Integer) it.object()).intValue() + " ");            }        }        System.out.flush();        log.debug("accessing...");        for (int i = 0; i < n; i += 100) {            Integer value = (Integer) map.elementForKey(new Integer(i));            assertNotNull(value);            assertEquals("key-value does not match",value.intValue(), i);        }    }    public void testAll(DxDiskHashMap map, int n, int bufferSize) throws Exception {        // add        long start = System.currentTimeMillis();        for (int i = 0; i < n; i++) {            map.addForKey(new Integer(i), new Integer(i));        }        log.debug("time (add): " + (System.currentTimeMillis() - start));        // re-read (buffered)        int nn = Math.min((bufferSize - 2) * 256, n);        start = System.currentTimeMillis();        for (int i = 0; i < nn; i++) {            Integer si = (Integer) map.elementForKey(new Integer(i));            assertEquals("corrupted", si, new Integer(i));        }        log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start));        // re-read (buffered)        start = System.currentTimeMillis();        for (int i = 0; i < nn; i++) {            Integer si = (Integer) map.elementForKey(new Integer(i));            assertEquals("corrupted", si, new Integer(i));        }        log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start));        // re-read        start = System.currentTimeMillis();        for (int i = 0; i < n; i++) {            Integer si = (Integer) map.elementForKey(new Integer(i));            assertEquals("corrupted", si, new Integer(i));        }        log.debug("time (re-read): " + (System.currentTimeMillis() - start));        // re-read        start = System.currentTimeMillis();        for (int i = 0; i < n; i++) {            Integer si = (Integer) map.elementForKey(new Integer(i));            assertEquals("corrupted", si, new Integer(i));        }        log.debug("time (re-read): " + (System.currentTimeMillis() - start));        // close        start = System.currentTimeMillis();        map.close();        log.debug("time (close): " + (System.currentTimeMillis() - start));        map.printStatistics();        // map.cleanFiles();    }    public void stress(DxMap map) {        Random rand = new Random(System.currentTimeMillis());        for (int j = 0; j < 10; j++) {            double gaussian = rand.nextGaussian();            int EX = (int) (Math.abs(gaussian) * 10000);            log.debug("EX: " + EX);            int VAR = 1000;            for (int i = 0; i < 100; i++) {                int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX);                // System.out.println ("add: " + index);                map.addForKey(new Integer(index), new Integer(index));            }            int hitCount = 0;            for (int i = 0; i < 500; i++) {                int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX);                // System.out.println ("add: " + index);                if (map.elementForKey(new Integer(index)) != null) {                    hitCount++;                }            }            log.debug("hit count:" + hitCount);            for (int i = 0; i < 500; i++) {                int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX);                // System.out.println ("remove: " + index);                map.removeForKey(new Integer(index));            }            log.debug("count:" + map.count());        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -