Single Processsing : 하나의 프로세스만이 한번에 특정 데이터베이스에 접근 가능
LevelDB Sample Code
import level db
db = leveldb.LevelDB('test_leveldb',create_if_missing=True)#Data 입력
db.Put('apple'.encode(),'10'.encode())#Data 조회
get_result = db.Get(b'apple')print(get_result.decode())#Data 삭제
db.Delete(b'apple')
'F' + 1-byte flag name length + flag name string // 1(True) 0(False) // Txindex On/Off 여부
't' + 32-byte transaction hash // 블록 파일 넘버, 파일 내 offset 위치, 블록 내 offset 위치 // Transaction index 기록 (TxIndex On인 경우에만)
trnasaction을 빨리 찾기 위해서.
'c' + 32-byte transaction hash // Tx Version, Coinbase Tx 여부, Tx가 포함된 블록 높이, Tx 내 UTXO, UTXO의 scriptPubkey와 amount // 트랜잭션 내 UTXO 데이터 조회용 (UTXO가 남은 경우)
'B' -> 32-byte block hash // 가장 최신 Block Header Hash // 최신 Block이 있는지 확인 용
Mempool
아직 블록에 포함되지 않은 Pending Transaction들을 저장 및 관리하는 방법
블록체인에 포함되지 않은 Transaction들을 가지고 있다가 다른 노드가 블록체인에 포함 시키면 내가 가지고 있는 UTXO에서 제거. FileDB와 Level DB로 관리.
채굴자들은 Mempool 중에서 Transaction을 선택해서 신규 Block에 포함시킨다.
Mempool 에 들어가고도 14일동안 처리 되지 않고 남아있는 Transaction은 Expired 된다.
Bitcoin 검색의 한계
우리가 일반적으로 생각하는 검색의 조건은 단순검색, 범위 검색, 조건 검색등이 있다.
하지만 Bitcoin 은 Key-Value 기반 Database를 사용하고 있기 때문에, 검색에는 Key값으로만 검색이 가능
과거에는 Bitcoin-Qt, Paper wallet 등이 많이 사용되어 있는데, 이는 실제로 Transaction이 전송 중인지,
내가 전송을 잘 받았는지, 6-Confirm이 지났는지에 대한 확인이 어렵다.