BoltDB简单使用教程
1.BoltDB简介
Bolt是一个纯粹Key/Value模型的程序。该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速,可靠的数据库。
BoltDB只需要将其链接到你的应用程序代码中即可使用BoltDB提供的API来高效的存取数据。而且BoltDB支持完全可序列化的ACID事务,让应用程序可以更简单的处理复杂操作。
其源码地址为:https://github.com/boltdb/bolt
2.BoltDB特性
BoltDB设计源于LMDB,具有以下特点:
使用Go语言编写
不需要服务器即可运行
支持数据结构
直接使用API存取数据,没有查询语句;
支持完全可序列化的ACID事务,这个特性比LevelDB强;
数据保存在内存映射的文件里。没有wal、线程压缩和垃圾回收;
通过COW技术,可实现无锁的读写并发,但是无法实现无锁的写写并发,这就注定了读性能超高,但写性能一般,适合与读多写少的场景。
BoltDB是一个Key/Value(键/值)存储,这意味着没有像SQL RDBMS(MySQL,PostgreSQL等)中的表,没有行,没有列。相反,数据作为键值对存储(如在Golang Maps中)。键值对存储在Buckets中,它们旨在对相似的对进行分组(这与RDBMS中的表类似)。因此,为了获得Value(值),需要知道该Value所在的桶和钥匙。
3.BoltDB的安装
Linux中:
$ go get github.com/boltdb/bolt/...
Windows中:
1.前提是已经安装GO语言环境.
2.安装git for windows :
http://git-for-windows.github.io/
3.安装Git后才能执行命令:
go get github.com/boltdb/bolt/...
来安装第三方包。这条命令它会把 类库包源代码,下载解压到你的 %GOPATH% 路径里面去,比如:C:\go\gopath\ src\github.com\...
前面是gopath路径,后面是类库,并且它还会同时执行 go install xxx ,生成 D:\go\gopath\pkg\xxxx 这样的包路径。
注意:
【在GoLand开发工具中,是可以直接获取GitHub中的源代码的,该方法更便捷!】

4. 在代码中导入第三方包:
import (
"github.com/boltdb/bolt" // 从环境变量:%goPath% 中定义的路径去查找第三方类库
)
4.BoltDB简单使用
4.1 打开或创建数据库
//1.数据库创建
//在这里gland直接运行,生成的my.db在main.go上层目录;命令行build在运行的话是当前目录!!!
db, err := bolt.Open("chaorsBlock.db", , nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
注意:
如果通过goland程序运行创建的my.db会保存在$GOPATH /src/Project目录下
如果通过go build main.go ; ./main 执行生成的my.db,会保存在当前目录$GOPATH /src/Project/package下
4.2 数据库操作
4.2.1 创建数据库表
//2.创建表
err = db.Update(func(tx *bolt.Tx) error { //判断要创建的表是否存在
b := tx.Bucket([]byte("MyBlocks"))
if b == nil { //创建叫"MyBucket"的表
_, err := tx.CreateBucket([]byte("MyBlocks"))
if err != nil {
//也可以在这里对表做插入操作
log.Fatal(err)
}
} //一定要返回nil
return nil
}) //更新数据库失败
if err != nil {
log.Fatal(err)
}
4.2.2 更新
//3.更新表数据
err = db.Update(func(tx *bolt.Tx) error { //取出叫"MyBucket"的表
b := tx.Bucket([]byte("MyBlocks")) //往表里面存储数据
if b != nil {
//插入的键值对数据类型必须是字节数组
err := b.Put([]byte("l"), []byte("0x0000"))
err := b.Put([]byte("ll"), []byte("0x0001"))
err := b.Put([]byte("lll"), []byte("0x0002"))
if err != nil {
log.Fatal(err)
}
} //一定要返回nil
return nil
}) //更新数据库失败
if err != nil {
log.Fatal(err)
}
4.2.3 查询
//4.查看表数据
err = db.View(func(tx *bolt.Tx) error { //取出叫"MyBucket"的表
b := tx.Bucket([]byte("MyBlocks")) //往表里面存储数据
if b != nil { data := b.Get([]byte("l"))
fmt.Printf("%s\n", data)
data := b.Get([]byte("l"))
fmt.Printf("%s\n", data)
} //一定要返回nil
return nil
}) //查询数据库失败
if err != nil {
log.Fatal(err)
}
BoltDB简单使用教程的更多相关文章
- OpenMP的简单使用教程
转自:http://binglispace.com/2015/01/09/openmp-intro/ OpenMP的简单使用教程 今天有幸参加了一个XSEDE OpenMP的workshop讲座,真是 ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- knockout简单实用教程3
在之前的文章里面介绍了一些KO的基本用法.包括基本的绑定方式,基本的ko的绑定语法包括text绑定,html绑定等等(如有不明请参照上两篇文章),下面呢介绍一下关于ko的其他方面的知识.包括比较特殊绑 ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
- sea.js简单使用教程
sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...
- vim简单使用教程【转】
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- 简单脱壳教程笔记(2)---手脱UPX壳(1)
本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...
- 【git】git简单使用教程
git的简单使用教程: 1.安装git bash客户端 2.打开git bash,cd到需要存储代码的路径下, 执行:git clone -b deploy ssh://git@gitlab.xxxx ...
- Flyway 简单入门教程
原文地址:Flyway 简单入门教程 博客地址:http://www.extlight.com 一.前言 Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway 可以 ...
随机推荐
- C#实现的HttpGet请求
话不多说,代码贴上: /// <summary> /// HTTP Get请求 /// </summary> /// <param name="url" ...
- TCP分组交换详解
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- python_黑洞数
>>> def main(n): start = 10**(n-1)+2 end = start*10-20 for i in range(start,end): i = str(i ...
- Pat1108: Finding Average
1108. Finding Average (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The b ...
- PAT1093: Count PAT's
1093. Count PAT's (25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Peng The strin ...
- 对混合数值,字符,null的字段进行排序
今天有个需求是进行排序. 这一列值是字符串类型的, 但是里面有数值型 比如"1" 和null类型的. 实现效果是需要 数值型的先按照数值的方式先排,然后字符串按照字符传排,最后 ...
- 使用Docker部署Spring boot项目
Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...
- 浅谈前端中的mvvm与mvc
用了vue这么久,却没有认真的关注mvvm与mvc,着实汗颜.趁着周末刚好看了一下网上的文章还有书籍,简单的谈一下我的理解. -以下图片均摘自网络. 一.MVC 特点:单项通讯 视图(View):用户 ...
- Python 可视化工具 Matplotlib
英文出处:Chris Moffitt. Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表.本文主要介绍了在学习Matplotlib时 ...
- APP内置react 应用与APP的交互问题
一.内置的H5应用唤起(返回)app 可以用 intent url 来唤起,但要求 webview 实现 shouldOverrideUrlLoading() ,解析 uri,找到对应的 activi ...