GolangNote

Golang笔记

Golang Leveldb 基本使用的例子

Permalink

Leveldb 是Google 开源的高性能的key-value 数据库,原来由C++ 写,现在由官方用go 实现,效果更好。

下面是入门介绍

安装

Bash: leveldb 安装
1
go get github.com/syndtr/goleveldb/leveldb

系统要求

  • go 版本go1.2 以上

基本使用示例

建立或打开一个数据库:

Go: 打开 leveldb
1
2
3
4
db, err := leveldb.OpenFile("path/to/db", nil)
...
defer db.Close()
...

读或写数据库:

Go: 读写 leveldb
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)
...

数据库遍历:

Go: 遍历 leveldb
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()
...

迭代查询:

Go: leveldb 迭代查询
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()
...

按区间查询:

Go: leveldb 按区间查询
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()
...

按前缀查询:

Go: leveldb 按前缀查询
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()
...

批量写:

Go: 批量写 leveldb
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)
...

不使用内存数据,直接取硬盘数据:

Go: leveldb 直接取硬盘数据
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()
...

  • 项目地址: goleveldb
  • Goleveldb 官方文档
  • 一个以 leveldb 为底层的数据库 sdb

本文网址: https://golangnote.com/topic/81.html 转摘请注明来源

Related articles

golang snappy 的使用场合

google 自家的 snappy 压缩优点是非常高的速度和合理的压缩率。压缩率比 gzip 小,CPU 占用小。...

golang Selenium WebDriver 使用记录

Selenium WebDriver 直接通过浏览器自动化的本地接口来调用浏览器,以达到模拟浏览器行为的操作,如点击、选择、鼠标移动等。下面是记录个人使用golang 驱动的记录。...

Golang Range 的性能提升Tip

Go 语言里使用 range 可以方便遍历数组(array)、切片(slice)、字典(map)和信道(chan)。这里主要关注他们的性能。...

Golang 实现 10 进制转 N 进制

给定一个不没有重复字符的字符串,如 `[0-9,a-z]`,把一个 10 进制数字转为,该字符集的字符串。应用场合如汽车牌、顺序计数。...

Write a Comment to "Golang Leveldb 基本使用的例子"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.22.3 Processed in 0ms