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 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

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

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제

python winsound를 이용한 윈도우 환경에서 소리 재생 예제