Migración de Berkeley DB a LevelDB

En 2013 se lanzó un nuevo núcleo de bitcoin y una de las supuestas mejoras fue la migración de Berkeley DB a LevelDB. De acuerdo con las notas de lanzamiento en bitcoin.org :

LevelDB, una base de datos rápida, de código abierto y no relacional de Google, ahora se usa para almacenar transacciones y bloquear índices. LevelDB funciona mucho mejor en máquinas con E/S lentas y es más rápido en general .

Los desarrolladores principales de bitcoin hicieron declaraciones similares :

LevelDB, una reescritura de código abierto del propio sistema de base de datos de Google, fue diseñado para lograr eficiencia y consistencia en hardware básico, y supera a BDB en un orden de magnitud en algunas configuraciones. Las pruebas preliminares con LevelDB muestran muy buenos resultados .

Sin embargo, hoy en día hay varios comentarios a través de Internet criticando LevelDB. Según la página de LevelDB en Wikipedia :

LevelDB es ampliamente conocido por ser poco confiable y las bases de datos que administra son propensas a la corrupción. Los estudios académicos de versiones anteriores de LevelDB han encontrado que, en algunos sistemas de archivos, los datos almacenados en esas versiones de LevelDB pueden volverse inconsistentes después de un bloqueo del sistema o un corte de energía. La corrupción de LevelDB es tan común que la detección de corrupción debe integrarse en las aplicaciones que la utilizan.

En resumen, las quejas sobre LevelDB son:

  • poco fiables y las bases de datos son propensas a la corrupción
  • varios errores debido a fallas fundamentales
  • mala calidad del código
  • ya no se mantiene activamente (es decir, proyecto muerto)

Pregunta 1
¿Son correctas estas quejas sobre LevelDB?

Pregunta 2
¿Cuál es el saldo final de la migración de Bitcoin Core de Berkeley DB a LevelDB? ¿LevelDB funciona como se esperaba? ¿Esta migración fue la elección correcta?

IIRC, Bitcoin usa BerkleyDB 4.8 para archivos de billetera y LevelDB para índices de blockchain. Informalmente, puedo decirle que la corrupción del índice de la cadena de bloques durante los bloqueos es muy común y, por lo general, les digo a los usuarios afectados que vuelvan a descargar la cadena de bloques.
@NickODell ¿Sabe si los bloqueos que mencionó también ocurrieron antes de la migración a LevelDB?
Lo siento, no lo sé.
@NickODell, ¿debería hacer una copia de seguridad de mi directorio de datos de Bitcoin Core (por ejemplo, chainstate/ y blocks/) para no tener que volver a descargar la cadena de bloques desde el bloque 0, en caso de corrupción de LevelDB?

Respuestas (1)

Como alguien que estuvo involucrado en hacer esa migración en ese momento, creo que fue la decisión correcta. LevelDB está lejos de ser perfecto, pero no sabría qué más usar.

En particular:

  • BDB es mucho más lento para nuestro uso (escrituras por lotes atómicos grandes, lecturas aleatorias pequeñas).
  • También hubo informes de corrupción de bases de datos con BDB, en un momento en que se usaba con mucha menos intensidad que LevelDB ahora.
  • BDB es muy doloroso de actualizar. Mi impresión es que fue diseñado para configuraciones en las que una actualización de la base de datos solo se realizó con supervisión profesional. En particular, los archivos de registro de escritura creados para la durabilidad a veces no se podían leer en versiones posteriores. Esta es la razón por la que los lanzamientos de Bitcoin Core se han mantenido durante años con BDB 4.8 para la billetera.
  • BDB tiene muchos límites de recursos que necesitan configuración, donde los valores elegidos de manera inapropiada pueden causar fallas en toda la red (lea sobre el incidente de marzo de 2013 , específicamente). La documentación oficial sobre esto afirma Reviewing the Lock subsystem statistics is the best way to determine this value.que creo que no es aceptable para nuestro caso de uso.

Si bien las corrupciones de la base de datos se informan con relativa frecuencia en estos días, creo que se trata principalmente de fallas de hardware o problemas con los controladores. Bitcoin Core tiende a estresar los discos, la memoria y las CPU mucho más que la mayoría del software, lo que hace que surjan problemas invisibles.

> "[...] las corrupciones de la base de datos se informan con relativa frecuencia en estos días [...]" ¿Hay una comunidad activa de LevelDB para proporcionar algún comentario/apoyo sobre este problema?
Personalmente, nunca veo corrupciones, pero ejecuto hardware relativamente nuevo y uso Linux. Pero probablemente resincronizo la cadena en promedio una vez por semana con fines de desarrollo. Eso no significa que no crea que tales informes sean reales, pero al menos en algunos casos resulta que se deben a sistemas de almacenamiento o hardware defectuosos, en cuyo caso es difícil culpar al software de la base de datos.