概要
importするだけで使えるgolang製kvsのboltdb で、インスパイアされて、
golang製kvsのgoleveldbを紹介します。
goleveldbとは
goleveldbとは、leveldbのgolang portです。(完全に同じかどうかは調べきれてません・・・)
levigo等のleveldbラッパーとは違い、native golangで書かれているので、Cのleveldbライブラリを必要とせず、golangでimportするだけで簡単に利用できるのでお手軽です。
個人的には、sqliteの組み込みDBとして利用するような感覚で、組み込み永続化KVSとしての用途が向いているように思います。
leveldbについてはLevelDB入門 (基本編)が詳しいですが、そこから特徴を引用させてもらいます。
- keyとvalueが任意のバイト列である
- データはkeyでソートされて格納される
- ソート順序を変えるために比較関数が提供されている
- 基本的な操作は Put(key, value), Get(key), Delete(key)であり、シンプル。
- 複数の変更をatomicな処理にすることができる
- 一貫したデータのviewを得るため(書き込み中でもreadできるようにするため)にtransient な snapshotを作ることができる
- Snappyという圧縮ライブラリを使ってデータを自動的に圧縮する
- 外部のactivity (file system操作等)に対して仮想的なインタフェースを通して接続することができる。そのため、OSの操作を抽象化してカスタマイズすることができる。
簡単な使い方
import
import "github.com/syndtr/goleveldb/leveldb"
open db
db, err := leveldb.OpenFile("path/to/db", nil)
defer db.Close()
...
Openの第一引数はデータ書き込み先のファイルです。
第二引数がオプションのstructを渡しますが、デフォルトで良いならnilを。
ファイルが存在しない場合は作成するように等は、オプションで指定可能です。
読み書き
// 読み込み
// 戻り値のスライスの内容は変更してはいけません。
data, err := db.Get([]byte("key"), nil)
...
// 書き込み
err = db.Put([]byte("key"), []byte("value"), nil)
...
// 削除
err = db.Delete([]byte("key"), nil)
...
他にも、IterateやBatch writeやスナップショットの取得等が存在します。
ドキュメントを確認してみてください。