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. 黄文俊:Serverless小程序后端技术分享

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储.容器平台.微服务架构.无服务器计算等领域 ...

  2. linux配置https站点

    配置https站点呢,那就需要https证书,证书从何而来,花钱买?no,no,no,阿里有免费的,只是比较难发现,下面就图文解说一下怎么买免费的阿里https证书 首先阿里云,登录,购买链接———— ...

  3. javaXML文件解析之DOM4J实操

    既然前面说了DOM4J这里好那里好,大家都是在用这个,那咱就不得不写一个了. XML文件: <?xml version="1.0" encoding="UTF-8& ...

  4. Centos下部署Flask

    尝试在Centos6.5下部署Flask应用并成功,记录一下步骤,参数为什么这样配置还需要再研究uwsgi和Nginx才能回答. Python版本升级2.7 测试机器centos6.5默认自带的pyt ...

  5. [ Java面试题 ] 框架篇

    1.谈谈你对Struts的理解. 1. struts是一个按MVC模式设计的Web层框架,其实它就是一个Servlet,这个Servlet名为ActionServlet,或是ActionServlet ...

  6. mvc中路由的映射和实现IHttpHandler挂载

    首先我们了解一下一般的方法 我们只需要在web.config配置文件中做映射处理即可. 第一种形式: <system.web> <urlMappings enabled=" ...

  7. mac终端命令及pycharm常用快捷键记录

    mac终端命令: 1.root权限 $sudo su - 2.定位到指定文件夹位置 $cd /Users/计算机名称/Desktop     (定位到桌面) 3.新建文件夹 $mkdir 文件夹名称 ...

  8. Web开发环境搭建 Eclipse-Java EE 篇

    Web开发环境搭建 Eclipse-Java EE 篇 [原创内容,转载注名出处] 1. 下载和安装 1.1 下载JDK 在Java官方网站下载最新版本的 Java SE:  http://www.o ...

  9. react native 1跳2 2跳3 3跳4 4pop回2

    网上有介绍导航的很多了 就不一一说了   直接说一个小功能 popToRoute pop回指定页面  第一次写 组织能力不是特别好 直接贴代码 例如 我们有四个页面  从第四个pop到第二个页面  先 ...

  10. Windows下安装配置go

    基于 go 1.9.2 + liteIDE + windows10 先安装 go 安装包,作用如同安装框架. 默认安装路径是 C:\Go,通常都会更改,但这会影响到后面设置环境变量,因此更改到哪里请记 ...