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 é LMDB) ou LSM-Tree (exemplos são LevelD B e RocksDB). No entanto, Ethereum usa a estrutura de dados Merkle Patricia Trie (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 Trie 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_uring). 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