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 可以 ...
随机推荐
- python flask中的代码约定
在Python社区中有许多关于代码风格的约定.如果你写过一段时间Python了,那么也许对此已经有些了解. 我会简单介绍一下,同时给你一些URL链接,从中你可以找到关于这个话题的详细信息. 让我们提出 ...
- SOFA 源码分析— 自定义路由寻址
前言 SOFA-RPC 中对服务地址的选择也抽象为了一条处理链,由每一个 Router 进行处理.同 Filter 一样, SOFA-RPC 对 Router 提供了同样的扩展能力. 那么就看看 SO ...
- 学生管理系统_排序后通过name删除列表里的字典
l = [{'name': 'wangfan', 'age': 18, 'sex': 'nan'}, {'name': 'wangerfan', 'age': 10, 'sex': 'nan'}, { ...
- JAVA小记 (1)
JVM: Java虚拟机 JVM个数取决于同时执行的程序个数 JDK:JAVA 开发工具包 Java利用JVM实行跨平台 JRE:Java运行环境 JavaSE:企业版 GC:垃圾回收机制 命名规范 ...
- 1 Numpy-科学计算
在Python中,使用list可以保存一组值,可以作为数组使用,但是比较浪费内存和时间.类似的array模块,不支持多维,也没有各种函数运算,因此也极其不方便. 为解决这一问题,Python提供了Nu ...
- [ 搭建Redis本地服务器实践系列 ] :序言
说起来,是在一个气候适宜的下午,虽然临近下班,不过办公室里还是充满了忙碌的身影,不时的还会从办公区传来小伙伴们为了一个需求而激烈争论的声音,自从入了互联网这个行业,说实话,也就很少休息了,当然了也不全 ...
- Linux内核中的算法和数据结构
算法和数据结构纷繁复杂,但是对于Linux Kernel开发人员来说重点了解Linux内核中使用到的算法和数据结构很有必要. 在一个国外问答平台stackexchange.com的Theoretica ...
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...
- sql server导出数据结构
http://jingyan.baidu.com/article/eae07827ad76ba1fed548573.html
- 『网络の转载』px与em的区别
这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平时都是用p ...