¿Cuál es el uso de la memoria para verificar las entradas de transacciones?

Cada vez que un nodo recibe una transacción, el nodo verifica su validez. Con ese fin, verifica para cada entrada de transacción si esa entrada es parte del conjunto UTXO. Tengo entendido que el conjunto UTXO se almacena en la base de datos chainstate, que se mantiene en una LevelDBestructura.

Anteriormente pensé que el conjunto UTXO se mantenía disponible en la memoria, pero como supe que actualmente tiene un tamaño de aproximadamente 1.2GiB , parece poco probable.

Entonces, asumo que chainstate-db está almacenado en el disco, pero se accede varias veces por segundo para verificar las entradas de transacciones. ¿Qué cantidad de uso de memoria induce esto en un nodo?

Debe almacenarse en el disco para preservarlo al cerrar y luego abrir la aplicación. Sin embargo, la mayoría (o en sistemas con suficiente memoria: todo) también está en RAM. Cada vez que necesite escanear el conjunto UTXO, cargará los fragmentos usados ​​en la memoria y los mantendrá allí el mayor tiempo posible. Me imagino que después de algunos escaneos, la mayor parte estará en la memoria. Si no cabe en la memoria, aumentará rápidamente la E/S del disco y ralentizará todo.

Respuestas (1)

Tiene razón, el conjunto UTXO se almacena en el disco en el directorio .bitcoin/chainstate usando leveldb. Se almacena en estado comprimido y el tamaño actual es de alrededor de 1,5 GB.

Para acelerar el acceso, bitcoind usa un caché en la memoria que se puede configurar usando la opción -dbcache.

Entonces, asumo que chainstate-db está almacenado en el disco, pero se accede varias veces por segundo para verificar las entradas de transacciones. ¿Qué cantidad de uso de memoria induce esto en un nodo?

Acceder a la base de datos leveldb en sí es como acceder a cualquier otra base de datos nosql. Básicamente, busca la clave que es el utxo y obtiene un valor como salida que necesita deserializar y almacenar en una variable de memoria

Entonces, esencialmente, ¿llenará -dbcachela cantidad de memoria a largo plazo con algunos picos cada vez que acceda a la base de datos?
Sí, también hay memoria tomada por mempool que puede ser controlada por maxmempoolsize. También hay algunos cachés menores mantenidos por leveldb y otras partes del código que no conozco. Estas son opciones de caché de memoria documentadas para la configuración en bitcoin