MonadDb

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

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

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

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

Last updated