




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第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)中安裝,開始編碼前也無需配置,什么都不需要,僅需要goget/boltdb/bolt,然后import/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ù)庫。甚至不存儲文檔,雖然你可以按照這種方式使用它。其僅僅存儲鍵值對但是如果你不知道這是什么意思或者不知道你如何使用它進(jìn)行存儲,也不用擔(dān)心。它超級簡單,而且非常靈活,讓我們來看看。
2.示例
bolt存儲是分組為桶,桶是一組鍵值對集合的名稱,就像Go中的map。桶的名稱、鍵以及值都是[]byte類型。桶可以包括其他桶,也可以通過[]byte類型名稱作為key。
就是這樣。不,真的,就這樣。Bolt基本上是一組嵌套映射。這種簡單性使得它易于使用。不需要設(shè)置表、模式、復(fù)雜的查詢語言。讓我們看看一個bolt入門示例:
packagemain
import(
fmt
/boltdb/bolt
log
varworld=[]byte(greeting)
funcmain(){
db,err:=bolt.Open(d:/bolt.db,0644,nil)
iferr!=nil{
log.Fatal(err)
deferdb.Close()
key:=[]byte(hello)
value:=[]byte(HelloWorld!)
//storesomedata
err=db.Update(func(tx*bolt.Tx)error{
bucket,err:=tx.CreateBucketIfNotExists(world)
iferr!=nil{
returnerr
err=bucket.Put(key,value)
iferr!=nil{
returnerr
returnnil
iferr!=nil{
log.Fatal(err)
//retrievethedata
err=db.View(func(tx*bolt.Tx)error{
bucket:=tx.Bucket(world)
ifbucket==nil{
returnfmt.Errorf(Bucket%snotfound!,world)
val:=bucket.Get(key)
fmt.Println(string(val))
returnnil
iferr!=nil{
log.Fatal(err)
輸出:HelloWorld!
我想你正在思索這代碼似乎有點(diǎn)長。但請記住,我完全處理了所有錯誤,至少是半正確的方式,我們正在做的所有這些:
創(chuàng)建數(shù)據(jù)庫
創(chuàng)建結(jié)構(gòu)(greeting分組)
存儲數(shù)據(jù)到結(jié)構(gòu)中
從結(jié)構(gòu)中獲取數(shù)據(jù)
不算太壞,加上空行也不過54行代碼。下面詳細(xì)解釋下上面示例具體實現(xiàn)內(nèi)容。
3.示例分析
首先bolt.Open連接數(shù)據(jù)庫,如果需要創(chuàng)建文件或打開已存在的文件。
所有bolt讀寫操作都必須在事務(wù)內(nèi)進(jìn)行。在只讀事務(wù)中同時可以有很多讀操作,但寫操作一次只能有一個(當(dāng)寫入器寫入時,讀取器維護(hù)數(shù)據(jù)庫的一致視圖)。
剛開始調(diào)用db.Update,帶有一個函數(shù)作為參數(shù),函數(shù)自身的參數(shù)為bolt.Txbolt的事務(wù)對象。然后創(chuàng)建桶(bolt所有數(shù)據(jù)都用桶組織),接著增加鍵值對。寫事務(wù)完成后開始讀操作使用DB.View事務(wù)獲取剛寫入的數(shù)據(jù)。
bolt事務(wù)機(jī)制的強(qiáng)大之處在于它超級簡單函數(shù)作用域就是事務(wù)的范圍。如果函數(shù)傳入Update并返回nil,事務(wù)中所有更新操作是原子的存入庫中。如果函數(shù)返回錯誤則事務(wù)回滾。這使得bolt事務(wù)對Go開發(fā)者來說非常簡單。只要像平時一樣返回一個錯誤,就可以提前退出函數(shù),bolt也做了正確的事情。無需擔(dān)心手動回滾更新或其他事情,只需返回一個錯誤。
你可能需要另一個基本操作是遍歷桶中的鍵/值對,在這種情況下,只需調(diào)用Bucket.Cursor(),它返回一個游標(biāo)值,它有Next()、Prev()等函數(shù),它們返回鍵/值對,并像您預(yù)期的那樣工作。
boltAPI還有很多內(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的主要缺點(diǎn)是沒有查詢。你不能要求:給我所有以bar開頭foo對象。您可以在數(shù)據(jù)庫中創(chuàng)建自己的索引,并手動保持其更新。這很簡單,只需為特定查詢將IDs切片(slice)序列化到indices桶中即可。顯然這是開始開發(fā)自己關(guān)系數(shù)據(jù)庫的領(lǐng)域,但是如果你不打算做得太過火,那么所有這些代碼就夠了。那些外部DSL中的查詢只是為內(nèi)存中數(shù)據(jù)存儲編寫的代碼。
Bolt并非適用于所有應(yīng)用。你必須了解
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級生物期中模擬卷01【第三單元-第四單元第1章】(考試版A3)(人教版2025)
- 2025年消防安全知識培訓(xùn)考試題庫-消防隊伍管理戰(zhàn)略規(guī)劃試題
- 參觀博物館的收獲作文(10篇)
- 好玩的溜溜球四年級日記11篇
- 2025年會計職稱考試《初級會計實務(wù)》高頻考點(diǎn)串聯(lián)實戰(zhàn)演練試卷
- 我的夢想與未來議論文初稿10篇
- 2025年美術(shù)基礎(chǔ)試題
- 秋日鄉(xiāng)間小道的詩意描寫6篇范文
- 軟件開發(fā)質(zhì)量保障與維護(hù)服務(wù)合同
- 夢幻的星空想象中的夜空作文9篇
- 輕質(zhì)碳酸鈣的應(yīng)用及其發(fā)展前景
- 氣污染源自動監(jiān)控設(shè)施臺賬記錄模版校準(zhǔn)記錄
- JJF 1169-2007汽車制動操縱力計校準(zhǔn)規(guī)范
- 道路工程投資估算表模板
- 新高考高中物理競賽專題1力學(xué)50題競賽真題強(qiáng)化訓(xùn)練原卷版
- 2023年成都市成華發(fā)展集團(tuán)有限責(zé)任公司招聘筆試模擬試題及答案解析
- 曬紋資料大全
- 山東省泰安市2021-2022學(xué)年高一下學(xué)期期末考試數(shù)學(xué)試題(Word版含答案)
- ××團(tuán)支部換屆選舉選票
- 復(fù)雜超限結(jié)構(gòu)設(shè)計要點(diǎn)
- B2B2C多用戶商城平臺詳解
評論
0/150
提交評論