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 })