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简单使用教程的更多相关文章

  1. OpenMP的简单使用教程

    转自:http://binglispace.com/2015/01/09/openmp-intro/ OpenMP的简单使用教程 今天有幸参加了一个XSEDE OpenMP的workshop讲座,真是 ...

  2. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  3. knockout简单实用教程3

    在之前的文章里面介绍了一些KO的基本用法.包括基本的绑定方式,基本的ko的绑定语法包括text绑定,html绑定等等(如有不明请参照上两篇文章),下面呢介绍一下关于ko的其他方面的知识.包括比较特殊绑 ...

  4. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  5. sea.js简单使用教程

    sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...

  6. vim简单使用教程【转】

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...

  7. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  8. 【git】git简单使用教程

    git的简单使用教程: 1.安装git bash客户端 2.打开git bash,cd到需要存储代码的路径下, 执行:git clone -b deploy ssh://git@gitlab.xxxx ...

  9. Flyway 简单入门教程

    原文地址:Flyway 简单入门教程 博客地址:http://www.extlight.com 一.前言 Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway 可以 ...

随机推荐

  1. [Micropython]TPYBoard v10x NRF24L01无线通讯模块使用教程

    1.实验目的: •       学习使用NRF24L01无线通讯模块 2.所需原器件: •       TPYBoard v10X开发板两块 •       NRF24L01无线通讯模块两个 •    ...

  2. Maven手动添加jar包

    有的jar在Maven中找不到则需要手动添加(如ojdbc14.jar) 方法如下: 一.将你要添加的jar包放到指定目录(在该目录下打开命令窗口) 二.输入指令:mvn install:instal ...

  3. REBEL IDEA热部署插件使用

    启动 一.在IDEA 的Plugins中搜索Jrebel for intellij 插件 二.https://my.jrebel.com/account/how-to-activate 注册或者使用f ...

  4. lambda函数常见用法

    # lambda 参数:返回值/表达式 # print((lambda :100)()) # f = lambda a,b : a + b # print(f(10, 20)) # f = lambd ...

  5. python爬虫入门(六) Scrapy框架之原理介绍

    Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...

  6. ubuntu宽带连接

    1.打开终端:    输入:sudo pppoeconf    根据提示输入宽带用户名和密码,若提示Plugin rp-pppoe.so loaded.则已连接成功.2.手动开启/断开连接:    p ...

  7. echarts3 迁徙图 迁入迁出

    geoCoordMap = { '上海': [121.4648,31.2891], '佛山': [112.8955,23.1097], '保定': [115.0488,39.0948], '兰州': ...

  8. ES的基本用法

    ES的基本概念 1> 集群和节点 一个es集群是由一个或多和es节点组成的集合 每一个集群都有一个名字, 如之前的wali 每个节点都有自己的名字, 如之前的master, slave1, sl ...

  9. 【转】数据库事务ACID以及事务隔离

      本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...

  10. 计算机网络相关:应用层协议(一):DNS

    DNS 1.概念  DNS是:  1)  一个有分层的DNS服务器实现的分布式数据库  2)一个使得主机能够查询分布式数据库的应用协议.  它运行在UDP之上,默认使用53号端口.  主要功能 是将主 ...