Leveldb 是Google 开源的高性能的key-value 数据库,原来由C++ 写,现在由官方用go 实现,效果更好。
下面是入门介绍
安装
1
go get github.com/syndtr/goleveldb/leveldb
系统要求
- go 版本
go1.2
以上
基本使用示例
建立或打开一个数据库:
1
2
3
4
db, err := leveldb.OpenFile("path/to/db", nil)
...
defer db.Close()
...
读或写数据库:
1
2
3
4
5
6
7
// 注意:返回数据结果不能修改
data, err := db.Get([]byte("key"), nil)
...
err = db.Put([]byte("key"), []byte("value"), nil)
...
err = db.Delete([]byte("key"), nil)
...
数据库遍历:
1
2
3
4
5
6
7
8
9
iter := db.NewIterator(nil, nil)
for iter.Next() {
key := iter.Key()
value := iter.Value()
...
}
iter.Release()
err = iter.Error()
...
迭代查询:
1
2
3
4
5
6
7
8
iter := db.NewIterator(nil, nil)
for ok := iter.Seek(key); ok; ok = iter.Next() {
// Use key/value.
...
}
iter.Release()
err = iter.Error()
...
按区间查询:
1
2
3
4
5
6
7
8
iter := db.NewIterator(&util.Range{Start: []byte("foo"), Limit: []byte("xoo")}, nil)
for iter.Next() {
// Use key/value.
...
}
iter.Release()
err = iter.Error()
...
按前缀查询:
1
2
3
4
5
6
7
8
iter := db.NewIterator(util.BytesPrefix([]byte("foo-")), nil)
for iter.Next() {
// Use key/value.
...
}
iter.Release()
err = iter.Error()
...
批量写:
1
2
3
4
5
6
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)
...
不使用内存数据,直接取硬盘数据:
1
2
3
4
5
6
7
o := &opt.Options{
Filter: filter.NewBloomFilter(10),
}
db, err := leveldb.OpenFile("path/to/db", o)
...
defer db.Close()
...
本文网址: https://golangnote.com/topic/81.html 转摘请注明来源