Java LevelDB 初体验

本贴最后更新于 2534 天前,其中的信息可能已经斗转星移

前言

LevelDB 是一种Key-Value存储数据库 性能非常强悍 百度百科上介绍 可以支撑十亿级 这段时间在研究区块链的时候发现的这个数据库

引入 SDK

<dependency> <groupId>org.iq80.leveldb</groupId> <artifactId>leveldb-api</artifactId> <version>0.10</version> </dependency> <dependency> <groupId>org.iq80.leveldb</groupId> <artifactId>leveldb</artifactId> <version>0.10</version> </dependency>

初始化 DB

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存储都是字节数组 所以这里需要转成字节数组 db.put(Iq80DBFactory.bytes(key), Iq80DBFactory.bytes(value));

获取 Value

byte[] bytes = db.get(Iq80DBFactory.bytes(key)); String value = Iq80DBFactory.asString(bytes);

删除 | 更改

//删除 db.delete(Iq80DBFactory.bytes(key)); //更改 重新put新的key - value即可 db.put(Iq80DBFactory.bytes(key), Iq80DBFactory.bytes(value));

遍历所有数据

public LinkedHashMap<String, String> iteratorDb() { DBIterator iterator = db.iterator(); LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>(); while (iterator.hasNext()) { Map.Entry<byte[], byte[]> next = iterator.next(); String key = Iq80DBFactory.asString(next.getKey()); String value = Iq80DBFactory.asString(next.getValue()); linkedHashMap.put(key, value); } return linkedHashMap; }

测试插入一百万条数据

基于 SpringBoot 搭建的控制器

随机生成 指定数量的 UUID 并且插入到 LevelDB

从请求 到响应 5.5 秒左右 如果再抛掉生成 UUID 的时间 可能更快 哈哈

@ResponseBody @GetMapping("/generate") public ResponeEntity generate(Long count) { DB db = levelDb.getDb(); //创建批量处理 WriteBatch batch = db.createWriteBatch(); for (int i = 0; i < count; i++) { String uuid = UUID.randomUUID().toString(); batch.put(Iq80DBFactory.bytes(uuid), Iq80DBFactory.bytes(uuid)); } //执行写入 db.write(batch); return buildRespone(null); }

测试从一百万数据中取出一条

PostMan 请求到响应时间 19 毫秒

@ResponseBody @GetMapping("/getLevel") public ResponeEntity getLevel(String key) { byte[] bytes = db.get(Iq80DBFactory.bytes(key)); String value = Iq80DBFactory.asString(bytes); return buildRespone(value); }

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 149 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 3 关注
  • LevelDB
    1 引用 • 5 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • hkpqazwsxedc

    强悍

  • linken via Ubuntu

    一百万竟然要 19 毫秒,这速度还不如 sqlite 这种数据库好嘛。。。

    1 回复
  • pencilso

    是吗.... 没测过 sqlite ...

  • pencilso

    今天试了一下,LevelDB 一亿条数据,随机查询在 500-600 毫秒左右。

  • pencilso

    刚刚又跑去测试了一下 Mysql,一亿条数据的话,主键,随机查询在 0.03 秒左右 ....