python levelDB 간단한 사용 예제

Deep-Learning 공부 중 levelDB가 언급되 이에 대해 알아보았다.

LevelDB는 오픈 소스(https://github.com/google/leveldb)이며 Unix 기반 시스템, macOS, 
windows, android로 포팅 되어있다고 한다. Google의 Sanjay Ghemawat과 Jeff Dean이 만들었다고 한다. LevelDB는 SQL DB가 아니며, 키와 값을 임의의 배열로 저장하고 데이터는 키 별로 정렬된다고 한다. 

  • python에서 leveldb 설치

python: pip install leveldb
아나콘다: conda install python-leveldb



  • leveldb 사용 예


1. db 열기

import leveldb
db = leveldb.LevelDB('my_first_leveldb',create_if_missing=True)

위 코드를 실행하면, 'my_first_leveldb' 폴더가 생성되며, 아래와 같은 파일들이 생성된다.



2. 쓰기와 읽기

leveldb에 데이터를 쓸 때는 Put('key', 'value')를 사용하고, 읽을 때는 Get('key')를 사용한다. 같은 key로 데이터를 새로 써 넣으면, 마지막 쓴 값으로 업데이트 된다. 

ex)
db.Put('mango', '10')
db.Get('mango')
10

만약 python 버전에 따라 아래와 같이 TypeError가 발생할 경우 'str'을 'bytes-like object'로 변경해줘야 한다. 

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-63eb1dec4d91> in <module>
----> 1 db.Put("mango","10")

TypeError: a bytes-like object is required, not 'str'


'str'과 'bytes-like object'는 다음과 같이 서로 변경할 수 있다.
'str'.encode() = ‘bytes-like object'
‘bytes-like object'.decode() = 'str'

db.Put("mango".encode(),"10".encode()) or db.Put(b’mango’, b’10’)
db.Get("mango".encode()).decode() or db.Get(b’mango’).decode()



3. 키 삭제

Delete('key')를 통해 키를 삭제할 수 있다.

db.Delete(b'mango')

삭제된 Key의 값을 Get을 통해 읽으려 할 경우 아래와 같이 KeyError가 발생한다. 

db.Get(b'mango')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-18-b54e2655bb7b> in <module>
----> 1 db.Get(b'mango')

KeyError

이런 경우 간단히 try 문을 사용해 에러를 피해갈 수 있다.

vlaue = '키 없어요'
try:
    value = db.Get(b'mango').decode()
except KeyError:
    pass
print(vlaue)

키 없어요



4. Iterable object

RangeIter()를 사용하면 된다. 아래의 예제처럼 하면 생선된 levelDB의 모든 키와 데이터를 가져올 수 있다.

Ex)
list = [['mango','100'],['apple','10'],['orange','20']]
for key, val in list:
   db.Put(key.encode(), val.encode())

for key, val in db.RangeIter():
   print(key.decode(), val.decode())

apple 10
mango 100
orange 20

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

mkfs.fat Device or resource busy 에러 해결법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기