Go 使用leveldb
简介
LevelDB是一个由Google公司所研发的键-值存储嵌入式数据库管理系统编程库
leveldb是一个写性能十分优秀的存储引擎,是典型的LSM树(Log Structured-Merge Tree)实现。LSM树的核心思想就是放弃部分读的性能,换取最大的写入能力
比较使用读少写多的一种场景.以太坊、区块链
特点
- key和value都是任意长度的字节数据
- 提供了基本的增删改查接口
- 自动使用Snappy压缩数据
- 通过向前或者向后迭代器遍历数据
- 不支持sql语句, 不支持索引
- 一次只允许一个进程访问一个特定的数据库
初始化:
1 2 3 4 | db, err := leveldb1.CreateLevelDB( "./leveldb_data" ) if err != nil { log.Println( "err:" ,err) } |
//k - v
1 2 3 4 5 6 7 8 9 10 | //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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //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
1 2 3 4 5 6 7 8 9 10 11 | //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)) |
返回值参考:
拼搏在路上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通