本文共 2029 字,大约阅读时间需要 6 分钟。
java有时候需要处理很多key,value的数据。电商行业最常见的就是商品ID,值。
对于几百万、几千万可以用leveldb来存储,快不快没有细测。但其可用性是得到验证的。
下面是一个测试的例子。
首先还是下载Java包,用maven:
org.iq80.leveldb
leveldb-api
0.10
org.iq80.leveldb
leveldb
0.10
然后写一段Java测试代码:
package net.highersoft.leveldb;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.iq80.leveldb.DB;
import org.iq80.leveldb.DBFactory;
import org.iq80.leveldb.DBIterator;
import org.iq80.leveldb.Options;
import org.iq80.leveldb.impl.Iq80DBFactory;
public class Test {
public static void main(String[] args) throws IOException {
//初始化DB
String folder="/Users/chengzhong/work/dhgate_work/dev_file/leveldb";
DBFactory factory = new Iq80DBFactory();
Options options = new Options();
options.createIfMissing(true);
//folder 是db存储目录
DB db = factory.open(new File(folder), options);
//存储Key Value 值
//levelDB 的api存储都是字节数组 所以这里需要转成字节数组
String key="key";
String value="value";
for(int i=0;i<1000000;i++) {
db.put(Iq80DBFactory.bytes(key+i), Iq80DBFactory.bytes(value+i));
if(i%10000==0) {
System.out.println("use memory:"+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/1024/1024+"MB");
System.gc();
}
}
//获取Value
byte[] bytes = db.get(Iq80DBFactory.bytes(key));
value = Iq80DBFactory.asString(bytes);
System.out.println("value:"+value);
System.out.println("key1111:"+new String(db.get(Iq80DBFactory.bytes("key1111"))));
//删除
//db.delete(Iq80DBFactory.bytes(key));
//更改 重新put新的key - value即可
//db.put(Iq80DBFactory.bytes(key), Iq80DBFactory.bytes(value+"update"));
System.out.println(Integer.toHexString(255));
}
public LinkedHashMap iteratorDb(DB db) {
DBIterator iterator = db.iterator();
LinkedHashMap linkedHashMap = new LinkedHashMap<>();
while (iterator.hasNext()) {
Map.Entry next = iterator.next();
String key = Iq80DBFactory.asString(next.getKey());
String value = Iq80DBFactory.asString(next.getValue());
linkedHashMap.put(key, value);
}
return linkedHashMap;
}
}
这里有意思的是第33行的System.gc(),不用这行,你在控制台可以看到内存一直在增长。用上这行,你看内存就不会一直长了。这证明内存是可控的。
评论:
提交
转载地址:http://uxifo.baihongyu.com/