LevelDB
LevelDB是一个键值对的嵌入式数据库,拥有非常高的性能。
嵌入式数据库就是我们不需要安装,该数据库软件直接打包在我们的应用中。
package main
import (
"fmt"
"time"
"github.com/syndtr/goleveldb/leveldb"
dbUtil "github.com/syndtr/goleveldb/leveldb/util"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Addr string `json:addr`
}
func main() {
// 打开数据库
db, err := leveldb.OpenFile("./datadb.db", nil)
if err != nil {
fmt.Println("创建数据库失败:", err)
return
}
defer db.Close()
t := time.Now()
for i := 0; i < 10_0000; i++ {
key := fmt.Sprintf("key-%d", i)
value := fmt.Sprintf("value-%d", i)
//写入数据
db.Put([]byte(key), []byte(value), nil)
}
t1 := time.Now()
fmt.Println("write 10_0000 data used ", t1.UnixMilli()-t.UnixMilli(), "ms")
for i := 0; i < 10_0000; i++ {
key := fmt.Sprintf("key-%d", i)
//读取数据
_, err := db.Get([]byte(key), nil)
if err != nil {
fmt.Println("read error:", key)
}
}
t2 := time.Now()
fmt.Println("read 10_0000 data used ", t2.UnixMilli()-t1.UnixMilli(), "ms")
// 遍历数据库
iter := db.NewIterator(nil, nil)
for iter.Next() {
key := iter.Key()
value := iter.Value()
_ = len(key) + len(value)
}
t3 := time.Now()
fmt.Println("iterator 10_0000 data used ", t3.UnixMilli()-t2.UnixMilli(), "ms")
// 遍历数据库
iter = db.NewIterator(dbUtil.BytesPrefix([]byte("key-1")), nil)
for iter.Next() {
key := iter.Key()
value := iter.Value()
_ = len(key) + len(value)
}
t4 := time.Now()
fmt.Println("iterator 10000 data used ", t4.UnixMilli()-t3.UnixMilli(), "ms")
// 读取最后一个
// iter.last()
// 删除
// err := db.Delete([]byte("user-10000"), nil)
}
/*
write 10_0000 data used 245 ms
read 10_0000 data used 48 ms
iterator 10_0000 data used 4 ms
iterator 10000 data used 1 ms
*/