博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leveldb java实例_leveldb的使用
阅读量:6513 次
发布时间:2019-06-24

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

评论:

5a8ed350945caf85d4c21c89b7c953ce.png

提交

转载地址:http://uxifo.baihongyu.com/

你可能感兴趣的文章
javascript于boolean类型转换,运营商&amp;&amp;和|| 返回值
查看>>
Socket tips: UDP Echo service - Client code
查看>>
深入分析面向对象中的封装作用
查看>>
深刻理解Python中的元类(metaclass)
查看>>
Java编程的逻辑 (44) - 剖析TreeSet
查看>>
address元素
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
详解ASP.NET Core Docker部署
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
elasticsearch
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>