我是靠谱客的博主 等待书本,最近开发中收集的这篇文章主要介绍商业公链之区块链技术使用的常见库(三)------Go语言键值数据库 ”github.com/syndtr/goleveldb/leveldb”,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

levelDB是Google开源的KeyValue文件数据库,LevelDB是一个非常高效的kv数据库,1.2-version就能够支持billion级的数据量了,在这个数量级下还有着非常高的性能,主要归功于它的良好设计,特别是LSM算法.特点:

1.key和value都是任意长度的字节数组;

2.entry(即一条k-v记录)默认是按照key的字典顺序存储的,开发者开源重载这个排序函数;

3.提供了一些基本接口

4.支持批量操作以原子操作进行

5.开源创建数据全景的snapshot(快照),并允许在快照中查询

6.开源通过向前(后)迭代器遍历数据(迭代器隐含的创建一个snapshot)

7.自动使用Snappy压缩数据;

8.可移植性.

限制:

1.NoSQL,不支持sql语句,也不支持索引;

2.一次只允许一个进程访问一个特定的数据库;

3.没有内置的C/S架构,开发者需要使用LevelDB库自己封装一个server;

 

1.安装kv数据库leveldb:go get github.com/syndtr/goleveldb/leveldb

2.通过数据库路径创建或打开一个数据库,可选使用boom过滤器:db,err := leveldb.OpenFile("F:\work\testdb\db", nil)

o := &opt.Options{

    Filter: filter.NewBloomFilter(10),

}

db, err := leveldb.OpenFile("F:\work\testdb\db", o)

3.数据库存入键值数据:db.Put([]byte("2"), []byte("6"), nil)

4.遍历数据库内容,返回底层最新数据库快照的迭代器,可以设置返回不同快照:iter := db.NewIterator(nil, nil)

读取快照迭代器每一个键值:

for iter.Next() {

fmt.Printf("[%s]:%sn", iter.Key(), iter.Value())

}

最后必须release释放和检查error:

iter.Release()

err = iter.Error()

if err != nil {

panic(err)

}

5.删除某条数据:err = db.Delete([]byte("2"), nil)

6.读取某条数据:data, err := db.Get([]byte("2"), nil)  fmt.Printf("[2]:%s:%sn",data,err)

7.根据前缀"foo-"遍历数据库内容:iter = db.NewIterator(util.BytesPrefix([]byte("foo-")), nil)

8.遍历从指定 key开始,包括指定key:

iter = db.NewIterator(nil, nil)

for ok := iter.Seek([]byte("5")); ok; ok = iter.Next() {

fmt.Printf("[%s]:%sn", iter.Key(), iter.Value())

}

9.遍历子集范围,以start开始到limit为止,包括两边:

iter = db.NewIterator(&util.Range{Start: []byte("foo"), Limit: []byte("loo")}, nil)

for iter.Next() {

fmt.Printf("[%s]:%sn", iter.Key(), iter.Value())

}

10.批量处理数据,包括写入删除:

batch := new(leveldb.Batch)

batch.Put([]byte("foo"), []byte("value"))

batch.Put([]byte("bar"), []byte("another value"))

batch.Delete([]byte("baz"))

err = db.Write(batch, nil)

11.获取数据库快照:

snapshot, i := db.GetSnapshot()

    fmt.Println(snapshot)//leveldb.Snapshot{22}

    fmt.Println(i)//<nil>

    //注意: The snapshot must be released after use, by calling Release method.

    //也就是说snapshot在使用之后,必须使用它的Release方法释放!

    snapshot.Release()

示例源码:阅读原文即可获得,用法文档:https://godoc.org/github.com/syndtr/goleveldb/leveldb#OpenFile

希望大家关注我的微信公众号,日更一篇区块链技术博客不易,有疑问可以后台留言。

最后

以上就是等待书本为你收集整理的商业公链之区块链技术使用的常见库(三)------Go语言键值数据库 ”github.com/syndtr/goleveldb/leveldb”的全部内容,希望文章能够帮你解决商业公链之区块链技术使用的常见库(三)------Go语言键值数据库 ”github.com/syndtr/goleveldb/leveldb”所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部