package com.github.ltsopensource.core.failstore.ltsdb;
import com.github.ltsopensource.core.commons.file.FileUtils;
import com.github.ltsopensource.kv.DB;
import com.github.ltsopensource.kv.DBBuilder;
import com.github.ltsopensource.kv.Entry;
import com.github.ltsopensource.kv.iterator.DBIterator;
import org.fusesource.leveldbjni.JniDBFactory;
import org.iq80.leveldb.Options;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
/**
* @author Robert HG (254963746@qq.com) on 12/13/15.
*/
public class DBTest {
String path = System.getProperty("user.home") + "/tmp/dbtest";
private DB<String, String> getDB() {
try {
FileUtils.createDirIfNotExist(path + "/ltsdb");
} catch (IOException e) {
e.printStackTrace();
}
final DB<String, String> db =
new DBBuilder<String, String>()
.setPath(path + "/ltsdb")
.create();
return db;
}
@Test
public void testLtsDbPut() {
DB<String, String> db = getDB();
db.init();
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
db.put("testKey" + i, "testvalue" + i);
}
// 4597 待优化
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void testLeveldbPut() throws IOException {
org.iq80.leveldb.DB db;
Options options;
options = new Options();
options.createIfMissing(true);
options.cacheSize(100 * 1024 * 1024); // 100M
options.maxOpenFiles(400);
FileUtils.createDirIfNotExist(new File(path + "/leveldb"));
JniDBFactory.factory.repair(new File(path + "/leveldb"), options);
db = JniDBFactory.factory.open(new File(path + "/leveldb"), options);
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
db.put(("testKey" + i).getBytes("UTF-8"), ("testvalue" + i).getBytes("UTF-8"));
}
//972
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void testPutGet() {
DB<String, String> db = getDB();
db.init();
db.put("111", "aaaa");
db.put("222", "bbbb");
System.out.println(db.get("111"));
System.out.println(db.get("222"));
DBIterator<Entry<String, String>> iterator = db.iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
db.close();
}
@Test
public void testReload() {
DB<String, String> db = getDB();
db.init();
System.out.println(db.get("111"));
System.out.println(db.get("222"));
DBIterator<Entry<String, String>> iterator = db.iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
db.close();
}
@Test
public void testRemove() {
DB<String, String> db = getDB();
db.init();
System.out.println(db.get("111"));
System.out.println(db.get("222"));
DBIterator<Entry<String, String>> iterator = db.iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
db.remove("222");
System.out.println("111=" + db.get("111"));
System.out.println("222=" + db.get("222"));
iterator = db.iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
db.close();
}
@Test
public void testSequence() {
DB<String, String> db = getDB();
db.init();
for (int i = 0; i < 100; i++) {
db.put("idx_" + i, String.valueOf(i));
}
DBIterator<Entry<String, String>> iterator = db.iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
db.close();
}
}