Shardeum缓存策略完全解析:内存缓存+SQLite优化如何让验证节点跑得更快

📅 2026/8/23 15:06:11
Shardeum缓存策略完全解析:内存缓存+SQLite优化如何让验证节点跑得更快
Shardeum缓存策略完全解析内存缓存SQLite优化如何让验证节点跑得更快【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeumShardeum 是一款 EVM 兼容的自动扩缩容autoscaling区块链它的节点性能很大程度取决于缓存设计。本文带你用 10 分钟看懂 Shardeum 的三层缓存体系内存账户缓存、SQLite 持久化缓存和 EVM 状态缓存——不需要你懂数据库也能读懂。 小提示Redis 这类分布式缓存服务出现在 Shardus 核心框架shardeum-foundation/core的网络数据同步层而 Shardeum 节点本地主要靠进程内内存缓存 SQLite 文件数据库来承担缓存职责轻量且零依赖。一、为什么要给区块链做缓存区块链节点每秒要处理大量交易每执行一步都要读取账户余额、合约代码、存储槽等状态数据。如果每次读取都直接落盘查数据库I/O 开销会把性能拖垮。所以 Shardeum 采用经典的多级缓存思想层级存储介质速度数据范围L1 热缓存进程内存JS 对象⚡ 最快高频访问账户L2 持久缓存SQLite 文件数据库 快全部账户 缓存表L3 状态缓存内存红黑树 Trie⚡ 最快当前区块执行中的账户下面逐层拆解。二、内存账户缓存最快的一层账户数据的入口在 accountStorage.ts核心是一个简单的内存映射对象写路径setAccount()更新账户时先写入存储层同时把数据放进内存的accounts对象并顺手调用 riAccountsCache.ts 中的setCachedRIAccount()更新合约代码缓存读路径getAccount()优先走数据库UseDBForAccounts开启时否则直接从内存accounts[address]取值命中即返回避免任何磁盘 I/O。是否使用数据库由网络参数控制定义在 shardeumFlags.tsUseDBForAccounts开启后账户存 SQLite关闭则纯内存 MapenableRIAccountsCache控制合约代码缓存开关默认true。三、SQLite 缓存表给热数据加一层持久保险合约代码RI Accounts体积大、读取频繁Shardeum 专门给它建了一张缓存表实现在 storage.ts 和 riAccountsCache.ts自动建表初始化时创建riAccountsCache表并建立timestamp索引方便按时间淘汰写入去重setCachedRIAccount()会先查账户是否已存在已存在则跳过写入还会计算账户数据哈希_calculateAccountHash用于一致性校验减少无效写盘LRU 式淘汰每次写入后统计缓存总量超过riAccountsCacheSize默认10000条时按时间戳批量删除最旧记录批大小由riAccountsDeleteBatchSize控制——这就是典型的容量上限 淘汰旧数据策略。这一层让节点重启后不必重新下载全部合约代码冷启动速度明显提升。四、EVM 状态缓存红黑树 检查点真正执行交易时用的是 cache.ts 里的Cache类它为当前区块执行维护一份内存状态缓存基于红黑树functional-red-black-tree实现getOrLoad()先查缓存未命中再回到底层 Trie 加载并回填——标准缓存穿透防护warm()批量预热缓存把即将用到的账户提前加载进来checkpoint()/commit()/revert()给缓存打检查点交易执行失败可整段回滚成功则提交。这让 EVM 执行获得了事务级的撤销能力flush()只把标记为modified已修改的账户批量刷回 Trie未变更数据零写盘。配合虚拟账户标记virtual不存在的账户也能安全地被缓存引用避免频繁的空查询。五、AALG 预热机制让缓存先跑一步除了被动缓存Shardeum 还有主动预热AALG自动访问列表生成。验证节点会提前生成交易要访问的地址列表和内存访问模式详见 AALG-warm-up.md相当于执行前先热身把目标账户装进缓存大幅降低执行时的未命中率。相关开关包括autoGenerateAccessList是否自动生成访问列表aalgWarmupSleep预热等待时间cacheMaxCycleAge默认 5、cacheMaxItemPerTopic默认 4500控制 receipt 等主题缓存的生命周期与容量上限。六、新手快速上手清单✅想理解本地运行参考 local-environment-setup.md 与 README.md ✅想调缓存参数搜索 shardeumFlags.ts 中的riAccountsCacheSize、enableRIAccountsCache、UseDBForAccounts ✅想看缓存单元测试riAccountsCache.test.ts 覆盖了开关、DB 模式、边界场景是读懂行为最好的活文档 ✅想调试本地验证节点setup_shardeum_debug.sh 可一键搭建调试环境。总结Shardeum 的缓存策略可以一句话概括内存 Map 管热读、SQLite 缓存表管持久热数据、红黑树状态缓存管执行期事务再加 AALG 主动预热。四层配合在不引入 Redis 等外部组件的前提下把验证节点的 I/O 压力压到了最低——这正是它作为自动扩缩容 EVM 区块链能保持低延迟的关键之一。【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeum创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考