一、简介

  JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构

二、依赖

        <!-- https://mvnrepository.com/artifact/org.fusesource.leveldbjni/leveldbjni-all -->
<dependency>
<groupId>org.fusesource.leveldbjni</groupId>
<artifactId>leveldbjni-all</artifactId>
<version>1.8</version>
</dependency>

三、代码

package com.dearcloud.utils.leveldb;

import lombok.extern.log4j.Log4j2;
import org.fusesource.leveldbjni.JniDBFactory;
import org.iq80.leveldb.DB;
import org.iq80.leveldb.Options; import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentLinkedQueue; @Log4j2
public class LeveldbUtils {
private DB db;
private File file;
private Options options; public LeveldbUtils(File file, Integer cahceSize, Integer blockSize) {
Objects.requireNonNull(file);
File[] files = file.listFiles();
if (files != null && files.length > 0) {
log.warn("levelDb directory is not empty. file=[{}]", file);
}
this.file = file;
if (blockSize == null) blockSize = 1024 * 1024 * 10;
if (cahceSize == null) cahceSize = 1024 * 1024 * 20;
options = new Options();
options.cacheSize(cahceSize);
options.blockSize(blockSize);
options.maxOpenFiles(5);
options.writeBufferSize(10000000);//单个文件32MB
reOpenDb();
} private void openDb() {
synchronized (this) {
boolean isok = false;
try {
JniDBFactory.factory.destroy(file, options);
isok = true;
} catch (Exception ex) {
log.warn("levelDb destroy failed. file=[{}]", file);
}
try {
db = JniDBFactory.factory.open(file, options);
isok = isok && true;
} catch (IOException e) {
log.error("levelDb rebuild init failed. file=[{}]", file);
}
if (isok)
log.info("leveldb rebuild success.");
}
} public synchronized void put(String key, byte[] value) {
try {
db.put(JniDBFactory.bytes(key), value);
} catch (Exception ex) {
log.warn("[save to localDb] save single item to localDb failed.", ex);
}
} public synchronized void put(ConcurrentLinkedQueue<Map.Entry<byte[], byte[]>> data) {
for (Map.Entry<byte[], byte[]> datum : data) {
try {
db.put(datum.getKey(), datum.getValue());
} catch (Exception ex) {
log.warn("[save to localDb] save to localDb failed.", ex);
}
} } public synchronized void close() {
try {
db.close();
JniDBFactory.factory.destroy(file, options);
} catch (IOException e) {
log.error("[LeveldbUtils]:levelDb close failed.", e);
}
} }

JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构的更多相关文章

  1. linux和window环境下安装ruby和sass

    linux下安装ruby 下载linux的ruby安装包    http://www.ruby-lang.org/en/downloads/ 将ruby安装包在linux环境下解压    tar -x ...

  2. java中调用dll文件的两种方法

    一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNativ ...

  3. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  4. 在Java中调用Python

    写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...

  5. 在Java中调用Python代码

    极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...

  6. Tensorflow 保存模型 & 在java中调用

    本节涉及: 保存TensorFlow 的模型供其他语言使用 java中调用模型并进行预测计算 一.保存TensorFlow 的模型供其他语言使用 如果用户选择“y” ,则执行下面的步骤: 判断程序执行 ...

  7. Java中调用c/c++语言出现Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V...错误

    错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/S ...

  8. java中调用js脚本

    JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...

  9. autoit 处理文件上传弹出框,并在JAVA中调用

    Java  代码 //定义exe 文件存放的绝对路径 File file2 = new File("."); String command = file2.getCanonical ...

随机推荐

  1. 三级区域jquery插件

    /*! * Distpicker v1.0.4 * https://github.com/fengyuanchen/distpicker * * Copyright (c) 2014-2016 Fen ...

  2. hive中使用union出现异常数据

    select * from tbl where id=2 union select * from tbl where id =1 如果hive使用union这么查询的时候,我们会发现数据变乱了. 解决 ...

  3. scrapy meta不用pipe用命令-o

    1. spider代码: # -*- coding: utf-8 -*- import scrapy from tencent1.items import Tencent1Item import js ...

  4. Idea中快捷键与小技巧的总结-->持续更新

    1.Scala类或单例对象中快速声明实例对象: eg. new SparkContext(conf).var 系统会自动提示,可以自动补全,如图: 2.ctrl+i与ctrl+o的区别: ctrl + ...

  5. [ 中危 ] 发布处存在CSRF及CSRF设想

    漏洞存在于菜品发布处,使用A账号在添加/发布菜品的时候拦截数据包,使用burpsuite构造 CSRF的POC,再用B账号打开该HTML POC ,生成菜品. 该CSRF400RMB,主要因为是核心业 ...

  6. UML图快速入门

    UML(Unified Modeling Language)统一建模语言的概念已经出现了近20年,虽然并不是所有的概念都非常有实践意义,但常见的用例图.类图.序列图和状态图却实实在在非常有效,是项目中 ...

  7. Linux学习笔记6

    less 命令 空格或者 ctrl+f  前进一屏 ctrl+b  回退一屏 回车    前进一行 /String 查找含有string 字符串的页 ?String  同上 <反方向查找> ...

  8. DataGridView获取或者设置当前单元格的内容

    当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得.如果当前单元格不存在的时候,返回null. 取得当前单元格的内容: o ...

  9. 在UnrealEngine中用Custom节点实现毛玻璃的效果

    本人在论坛上找到了一篇实现毛玻璃效果的文章:https://forums.unrealengine.com/showthread.php?70143-So-Blurred-glass-material ...

  10. java的类和对象

    创建狗狗类: /** * 狗狗类 * @author Administrator * */ public class Dog { String name="无名氏"; //姓名 i ...