MonadDb

MonadDb é um banco de dados personalizado para armazenar o estado do blockchain.

A maioria dos clientes Ethereum usa bancos de dados de valor-chave que são implementados como estruturas de dados B-Tree (um exemplo é LMDBarrow-up-right) ou LSM-Tree (exemplos são LevelD arrow-up-rightBarrow-up-right e RocksDBarrow-up-right). No entanto, Ethereum usa a estrutura de dados Merkle Patricia Triearrow-up-right (MPT) para armazenar estado. Isso resulta em uma solução abaixo do ideal, onde uma estrutura de dados é incorporada em outra estrutura de dados de tipo diferente. MonadDb implementa uma estrutura de dados Patricia Triearrow-up-right nativamente, tanto no disco quanto na memória.

Monad executa múltiplas transações em paralelo. Quando uma transação precisa ler o estado do disco, não se deve bloquear a espera pela conclusão dessa operação - em vez disso, deve-se iniciar a leitura e, enquanto isso, começar a trabalhar em outra transação. Portanto, o problema precisa de E/S assíncrona (E/S assíncrona) para o banco de dados. Os bancos de dados de valores-chave mencionados acima não possuem suporte adequado de E/S assíncrona (embora haja alguns esforços para melhorar nesta área). MonadDb utiliza totalmente o suporte de kernel mais recente para E/S assíncrona (no Linux é io_uringarrow-up-right). Isso evita a necessidade de gerar um grande número de threads de kernel para lidar com solicitações de E/S pendentes na tentativa de executar o trabalho de forma assíncrona.

MonadDb faz uma série de outras otimizações relacionadas à E/S, como ignorar o sistema de arquivos, o que adiciona sobrecarga cara.

Last updated