写点什么

LevelDB Java&Go 实践

作者:FunTester
  • 2021 年 11 月 16 日
  • 本文字数:1471 字

    阅读完需:约 5 分钟

最近学习出现了一个分叉:levelDB,前进的路上总有意外,经过短暂学习已经掌握了基本使用,并没有阻碍太长时间。


今天就分享一下 levelDB API 在 Java & Go 两种语言中的基本使用。体验下来 levelDB 像是个简化版本的 Redis,如果作为本地数据库的话,还是非常好用的,特别是用到本地缓存的时候。官方给的使用场景是适合大量写入少量读取,特别适合做性能测试数据记录。以后有机会我会做一个基于 levelDB 的性能测试数据收集工具。

levelDB 简介

LevelDB 是由 Google 构建的键/值存储。它可以支持从字符串键到字符串值的有序映射。LevelDB 的核心存储架构是日志结构合并树(LSM),它是一种写优化的 B 树变体。它针对大型顺序写入而不是小型随机写入进行了优化。


PS:其实在使用依赖库进行 levelDB 操作的时候并不需要安装 levelDB,这个弯路阻碍了我将近一个小时。

Java

虽然说是 Java,但是 Groovy 也可以这么用,为了使更容易阅读,我只分享 Java 的使用。

依赖

Maven:


<!-- https://mvnrepository.com/artifact/org.iq80.leveldb/leveldb --><dependency>    <groupId>org.iq80.leveldb</groupId>    <artifactId>leveldb</artifactId>    <version>0.12</version></dependency>
复制代码


Gradle:


// https://mvnrepository.com/artifact/org.iq80.leveldb/leveldbimplementation group: 'org.iq80.leveldb', name: 'leveldb', version: '0.12'
复制代码

基本操作

打开一个数据库文件:


        Iq80DBFactory factory = Iq80DBFactory.factory;        Options options = new Options();        DB db = factory.open(new File("fun"), options);
复制代码


添加一个 key 和 value:


        db.put(bytes("scores"), bytes("scoreJSON.toString())"));
复制代码


这里用到了org.iq80.leveldb.impl.Iq80DBFactory#bytes这个方法,当然也可以自己封装一个方法。


获取一个 key 的 value:


        byte[] scores = db.get(bytes("scores"));
复制代码


返回值也是数组,还需要进一步转化成我们目标对象。


删除一个 key:


db.delete(bytes("fun"));
复制代码


遍历数据库:


        DBIterator iterator = db.iterator();        while (iterator.hasNext()) {            Map.Entry<byte[], byte[]> next = iterator.next();            output(next.getKey());        }
复制代码


关闭数据库:


        db.close();
复制代码


然后我们就能在当前目录下看到fun目录下有一堆文件:后缀为 sst 以及 CURRENT、LOCK 等等。

Go

依赖

  github.com/syndtr/goleveldb v1.0.0
复制代码

基础操作

基本操作

打开一个数据库文件:


  db, err := leveldb.OpenFile("funtester", nil)  if err != nil {    log.Println("创建出错!", err)  }
复制代码


添加一个 key 和 value:


  db.Put([]byte(task.FunTester), fun, nil)
复制代码


这里建议自己封装一个方法。


获取一个 key 的 value:


  get, er := db.Get([]byte(task.FunTester), nil)
复制代码


返回值也是数组,还需要进一步转化成我们目标对象。


删除一个 key:


  db.Delete([]byte("test"), nil)
复制代码


遍历数据库:


  iterator := db.NewIterator(nil, nil)  for iterator.Next() {    key := iterator.Key()    value := iterator.Value()    log.Printf("数据key:%s,value:%s", key, value)  }
复制代码


关闭数据库:


  db.Close()
复制代码

欢迎关注 FunTester,Have Fun ~ Tester !

发布于: 5 小时前阅读数: 7
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
LevelDB Java&Go实践