importするだけで使えるgolang製kvsのgoleveldb

  • 38
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

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やスナップショットの取得等が存在します。
ドキュメントを確認してみてください。