# MonadDb

MonadDb - это специальная база данных для хранения состояния блокчейна.

Большинство клиентов Ethereum используют базы данных ключ-значение, реализованные либо в виде древовидных структур B-Tree (примером является [LMDB](https://www.symas.com/lmdb)), либо в виде LSM-Tree (примерами являются [LevelDB](https://github.com/google/leveldb) и [RocksDB](https://rocksdb.org/)). Однако Ethereum использует структуру данных [Merkle Patricia Trie](https://ethereum.org/ru/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) (MPT) для хранения состояния. Это приводит к неоптимальному решению, при котором одна структура данных встроена в другую структуру данных другого типа. MonadDb реализует структуру данных[ Patricia Trie ](https://ru.wikipedia.org/wiki/%D0%A1%D0%B6%D0%B0%D1%82%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE)нативно, как на диске, так и в памяти.

Monad выполняет несколько транзакций [параллельно](https://prufiox.gitbook.io/monad-dlya-razrabotchikov/tekhnicheskoe-obsuzhdenie/vypolnenie/parallelnoe-vypolnenie). Когда одной транзакции требуется считать состояние с диска, не следует блокировать выполнение, ожидая завершения этой операции - вместо этого нужно начать чтение и затем приступить к работе над другой транзакцией. Поэтому проблема требует [асинхронного ввода-вывода](https://prufiox.gitbook.io/monad-dlya-razrabotchikov/tekhnicheskoe-obsuzhdenie/koncept/asinkhronnyi-vvod-vyvod) (async I/O) для базы данных. Упомянутые выше базы данных ключ-значение не имеют должной поддержки асинхронного ввода-вывода (хотя существуют некоторые усилия по улучшению в этой области). MonadDb полностью использует последнюю версию ядра для асинхронного ввода-вывода (на Linux это [io\_uring](https://unixism.net/loti/index.html)). Это позволяет избежать необходимости запуска большого количества ядерных потоков для обработки ожидающих запросов ввода-вывода в попытке выполнить работу асинхронно.

MonadDb делает ряд других оптимизаций, связанных с вводом-выводом, таких, как обход файловой системы, что добавляет дорогостоящий накладный расход.
