くろねこ日記

ソフトウェアに関する技術メモが多いです.

LevelDBをPythonのPlyvelライブラリで操作してみた

はじめに

levelDBというGoogleが開発したKey-Value-Store型のデータベースがあります. 操作は極めて簡単で,put,get,deleteくらいしかありません.

今回はそれを使ったときのメモを残しておきます.

LevelDB

LevelDBはosxであればbrewからインストールができます

brew install leveldb

plyvel

plyvelはLevelDBを操作するためのPython用のライブラリです.

py-levelDBというライブラリもありますが,plyvelのほうがドキュメントが整っていたので今回はplyvelを使用しました.

Plyvel — Plyvel 0.9 documentation

このライブラリではKeyとValueはバイト列型で渡さなければ扱うことができません.ですので,文字列などは一度バイト列型に変換してから書き込む必要があります. そこを今回はjsonを使って実現しました.

やってみる

さっそくやってみます. 今回は辞書型のデータをjsonでバイト列型に変換してlevelDBに格納,格納したデータをバイト列型から辞書型に直して出力しようと思います.

コード内容は以下の通り

  • plyveldbという名前のDBを生成(または接続)します.

  • このデータをDBに入れます.

    • Key: key1
    • Value: {'foo': {'bar': ('baz', None, 1.0, 2)}}
    • Key: key2
    • Value: {'ham': 'egg'}
  • 読み込みは

    • 全件取り出し
    • key1のデータ抜き出し
#coding: utf-8
import plyvel
import json

db = plyvel.DB('./plyveldb/', create_if_missing=True)

js = json.dumps({'foo': {'bar': ('baz', None, 1.0, 2)}})
db.put(b'key1', js.encode())

js = json.dumps({'ham': 'egg'})
db.put(b'key2', js.encode())

for keydata, val in db:
    print(keydata)
    print(json.loads(val.decode()))

readdata = json.loads(db.get(b'key1').decode())
print(readdata)

ちょっとコードを解説すると

js = json.dumps(辞書型)
db.put(キー, js.encode())

という形でjson形式にして,バイト列型に変換しているのです.

取り出しは

readdata = json.loads(db.get(キー).decode())

これでdb.getをstrに変換し,JSON形式に変換してます.

これで扱うときにはjsonとしてデータが使えるので便利ですね.

まとめ

LevelDBをPlyvelライブラリを使った操作についてメモした.