LevelDB Java&Go实践
最近学习出现了一个分叉:levelDB,前进的路上总有意外,经过短暂学习已经掌握了基本使用,并没有阻碍太长时间。
今天就分享一下levelDB API在Java & Go两种语言中的基本使用。体验下来levelDB像是个简化版本的Redis,如果作为本地数据库的话,还是非常好用的,特别是用到本地缓存的时候。官方给的使用场景是适合大量写入少量读取,特别适合做性能测试数据记录。以后有机会我会做一个基于levelDB的性能测试数据收集工具。
levelDB简介
LevelDB 是由 Google 构建的键/值存储。它可以支持从字符串键到字符串值的有序映射。LevelDB 的核心存储架构是日志结构合并树(LSM),它是一种写优化的 B 树变体。它针对大型顺序写入而不是小型随机写入进行了优化。
PS:其实在使用依赖库进行levelDB操作的时候并不需要安装levelDB,这个弯路阻碍了我将近一个小时。
Java
虽然说是Java,但是Groovy也可以这么用,为了使更容易阅读,我只分享Java的使用。
依赖
Maven:
org.iq80.leveldb
leveldb
0.12
Gradle:
// https://mvnrepository.com/artifact/org.iq80.leveldb/leveldb
implementation 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 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 !
- 140道面试题目(UI、Linux、MySQL、API、安全)
- 图解HTTP脑图
- 分享一份Fiddler学习包
- 线程池处理批量接口请求实践
- 10万QPS,K6、Gatling和FunTester终极对决!
- 性能瓶颈调优【粉丝投稿】
- 如何选择API测试工具
- 初学者的API测试技巧
- API自动化测试指南
- API测试基础
- 无数据驱动自动化测试
- 自动化和手动测试,保持平衡!
- 43种常见软件测试分类