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ライブラリを使った操作についてメモした.