[TOC]
프루닝(Pruning, 가지치기)은 경량화 기법의 하나로, AI(딥러닝) 분야에서 검색 모델을 학습한 후에 불필요하거나 중요도가 낮은 노드 등을 제거하는 기술을 말한다. 프루닝을 시도하여 불필요한 것을 제거한다고 해도, 올바른 노드는 꼭 있어야 하며, 이에 따라 성능 저하를 최소화하고 정확도를 높이는 일에 기여할 수 있다.
블록체인에서는 오래된 블록체인 데이터를 자동 삭제하기 위해 프루닝이 사용된다.
Block File Pruning
을 통해 비트코인의 용량을 최적화할 수 있다. 비트 코인 블록체인의 급격한 용량 증가를 완화하기 위해, bitcoin core팀이 bitcoin core 0.11.0 version
에 추가했다.
Block Pruning
을 통해 작은 버전의 '풀 블록체인'을 실행할 수 있다.- 최신 블록체인을 다운로드하는 동안 필요하지 않은 오래된 데이터를 삭제할 수 있다.
- Prune Mode에서 지갑을 실행하게 되면, 이전 트랜잭션과 오래된 체인 기록이 삭제되어 디스크 공간을 절약할 수 있다.
풀 블록체인을 다운로드하여, 다운로드가 올바른지만 확인 후 필요한 '최신 정보'만 복사하고 나머지는 버린다. 저장한 블록체인은 풀 블록체인의 자식 트리(머클트리)이며, 원본 블록체인의 부분 복사본이 되는 것이다.
이더리움에서의 프루닝, State Trie Pruning
은 현재 상태를 Prefix Tree의 일종인 Modified Merkle Patricia Trie(MPT, 상태전이 일반 머클 확장 페트리샤 트리)로 저장한다. 이더리움에서 상태란, Account의 상태를 의미하고, 이 상태들이 모여 Global State를 이루며, 이는 Key-Value의 데이터 구조로 저장하고 있다.
key : value = 32 byte Address : Account state
Modified Merkle Patricia Trie(MPT): State Root의 Hash를 계산하기 위해 전체를 보지 않고, 수정된 브랜치의 hash만 다시 계산한다. (새로 삽입되는 노드의 수를 최소화함) 기존 머클 트리의 복잡한 작업을 보완한 것으로, 빠르게 root hash를 찾을 수 있다.
이더리움은 과거 state를 127개로 제한하여 그보다 오래된 state에만 포함된 노드는 지워도 되도록 했다. 하지만, 지워도 된다는 것과 지울 수 있다는 것은 별개의 문제이며, 또한 DB에 저장되어 있는 노드 중 최근 127개의 노드에서 접근할 수 없는 노드를 찾아 지우는 것도 쉬운 문제가 아니다.
Copyright © 2022 Song_Artish