这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
levelDB是一个kv型的文件数据库,支持按照文件大小来切分文件。
特点
LevelDB 是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
此处随机读是完全命中内存的速度,如果是不命中,速度大大下降。
缺点
1、NoSQL的数据库,不支持SQL语法,也不支持索引 2、一次只允许一个进程访问一个数据库
goleveldb
github网址:github.com/syndtr/gole…
下载
go get github.com/syndtr/goleveldb/leveldb
创建数据库
db, err := leveldb.OpenFile("path/to/db", nil)
defer db.Close()
读取或修改数据库内容
data, err := db.Get([]byte("key"), nil)
err = db.Put([]byte("key"), []byte("value"), nil)
err = db.Delete([]byte("key"), nil)
遍历数据库内容
iter := db.NewIterator(nil, nil)
for iter.Next() {
key := iter.Key()
value := iter.Value()
}
iter.Release()
err = iter.Error()
遍历特定前缀的数据库内容
iter := db.NewIterator(util.BytesPrefix([]byte("foo-")), nil)
for iter.Next() {
// Use key/value.
}
iter.Release()
err = iter.Error()
遍历特定范围的数据库内容
iter := db.NewIterator(&util.Range{Start: []byte("foo"), Limit: []byte("xoo")}, nil)
for iter.Next() {
// Use key/value.
}
iter.Release()
err = iter.Error()
批量写入
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)
使用布隆过滤器
o := &opt.Options{
Filter: filter.NewBloomFilter(10),
}
db, err := leveldb.OpenFile("path/to/db", o)
...
defer db.Close()