BoltDB簡單使用教程

1.BoltDB簡介

Bolt是一個純粹Key/Value模型的程序。該項目的目標是爲不須要完整數據庫服務器(如Postgres或MySQL)的項目提供一個簡單,快速,可靠的數據庫。html

BoltDB只須要將其連接到你的應用程序代碼中便可使用BoltDB提供的API來高效的存取數據。並且BoltDB支持徹底可序列化的ACID事務,讓應用程序能夠更簡單的處理複雜操做。git

其源碼地址爲:https://github.com/boltdb/boltgithub

2.BoltDB特性

BoltDB設計源於LMDB,具備如下特色:數據庫

  • 使用Go語言編寫windows

  • 不須要服務器便可運行數組

  • 支持數據結構服務器

  • 直接使用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", 0600, 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)
    }
相關文章
相關標籤/搜索