LoginSignup
48
41

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-08-23

概要

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

48
41
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
41