MonadDb는 블록체인 스테이트를 저장하는 데 사용되는 사용자 지정 데이터베이스입니다.
대부분의 이더리움 클라이언트는 키-값 데이터베이스를 사용하며 이는 B-Tree(예: LMDB) 또는 LSM-Tree(예: LevelDB 및 RocksDB) 데이터 구조로 구현됩니다. 그러나 이더리움은 스테이트를 저장하기 위해 Merkle Patricia Trie(MPT) 데이터 구조를 사용합니다. 이로 인해 하나의 데이터 구조가 다른 유형의 데이터 구조에 내장되는 서브옵티멀한 솔루션이 발생합니다. MonadDb는 Patricia Trie 데이터 구조를 원래의 형태로 디스크와 메모리 양쪽에서 구현합니다.
Monad는 병렬로 여러 트랜잭션을 실행합니다. 한 트랜잭션이 디스크에서 스테이트를 읽어야 할 때 해당 작업이 완료될 때까지 기다리면 안되며 대신 다른 트랜잭션에서 작업을 시작해야 합니다. 따라서 문제에는 데이터베이스를 위한 비동기 입출력(비동기 입출력)가 필요합니다. 위에서 언급한 키-값 데이터베이스는 올바른 비동기 입출력 지원이 부족합니다(이 영역을 개선하기 위한 노력이 있기는 하지만). MonadDb는 비동기 입출력에 대한 최신 커널 지원(리눅스에서는 io_uring)을 완전히 활용합니다. 이로 인해 대규모로 커널 스레드를 생성하여 보류 중인 입출력 요청을 처리하려는 시도 없이도 비동기로 작업을 수행할 수 있습니다.
MonadDb는 파일 시스템을 우회하는 등 입출력와 관련된 다양한 최적화도 수행합니다.