java leveldb 使用_leveldb的使用

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(),不用这行,你在控制台可以看到内存一直在增长。用上这行,你看内存就不会一直长了。这证明内存是可控的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值