当缓存中的UTXO已满时,使用什么策略将缓存中的一个UTXO替换为另一个UTXO?

UTXO集存储在磁盘上,但一些UTXO也存储在缓存中。验证事务时,需要查询事务输入所指向的UTXO。首先,你去缓存找到它,如果找不到,你需要去磁盘找到UTXO。由于levelDB的特性,需要将磁盘上搜索到的UTXO写入缓存。如果此时缓存已满,那么节点如何在缓存中为刚刚找到的UTXO腾出空间?
交易验证
utxo公司
级别DB
utxo集合
隐藏物
分享
改进这个问题
跟随
两小时前编辑的
迈克尔·福克森
582077银牌2222铜牌
12月29日13:15问
戈涅夫
10377青铜徽章
添加评论
1个答案
4
UTXO集缓存不是固定大小,限制也不是硬限制。可以将新条目添加到缓存中,而不考虑最大缓存大小。事实上,缓存对象本身甚至不知道限制是什么。
相反,所发生的是缓存定期刷新。由于UTXO集仅在块验证期间更改(mempool UTXO集在其他地方单独处理),因此此定期刷新主要与传入块相关联,而不是与计时器相关联。验证每个块之后,节点确定是否应该将缓存刷新到磁盘。有几种情况会导致刷新,包括接近缓存限制和超过缓存限制。
因此,如果在验证一个块的过程中,缓存变满了,它实际上会一直增长,直到该块被完全验证。最后,整个缓存将被刷新到磁盘,缓存将被清空。
请注意,LevelDB本身有一个独立于UTXO集缓存的缓存。
分享
改进这个答案
跟随
回复时间:12月29日19:20
麻吉弟弟周立铭♦
52.9k44金徽章5555银徽章108108铜徽章
谢谢,我明白了。但我还有一个问题,节点是否每次都将整个缓存刷新到磁盘上?或者节点可以将缓存的一部分刷新到磁盘上?节点能否决定冲水间隔GoneV 20年12月30日6:41
也许我上面说的不太清楚。我的意思是,节点每次都会将整个缓存刷新到磁盘,或者只刷新刚刚验证的块中的UTXOsGoneV 20年12月30日6:56
1
整个缓存都会被刷新,但是会进行一些优化,以避免将不必要的项写入磁盘。例如,如果创建了一个UTXO并在两次刷新之间使用,则该UTXO永远不会写入磁盘麻吉弟弟周立铭♦ 20年12月30日18:37
mempool UTXO集是什么?在验证新事务时,节点查询哪个缓存?–GoneV 3月12日0:45

时光素材-香车美女  (1419)blockchainBTC比特币区块链www.qkl91.com

发表评论

邮箱地址不会被公开。 必填项已用*标注