pr-34489
index: batch db writes during initial sync
- Introducción
- Pregunta 1
BaseIndexarranca un hilo de fondo que ejecutaSync(). ¿Cuándo se activa este hilo y cuándo deja de usarse? ¿Qué diferencia hay entre el camino deSync()y el deBlockConnected()para escribir datos? ¿Por qué existe esta separación? - Pregunta 2Antes de este cambio, ¿en qué momento exacto se persistían en disco los datos de un bloque indexado (p. ej. las posiciones de txs en
txindex, o las entradas de filtros enblockfilterindex)? ¿Ocurría esto bloque a bloque o en lotes? Se puede observar enCustomAppendde cualquier subclase concreta. - Pregunta 3
BaseIndex::Sync()llama aCommit()cada 30 segundos y cuando el índice alcanza el tip. ¿Qué escribe exactamenteCommit()en disco? ¿Es lo mismo que los datos del índice escritos enCustomAppend? ¿Qué ocurriría si el nodo se apaga entre una escritura de datos y una llamada aCommit()? - Pregunta 4Antes de este cambio,
NextSyncBlockse llamaba en cada iteración del bucle, adquiriendocs_mainpor cada bloque. El hilo de validación también necesitacs_mainpara procesar bloques. ¿Qué impacto tiene esto durante IBD? ¿Cómo lo mejora la nueva ventana de bloques, y qué trade-offs conlleva? - Pregunta 5Con el batching, el índice procesa N bloques en memoria y los persiste todos de golpe con un único
WriteBatch. Si el nodo se apaga a mitad de una ventana, ¿desde qué punto reanuda el índice? ¿Es seguro reescribir entradas ya presentes en LevelDB? - Pregunta 6El
Commit()existente usa un timer de 30 segundos. ¿Por qué se elige una ventana de número de bloques fija para los batches en lugar de reutilizar una ventana temporal? ¿Qué ventajas concretas ofrece en cuanto a testabilidad y uso de memoria predecible? - Pregunta 7Con el batching, si ocurre una reorg mientras el índice procesa un batch
[N, N+499]y el fork point está enN+200, ¿qué debería ocurrir? ¿Cómo lo maneja el código actual? - Pregunta 8Un
CDBBatchacumula entradas en memoria hasta el flush. Con batch=500, ¿es el número de bloques una buena referencia como modelo de uso de memoria real? ¿Qué implicación tiene esto en dispositivos con poca RAM? - Pregunta 9Los resultados en HDD muestran ~27% de mejora en
txospenderindexfrente a ~0.5% encoinstatsindex. ¿Qué explica esta diferencia? - Pregunta 10Este PR se presenta como precursor de la paralelización de #26966. ¿Qué elementos concretos del diseño son prerequisitos para workers concurrentes? ¿Es correcto aterrizar este cambio de forma independiente?