作者:ReganYue

来源:恒生LIGHT云社区

一、什么是BoltDB

这是一款纯粹使用Go语言编写的key/value数据库,据说它是参考了开源的内存映射数据库LMDB。值得注意的是,这款数据库不支持网络连接,也没有复杂的SQL语句查询支持。但是它在Go的应用中能够比较方便的来达到数据持久化。

二、使用场景

  1. Go语言编写的程序,这个程序需要内嵌数据库。
  2. 不需要复杂的SQL语句查询。
  3. 这款数据库更擅长读的操作,所以在读多写少的场景下,它效果比较好。

三、安装及使用方法

安装方法很简单,就是在命令行执行:

go get github.com/boltdb/bolt/...

那么我们如何打开数据库呢?我们来看一看下面这段代码。

package mainimport ("log""github.com/boltdb/bolt"
)func main() {// Open the my.db data file in your current directory.// It will be created if it doesn't exist.db, err := bolt.Open("my.db", 0600, nil)if err != nil {log.Fatal(err)}defer db.Close()...
}

这个 bolt.Open()是在给定的路径上打开数据库。如果要打开的数据库文件不存在,则将自动创建该文件。**
**第二个参数是文件模式。第三个参数传入nil值就让Bolt使用默认选项打开数据库。

Bolt 多个进程无法同时打开同一个数据库。打开一个已经打开的 Bolt 数据库会导致它挂起,直到另一个进程关闭它。为了防止无限期等待,我们需要给 Open()函数一个超时参数:

db, err := bolt.Open("my.db", 0600, &bolt.Options{Timeout: 1 * time.Second})

事务

Bolt一次只支持一个读写事务,但是一次可以支持多个只读事务。

用于读写的事务API是Update,二用于读的事务API是View。

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

注意:只读事务和读写事务通常不应同时在同一个 goroutine 中打开。这可能会导致死锁,因为读写事务需要定期重新映射数据文件,但在只读事务打开时无法这样做。

还有一种****Batch事务****可以减小并发写操作的开销。Batch 仅在有多个 goroutine 调用它时才有用。

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

读写操作

db.Update(func(tx *bolt.Tx) error {b := tx.Bucket([]byte("MyBucket"))err := b.Put([]byte("answer"), []byte("42"))return err
})

这是往数据库中写入键为answer值为42的数据。

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
})

这是读取键为answer的数据。

是不是发现有个tx.Bucket()不知道是干什么的呢?

Bolt有个很有意思的地方就是这个Bucket,这个是这个数据库组织数据的基本方式,比如有一个Bucket叫公司,这个Bucket里面还建一个Bucket叫部门,里面建一个key:ReganYue,这就说明ReganYue是这个部门里面的人,但是同时也是这个公司里面的人,这个key属于部门这个Bucket,也属于公司这个Bucket。

今日谈:BoltDB数据库,一款纯Go实现的KV数据库相关推荐

  1. Hypersonic SQL开源数据库方向比较流行的纯Java开发的关系型数据库

    Hypersonic SQL Hypersonic SQL开源数据库方向比较流行的纯Java开发的关系型数据库.好像不是JDBC兼容的,JDBC的很多高级的特性都没有支持,不过幸好支持ANSI- 92 ...

  2. mysql做kv数据库_从零开始写KV数据库:基于哈希索引

    前言 新的KV数据库层出不穷,我们经常听说的KV数据库如RocksDb.Hbase等都是基于日志结构的存储引擎.最近我在看<数据密集型应用系统设计>,里面有一章专门在讲日志结构的存储引擎的 ...

  3. mysql做kv数据库_如何将SQL数据映射到KV数据库

    日常吐槽 国外文章也不是都是好文章啊,不要见到英文就觉得高大上了-- 前言 越来越多的关系型数据库底层选择基于KV构建,例如TiDB的TiKV(RocksDB),cockroach的levelDB,M ...

  4. H2:一款基于 Java 的嵌入式关系型数据库

    文章目录 H2 简介 下载安装 执行 SQL 语句 查看帮助 运行 SQL 脚本 生成 DDL 语句 断开数据库连接 连接模式 命令行客户端 Maven 依赖 资源文档 总结 大家好,我是只谈技术不剪 ...

  5. BoltDB 一个简单的纯 Go key/value 存储 [译]

    作者:wolf4j 链接:https://www.jianshu.com/p/cb1b05aa7dd2 boltDB Blot Bolt 是由 Howard Chu 的 LMDB 项目启发的一个纯粹的 ...

  6. SQL Studio:一款纯Web化SQL开发工具,关键是免安装还免费!

    经常使用SQL工具的开发者对Navicat一定都不陌生.这款软件作为一款全球化的多数据库管理工具,这些年逐步得到全国各地SQLer(SQL开发者)的关注. 与其他很多外来的软件产品一样,由于价格原因, ...

  7. python数据库应用开发实例_纯Python开发的nosql数据库CodernityDB介绍和使用实例

    看看这个logo,有些像python的小蛇吧 .这次介绍的数据库codernityDB是纯python开发的. 先前用了下tinyDB这个本地数据库,也在一个api服务中用了下,一开始觉得速度有些不给 ...

  8. 推荐10款纯css3实现的实用按钮

    在2014年的双11即将来临之季,爱编程小编为大家整理10款纯css3实现的按钮.希望这对坚守在前端的码农们有所帮助.亲,如果你有好的资源也可在本文留言,让从事编码的程序员们抱团.工作更轻松. No1 ...

  9. 一款纯css3实现的响应式导航

    之前为大家介绍了好几款响应式导航.今天再给大家带来一款纯css3实现的响应式导航.这款导航还有个响应式的搜索框.废话少说,直接上图: 在线预览   源码下载 实现的代码. html代码: <di ...

最新文章

  1. mvc ajax提交html标签,asp.net-mvc – 如何使用ajax get或post在带有参数的mvc中将数据从View传递到Controller...
  2. struts2 iterator list中对象的list 双层迭代
  3. 几种TCP连接中出现RST的情况
  4. STORM_0001_用vmware拷贝出三个相同的ubuntu搭建小的zookeeper集群
  5. python开发bs系统_基于BS架构的招聘管理系统的开发
  6. 不会Nacos的配置中心?你怎么敢的呀!如何一步步实现Nacos作为服务的配置中心(全网最详系列)
  7. Spring boot系列--redis使用之1
  8. mysql user表空_Mysql User表为空
  9. Linux下conda镜像源配置
  10. i18n国际化资源配置各个国家语言汇总
  11. Tableau学习摘录总结①(层次、聚合度和颗粒度层次、聚合度和颗粒度,字段(离散和连续),小建议)
  12. 【PAT】PAT那些破事
  13. PayPal贝宝集成
  14. 从零开始学Java编程!java数据结构面试题
  15. QVariant方法功能(QT5.12)
  16. 怎么提取抖音里的音乐制作手机铃声
  17. DEM数据(ASTER GDEM|SRTM|GLS2005|ALOS DEM|NASA DEM)下载
  18. k-近邻算法 解决 动态字体反爬
  19. JavaScript中shift() 方法
  20. 开单大师房产中介管理系统源码服务器及安装配置方式

热门文章

  1. 解决spyder无法打开问题
  2. 机械键盘测试——《万历十五年》2
  3. 尚硅谷大数据hadoop教程_mapReduce
  4. mms彩信发送 java_MMSDemo android彩信发送模块,实现了 的加密 接收,解密查看等功能。 238万源代码下载- www.pudn.com...
  5. 巴塔机器人_《超级机器人大战V》全SR流程攻略
  6. android 暴风影音目录,手机暴风影音缓存文件存储位置在哪 怎么找到手机暴风影音缓存文件...
  7. ---中南海香烟---系列[男人应该抽的烟]
  8. 史上最全,程序员必须掌握的400个编程英语词汇
  9. M.2 SSD接口详解
  10. 【小白入门】2019 ICME2019 字节跳动 • 短视频内容理解与推荐竞赛