JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构
一、简介
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); } } }
宋兴柱:转载内容,请标明出处,谢谢!源文来自 宝贝云知识分享:https://www.dearcloud.cn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决