好用的简易数据库 BoltDB

说明

Bolt是一个纯粹Key/Value模型的程序。该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速,可靠的数据库。

与之类似的且同样流行的数据库是 SQLite

BoltDB只需要将其链接到你的应用程序代码中即可使用BoltDB提供的API来高效的存取数据。而且BoltDB支持完全可序列化的ACID事务,让应用程序可以更简单的处理复杂操作。

BoltDB设计源于LMDB,具有以下特点:

  • 使用Go语言编写
  • 不需要服务器即可运行
  • 支持数据结构
  • 直接使用API存取数据,没有查询语句
  • 支持完全可序列化的ACID事务,这个特性比LevelDB强
  • 数据保存在内存映射的文件里。没有wal、线程压缩和垃圾回收
  • 通过COW技术,可实现无锁的读写并发,但是无法实现无锁的写写并发,这就注定了读性能超高,但写性能一般,适合与读多写少的场景

BoltDB是一个Key/Value(键/值)存储,这意味着没有像SQL RDBMS(MySQL,PostgreSQL等)中的表,没有行,没有列。相反,数据作为键值对存储(如在Golang Maps中)。键值对存储在Buckets中,它们旨在对相似的对进行分组(这与RDBMS中的表类似)。因此,为了获得Value(值),需要知道该Value所在的桶和钥匙。

go get -u github.com/boltdb/bolt
打开数据库
db, err := bolt.Open(dbfile, 0600, nil)
if err != nil {
    log.Fatal(err)
}

defer db.Close()
更新事务
err := db.Update(func(tx *bolt.Tx) error {
    ...
    return nil
})

说明:

  • 通过该接口可以实现数据更新操作
  • 该操作会被当做一个事务来处理,如果Update()内的操作返回nil,则事务会被提交,否则事务会回滚
只读操作
err := db.View(func(tx *bolt.Tx) error {
    ...
    return nil
})

说明:

  • 通过该接口可以且只能进行数据查询操作
批量更新事务
err := db.Batch(func(tx *bolt.Tx) error {
    ...
    return nil
})

说明:

  • 通过该接口可以实现多次数据更新操作
  • 所有的更新会被当做一个事务来处理,如果Update()内的操作返回nil,则事务会被提交,否则事务会回滚
手动事务管理
// Start a writable transaction.
tx, err := db.Begin(true)
if err != nil {
    return err
}
defer tx.Rollback()

// Use the transaction...
_, err := tx.CreateBucket([]byte("MyBucket"))
if err != nil {
    return err
}

// Commit the transaction and check for error.
if err := tx.Commit(); err != nil {
    return err
}

说明:

  • 自己创建事务,并管理事务的提交和回滚,没有利用BoltDB提供的封装式写法
示例
package main

import (
	"fmt"
	"log"

	"github.com/boltdb/bolt"
)

var dbfile = "boltdbfile.db"
var bdb *bolt.DB
var bucket = []byte("MyBuckets")

func main() {
	var err error
	bdb, err = bolt.Open(dbfile, 0600, nil)
	if err != nil {
		log.Fatal(err)
	}

	defer func() {
		_ = bdb.Close()
	}()

	CreateBuckets()
	updateData()
	selectData()
}

func CreateBuckets() error {
	return bdb.Update(func(tx *bolt.Tx) error {
		_, err := tx.CreateBucketIfNotExists(bucket)
		return err
	})
}

func updateData() error {
	return bdb.Update(func(tx *bolt.Tx) error {
		bk := tx.Bucket(bucket)
		if bk != nil {
			e1 := bk.Put([]byte("name"), []byte("rao"))
			if e1 != nil {
				return e1
			}
			e2 := bk.Put([]byte("age"), []byte("12"))
			if e2 != nil {
				return e2
			}
		}

		return nil
	})
}

func selectData() error {
	var name, age []byte
	return bdb.View(func(tx *bolt.Tx) error {
		bk := tx.Bucket(bucket)
		if bk != nil {
			name = bk.Get([]byte("name"))
			age = bk.Get([]byte("age"))
		}

		fmt.Printf("%s\n", name)
		fmt.Printf("%s\n", age)

		return nil
	})
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
有很多著名的数据库工具可供选择,例如Navicat、Toad和PLSQL等。在这些工具中,它们都有强大的功能。然而,有些数据库工具在使用过程中可能会对电脑的配置要求较高,尤其是在同时打开其他软件的情况下。如果你需要一个简易数据库管理工具,你可以考虑使用一个名为EasyDataBaseExport的开源工具。这个工具主要用于导出数据结构到Excel和Word,并且可以帮助你快速编写数据库设计文档。该工具的项目地址是:https://gitee.com/lzy549876/EasyDataBaseExport。它提供了一种简单易用的方式来管理和导出数据库结构,并且开发者也希望得到更多的支持。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Swing实现简易数据库浏览器](https://download.csdn.net/download/weixin_38622611/14833008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java Swing之数据库表结构导出工具(Excel、Word、Html、Markdown、Pdf等)](https://blog.csdn.net/kkk123445/article/details/115748954)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值