ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

GolangのローカルDBとしてBoltを使ってみた

前回の記事でBitcoinについて調べていましたが、その時参考にした記事ではローカルDBとしてBoltを使っていました。

Bolt

GitHub - boltdb/bolt: An embedded key/value database for Go.

Boltは上記になります。READMEが結構充実しているので、使うときには一読したようが良さそうです。
Bolt自体がGolangで実装されているため、Golangで作るアプリの組み込みDBとして使うことができます。
データはバイナリとは別のファイルで独立して保管されます。

BoltはKeyValue形式のデータベースで、シンプルな作りを目指しているようです。
データの集合を表す「Bucket」の中に、一つのKey・一つのValueをbyte配列で格納します。
またこの「Bucket」をネストさせることもできるようです。

使ってみて

今回はBoltを使い、Todoを登録・参照・削除するコンソールアプリを作ってみました。
作ったものは以下になります。

GitHub - SrcHndWng/go-learning-boltdb-todo

先にも書いたように「Bucket」の中にデータを格納する方式です。
なので登録・参照・削除とも「Bucket」に対して操作を行うことになります。

ソースで表すと以下のようになります。

登録・更新

return db.Update(func(tx *bolt.Tx) error {
    b, err := tx.CreateBucketIfNotExists([]byte(bucket))
    (中略)
    err = b.Put(keybytes(id), []byte(data))

参照

db.View(func(tx *bolt.Tx) error {
    b := tx.Bucket([]byte(bucket))
    c := b.Cursor()
    for k, v := c.First(); k != nil; k, v = c.Next() {
        (何らかの処理)
    }

削除

db.Update(func(tx *bolt.Tx) error {
  b := tx.Bucket([]byte(bucket))
  err := b.Delete(key)
  return err
})