当前位置: 首页 > 工具软件 > Bolt project > 使用案例 >

284-bolt数据库入门

岳茂
2023-12-01





bolt数据库入门



我们来使用一下bolt数据库

特点:
1.轻量级
2.开源
3.go语言实现
4.key-value进行读写



我们打开github搜索一下bolt
找到bolt
https://github.com/boltdb/bolt




我们看下简介
Bolt is a pure Go key/value store inspired by Howard Chu's LMDB project. 
The goal of the project is to provide a simple, fast, and reliable database for projects 
that don't require a full database server such as Postgres or MySQL.

翻译一下
Bolt是一个纯净的go语言的key-value存储,是受到LMDB项目的启发而设计出来的
这个项目的目标是提供一个简单,快速,可靠的数据库
为那些不需要完整数据库服务(比如Postgres或者MySQL)的项目提供支持





然后我们看下他的用法简介

To start a read-write transaction, you can use the DB.Update() function:

err := db.Update(func(tx *bolt.Tx) error {
	...
	return nil
})




Using key/value pairs
To save a key/value pair to a bucket, use the Bucket.Put() function:

db.Update(func(tx *bolt.Tx) error {
	b := tx.Bucket([]byte("MyBucket"))
	err := b.Put([]byte("answer"), []byte("42"))
	return err
})
This will set the value of the "answer" key to "42" in the MyBucket bucket. To retrieve this value, we can use the Bucket.Get() function:

db.View(func(tx *bolt.Tx) error {
	b := tx.Bucket([]byte("MyBucket"))
	v := b.Get([]byte("answer"))
	fmt.Printf("The answer is: %s\n", v)
	return nil
})







然后我们来简单说一下bolt的存储结构

首先第一层
1.数据库的名字 test.db

然后第二层
2.bucket 
这里的bucket就是桶的意思
我们可以理解为容器
这里我们可以有很多个bucket
testBucket01
testBucket02
testBucket03

然后第三层
3.key-value键值对
一个bucket里面存储很多键值对
key-value都是[]byte ==> []byte






然后我们来使用一下bolt
来点代码
写个例子





我们把步骤写出来
func main() {

	//1.创建数据库
	//2.操作数据库
	//	- 写入数据
	//	- 读取数据

}




然后写一下

//1.创建数据库
db, err := bolt.Open(dbName, 0600, nil)
if err!=nil{
	panic(err)
}

defer db.Close()

//2.操作数据库
db.Update(func(tx *bolt.Tx) error{
	
	//1.检查bucket是否存在
	b := tx.Bucket([]byte(bucketName))

	if b == nil{
	b, err = tx.CreateBucket([]byte(bucketName))
	if err !=nil{
	panic(err)
	}
	}

	//2.写入数据
	b.Put([]byte("111"), []byte("hello"))
	b.Put([]byte("222"), []byte("world"))

	//3.读取数据
	v1 := b.Get([]byte("111"))
	v2 := b.Get([]byte("222"))
	v3 := b.Get([]byte("333"))

	return nil
})






然后我们看一下完整代码

package main

import (
	"../lib/bolt-master"
	"fmt"
)

const dbName = "test.db"
const bucketName = "testBucket"

func main() {

	//1.创建数据库
	db, err := bolt.Open(dbName, 0600, nil)
	if err != nil {
		panic(err)
	}

	defer db.Close()

	//2.操作数据库
	db.Update(func(tx *bolt.Tx) error {

		//1.检查bucket是否存在
		b := tx.Bucket([]byte(bucketName))

		if b == nil {
			b, err = tx.CreateBucket([]byte(bucketName))
			if err != nil {
				panic(err)
			}
		}

		//2.写入数据
		b.Put([]byte("111"), []byte("hello"))
		b.Put([]byte("222"), []byte("world"))

		//3.读取数据
		v1 := b.Get([]byte("111"))
		v2 := b.Get([]byte("222"))
		v3 := b.Get([]byte("333"))

		fmt.Println(string(v1))
		fmt.Println(string(v2))
		fmt.Println(string(v3))

		return nil
	})

}






 

 类似资料: