package org.fastcatsearch.ir.document; import java.io.File; import java.io.IOException; import java.util.Random; import org.fastcatsearch.ir.util.Formatter; import org.junit.Test; /* * 테스트결과 최적셋팅은 * MEMORY_LIMIT = 64MB * indexInterval = 64 * bucketSize = 64k * index check는 100,000 건 마다. * */ public class LargePrimaryKeyIndexWriterTest { @Test public void test() throws IOException { int MEMORY_LIMIT = 64 * 1024 * 1024; int COUNT = 1000000; File dir = new File("/Users/swsong/tmp"); Random r = new Random(System.currentTimeMillis()); int indexInterval = 64; int bucketSize = 64 * 1024; String filename = "pk.map"; LargePrimaryKeyIndexWriter writer = new LargePrimaryKeyIndexWriter(dir, filename, indexInterval, bucketSize); byte[] data = new byte[64]; for (int i = 0; i < COUNT; i++) { data[0] = (byte) r.nextInt(255); data[1] = (byte) r.nextInt(255); data[2] = (byte) r.nextInt(255); data[3] = (byte) r.nextInt(255); data[4] = (byte) r.nextInt(255); int prev = writer.put(data, 0, data.length, i); if(prev != -1){ System.out.println("DUP delete >> " + prev); } if ((i+1) % 100000 == 0) { long memorySize = writer.checkWorkingMemorySize(); System.out.println("check " + (i+1) + " mem "+Formatter.getFormatSize(memorySize) + " > " + Formatter.getFormatSize(MEMORY_LIMIT)); if (memorySize > MEMORY_LIMIT) { writer.flush(); } } } writer.close(); } @Test public void testEmpty() throws IOException{ File dir = new File("/Users/swsong/tmp"); int indexInterval = 64; int bucketSize = 64 * 1024; String filename = "pk.map"; LargePrimaryKeyIndexWriter writer = new LargePrimaryKeyIndexWriter(dir, filename, indexInterval, bucketSize); writer.close(); } @Test public void testManual() throws IOException{ File dir = new File("/Users/swsong/tmp"); int indexInterval = 64; int bucketSize = 64 * 1024; String filename = "pk.map"; LargePrimaryKeyIndexWriter writer = new LargePrimaryKeyIndexWriter(dir, filename, indexInterval, bucketSize); int value = 0; int prev = -1; prev = writeString(writer, "abc", value++); prev = writeString(writer, "abc", value++); prev = writeString(writer, "123", value++); prev = writeString(writer, "abc", value++); writer.flush(); prev = writeString(writer, "abc", value++); prev = writeString(writer, "abc", value++); prev = writeString(writer, "123", value++); prev = writeString(writer, "abc", value++); prev = writeString(writer, "def", value++); prev = writeString(writer, "def", value++); writer.close(); } private int writeString(LargePrimaryKeyIndexWriter writer, String string, int value) throws IOException { byte[] key = string.getBytes(); return writer.put(key, 0, key.length, value); } }