最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹

 更新時間:2021年11月16日 14:23:06   作者:夢想畫家  
這篇文章主要為大家介紹了Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

1. 介紹Bolt

BoltDB是純Go語言實現(xiàn)的持久化解決方案,保存數(shù)據(jù)至內(nèi)存映射文件。稱之為持久化解決方案不是數(shù)據(jù)庫,因為數(shù)據(jù)庫這個詞有很多額外功能是bolt所不具備的。正是因為缺乏這些功能使得bolt如此優(yōu)雅、好用。

Bolt就是一個Go包。無需在系統(tǒng)中安裝,開始編碼前也無需配置,什么都不需要,僅需要go get github.com/boltdb/bolt,然后import “github.com/boltdb/bolt”。

要完全使用bolt的存儲功能,只需要一個文件名。無論從開發(fā)者或用戶視角都感覺不可思議。不知你的感想如何,在我的工作經(jīng)歷中花過很多時間搭建數(shù)據(jù)庫環(huán)境,調(diào)試配置問題,用戶和權(quán)限以及其他各種問題,如關(guān)系型數(shù)據(jù)庫PostgreSql、Oracle和NoSQL。這些bolt都不需要,沒有用戶、無需安裝,僅一個文件名。這對應(yīng)用程序的用戶來說也是一種恩惠,因為他們也不必為那些麻煩問題而瞎折騰。

Bolt不是關(guān)系型數(shù)據(jù)庫。甚至不存儲文檔,雖然你可以按照這種方式使用它。其僅僅存儲鍵值對…但是如果你不知道這是什么意思或者不知道你如何使用它進行存儲,也不用擔(dān)心。它超級簡單,而且非常靈活,讓我們來看看。

2. 示例

bolt存儲是分組為桶,桶是一組鍵值對集合的名稱,就像Go中的map。桶的名稱、鍵以及值都是[]byte類型。桶可以包括其他桶,也可以通過[]byte類型名稱作為key。

…就是這樣。不,真的,就這樣。Bolt基本上是一組嵌套映射。這種簡單性使得它易于使用。不需要設(shè)置表、模式、復(fù)雜的查詢語言。讓我們看看一個bolt入門示例:

package main
import (
	"fmt"
	"github.com/boltdb/bolt"
	"log"
)
var world = []byte("greeting")
func main() {
	db, err := bolt.Open("d:/bolt.db", 0644, nil)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
	key := []byte("hello")
	value := []byte("Hello World!")
	// store some data
	err = db.Update(func(tx *bolt.Tx) error {
		bucket, err := tx.CreateBucketIfNotExists(world)
		if err != nil {
			return err
		}

		err = bucket.Put(key, value)
		if err != nil {
			return err
		}
		return nil
	})
	if err != nil {
		log.Fatal(err)
	}
	// retrieve the data
	err = db.View(func(tx *bolt.Tx) error {
		bucket := tx.Bucket(world)
		if bucket == nil {
			return fmt.Errorf("Bucket %s not found!", world)
		}
		val := bucket.Get(key)
		fmt.Println(string(val))
		return nil
	})
	if err != nil {
		log.Fatal(err)
	}
}

輸出:Hello World!

我想你正在思索————這代碼似乎有點長。但請記住,我完全處理了所有錯誤,至少是半正確的方式,我們正在做的所有這些:

創(chuàng)建數(shù)據(jù)庫

創(chuàng)建結(jié)構(gòu)(greeting分組)

存儲數(shù)據(jù)到結(jié)構(gòu)中

從結(jié)構(gòu)中獲取數(shù)據(jù)

不算太壞,加上空行也不過54行代碼。下面詳細解釋下上面示例具體實現(xiàn)內(nèi)容。

3. 示例分析

首先bolt.Open連接數(shù)據(jù)庫,如果需要創(chuàng)建文件或打開已存在的文件。
所有bolt讀寫操作都必須在事務(wù)內(nèi)進行。在只讀事務(wù)中同時可以有很多讀操作,但寫操作一次只能有一個(當(dāng)寫入器寫入時,讀取器維護數(shù)據(jù)庫的一致視圖)。

剛開始調(diào)用db.Update,帶有一個函數(shù)作為參數(shù),函數(shù)自身的參數(shù)為bolt.Tx ————bolt的事務(wù)對象。然后創(chuàng)建桶(bolt所有數(shù)據(jù)都用桶組織),接著增加鍵值對。寫事務(wù)完成后開始讀操作————使用DB.View事務(wù)獲取剛寫入的數(shù)據(jù)。

bolt事務(wù)機制的強大之處在于它超級簡單——函數(shù)作用域就是事務(wù)的范圍。如果函數(shù)傳入Update并返回nil,事務(wù)中所有更新操作是原子的存入庫中。如果函數(shù)返回錯誤則事務(wù)回滾。這使得bolt事務(wù)對Go開發(fā)者來說非常簡單。只要像平時一樣返回一個錯誤,就可以提前退出函數(shù),bolt也做了正確的事情。無需擔(dān)心手動回滾更新或其他事情,只需返回一個錯誤。

你可能需要另一個基本操作是遍歷桶中的鍵/值對,在這種情況下,只需調(diào)用Bucket.Cursor(),它返回一個游標值,它有Next()、Prev()等函數(shù),它們返回鍵/值對,并像您預(yù)期的那樣工作。

bolt API還有很多內(nèi)容,但剩下的大部分內(nèi)容都是關(guān)于數(shù)據(jù)庫統(tǒng)計和一些更高級使用場景內(nèi)容……但要開始在bolt數(shù)據(jù)庫中存儲數(shù)據(jù),上述內(nèi)容就是你真正需要知道的。

4. 總結(jié)

對于更復(fù)雜的應(yīng)用程序,僅在數(shù)據(jù)庫中存儲字符串可能不夠,但這沒關(guān)系,Go的編碼相關(guān)包可以幫忙。你可以很容易地使用encoding/json或encoding/gob將結(jié)構(gòu)序列化到數(shù)據(jù)庫中,以唯一的名稱或id作為鍵。再者bolt的好處是較低的使用門檻,不需要找出整個數(shù)據(jù)庫模式或安裝任何東西,就可以以高性能、可管理的方式將數(shù)據(jù)存儲至磁盤。

bolt的主要缺點是沒有查詢。你不能要求:給我所有以bar開頭foo對象。您可以在數(shù)據(jù)庫中創(chuàng)建自己的索引,并手動保持其更新。這很簡單,只需為特定查詢將IDs切片(slice)序列化到“indices”桶中即可。顯然這是開始開發(fā)自己關(guān)系數(shù)據(jù)庫的領(lǐng)域,但是如果你不打算做得太過火,那么所有這些代碼就夠了。那些外部DSL中的查詢只是為內(nèi)存中數(shù)據(jù)存儲編寫的代碼。

Bolt并非適用于所有應(yīng)用。你必須了解應(yīng)用程序的需求,以及bolt的鍵/值樣式是否足以滿足這些需求。如果是這樣,我想你會非常樂意使用簡單的數(shù)據(jù)存儲系統(tǒng),而無需太多的腦力開銷。

以上就是Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹的詳細內(nèi)容,更多關(guān)于Golang持久化BoltDB的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項目實踐

    Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項目實踐

    本文主要介紹了Golang并發(fā)讀取文件數(shù)據(jù)并寫入數(shù)據(jù)庫的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 一起聊聊Go語言中的語法糖的使用

    一起聊聊Go語言中的語法糖的使用

    語法糖通常是用來簡化代碼編寫的,特性就是使用語法糖前后編譯的結(jié)果是相同的。這篇文章主要就來和大家一起聊聊Go語言中的語法糖的實現(xiàn)
    2022-07-07
  • golang并發(fā)下載多個文件的方法

    golang并發(fā)下載多個文件的方法

    今天小編就為大家分享一篇golang并發(fā)下載多個文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 解密Golang中Request對象的操作

    解密Golang中Request對象的操作

    這篇文章主要和大家深入探討?Golang?中的?Request?對象,并從多個方面介紹其功能、結(jié)構(gòu)和使用方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-05-05
  • Go語言使用時會遇到的錯誤及解決方法詳解

    Go語言使用時會遇到的錯誤及解決方法詳解

    這篇文章主要為大家詳細介紹了Go語言使用時常常會遇到的一些錯誤及解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-07-07
  • golang 實現(xiàn)時間戳和時間的轉(zhuǎn)化

    golang 實現(xiàn)時間戳和時間的轉(zhuǎn)化

    這篇文章主要介紹了golang 實現(xiàn)時間戳和時間的轉(zhuǎn)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 一文帶你入門Go語言中定時任務(wù)庫Cron的使用

    一文帶你入門Go語言中定時任務(wù)庫Cron的使用

    在平時的開發(fā)需求中,我們經(jīng)常會有一些重復(fù)執(zhí)行的操作需要觸發(fā)執(zhí)行,說白了就是定時任務(wù)。這篇文章主要給大家介紹一下如何在go項目中實現(xiàn)一個crontab功能,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-08-08
  • Golang如何快速構(gòu)建一個CLI小工具詳解

    Golang如何快速構(gòu)建一個CLI小工具詳解

    這篇文章主要為大家介紹了Golang如何快速構(gòu)建一個CLI小工具詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Go語言編譯程序從后臺運行,不出現(xiàn)dos窗口的操作

    Go語言編譯程序從后臺運行,不出現(xiàn)dos窗口的操作

    這篇文章主要介紹了Go語言編譯程序從后臺運行,不出現(xiàn)dos窗口的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang的串行處理和并行處理區(qū)別

    golang的串行處理和并行處理區(qū)別

    golang對比其它語言最大的優(yōu)勢就是并行計算(一個go就能實現(xiàn)并發(fā)),工作中經(jīng)常遇到并發(fā)的場景, 本文主要介紹了golang的串行處理和并行處理,感興趣的可以了解一下
    2021-07-07

最新評論

紫阳县| 青河县| 廊坊市| 阿坝县| 东港市| 淳安县| 石台县| 甘洛县| 湟中县| 九台市| 修水县| 京山县| 平塘县| 拉萨市| 故城县| 科尔| 常熟市| 繁昌县| 陈巴尔虎旗| 富顺县| 昌宁县| 社会| 庆元县| 永康市| 富川| 新晃| 孝昌县| 翁牛特旗| 阿城市| 会宁县| 兴义市| 浏阳市| 肥乡县| 镇原县| 晴隆县| 灌云县| 麻江县| 琼结县| 齐齐哈尔市| 多伦县| 大悟县|