MonadDb

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

Большинство клиентов Ethereum используют базы данных ключ-значение, реализованные либо в виде древовидных структур B-Tree (примером является LMDB), либо в виде LSM-Tree (примерами являются LevelDB и RocksDB). Однако Ethereum использует структуру данных Merkle Patricia Trie (MPT) для хранения состояния. Это приводит к неоптимальному решению, при котором одна структура данных встроена в другую структуру данных другого типа. MonadDb реализует структуру данных Patricia Trie нативно, как на диске, так и в памяти.

Monad выполняет несколько транзакций параллельно. Когда одной транзакции требуется считать состояние с диска, не следует блокировать выполнение, ожидая завершения этой операции - вместо этого нужно начать чтение и затем приступить к работе над другой транзакцией. Поэтому проблема требует асинхронного ввода-вывода (async I/O) для базы данных. Упомянутые выше базы данных ключ-значение не имеют должной поддержки асинхронного ввода-вывода (хотя существуют некоторые усилия по улучшению в этой области). MonadDb полностью использует последнюю версию ядра для асинхронного ввода-вывода (на Linux это io_uring). Это позволяет избежать необходимости запуска большого количества ядерных потоков для обработки ожидающих запросов ввода-вывода в попытке выполнить работу асинхронно.

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

Last updated