Monad Docs 中文版
by DocsZH
  • 介绍 Monad
    • 为什么选择区块链?
    • 为什么选择 Monad: 去中心化+性能
    • 面向用户的 Monad
    • 面向开发人员的 Monad
    • Devnet 开发者申请
  • 快速入门
    • 部署合约
      • 使用 Foundry 部署合约
      • 使用 Hardhat 部署合约
    • 验证合约
      • 验证 Foundry 合约
      • 验证 Hardhat 合约
  • 开发指南
    • EVM 资源
      • EVM Behavior
      • Solidity 资源
      • 其他编程语言
        • Vyper 语言
        • Yul 语言
        • Huff 语言
    • 使用 Scaffold-Eth-Monad 构建 dApp
  • Monad 架构
    • 相关概念
      • Asynchronous I/O
      • Pipelining
    • 共识机制
      • MonadBFT 共识机制
      • 延迟执行
      • 共享内存池
      • 传输成本和储备余额
    • 执行机制
      • 并行执行
      • MonadDb 数据库
    • Monad 的交易生命周期
    • 硬件要求
    • 其他详细信息
  • 参考资料
    • RPC 概述
    • RPC 故障代码
    • RPC API
  • Monad 官方链接
由 GitBook 提供支持
在本页
  1. Monad 架构
  2. 执行机制

MonadDb 数据库

上一页并行执行下一页Monad 的交易生命周期

最后更新于8个月前

MonadDb 是用于存储区块链状态的自定义数据库。

大多数以太坊客户端使用的键值数据库都是以 B-Tree(例如)或 LSM-Tree(例如 和 )数据结构实现的,然而以太坊却使用 (MPT)数据结构来存储状态。这是一种次优解决方案,一种数据结构被嵌入到另一种不同类型的数据结构中。为了避免这种情况发生,MonadDb 在磁盘和内存中都原生实现了 Patricia Trie 数据结构。

Monad 可以并行执行多笔交易,当一笔交易需要从磁盘读取状态时,系统不应停滞等待前序操作完成,而应启动读取,然后在此期间同步处理另一笔交易。关键在于此操作要求数据库支持(async i/o),而上述提到的键值数据库缺乏相应的异步输入/输出支持(尽管在这方面有一些改进)。MonadDb 充分利用了最新内核支持异步输入/输出(在 Linux 上是 ),这就避免了为了异步执行交易而产生大量内核线程来处理待处理的输入/输出请求。

MonadDb 还对输入/输出进行了其他一些优化,例如绕过文件系统,因为文件系统会增加昂贵的开销。

LMDB
LevelDB
RocksDB
Merkle Patricia Trie
异步输入/输出
io_uring