Go 使用leveldb
简介
LevelDB是一个由Google公司所研发的键-值存储嵌入式数据库管理系统编程库
leveldb是一个写性能十分优秀的存储引擎,是典型的LSM树(Log Structured-Merge Tree)实现。LSM树的核心思想就是放弃部分读的性能,换取最大的写入能力
比较使用读少写多的一种场景.以太坊、区块链
特点
- key和value都是任意长度的字节数据
- 提供了基本的增删改查接口
- 自动使用Snappy压缩数据
- 通过向前或者向后迭代器遍历数据
- 不支持sql语句, 不支持索引
- 一次只允许一个进程访问一个特定的数据库
初始化:
db, err := leveldb1.CreateLevelDB("./leveldb_data") if err != nil { log.Println("err:",err) }
//k - v
//k - v err = db.Put("test", "test") if err != nil { log.Println("err:",err) } val,err := db.Get("test") if err != nil { log.Println("err:",err) } log.Println("get data:", string(val))
//struct
//struct type Demo struct { Phone string ChannelId int Reason string } d := new(Demo) d.Phone = "18745682512" d.ChannelId = 1 d.Reason = "黑名单用户" db.Put("user-1", &d) obVal,err := db.Get("user-1") if err != nil { log.Println("err:",err) } log.Println("get data:", string(obVal))
//map
//map a := make(map[string]interface{}) a["id"] = 1 a["name"] = "map" db.Put("m", a) mVal,err := db.Get("m") if err != nil { log.Println("err:",err) } log.Println("get data:", string(mVal))
返回值参考:
拼搏在路上