Llançament del DBMS libmdbx 0.11.7. Mou el desenvolupament a GitFlic després del bloqueig a GitHub

La biblioteca libmdbx 0.11.7 (MDBX) es va llançar amb la implementació d'una base de dades de valor-clau incrustada compacta d'alt rendiment. El codi libmdbx té llicència sota la llicència pública OpenLDAP. Tots els sistemes operatius i arquitectures actuals són compatibles, així com el Russian Elbrus 2000.

El llançament destaca per la migració del projecte al servei GitFlic després que el 15 d'abril de 2022, l'administració de GitHub, sense cap avís ni explicació, va eliminar libmdbx juntament amb una sèrie d'altres projectes, alhora que bloquejava l'accés a molts desenvolupadors associats amb empreses subjectes a sancions dels EUA. Des del punt de vista dels usuaris, totes les pàgines, el repositori i les bifurcacions del projecte es van convertir de cop en una pàgina 404, sense possibilitat de cap comunicació i esbrinar-ne els motius.

Malauradament, s'han perdut gairebé tots els temes, en què hi havia moltes preguntes amb respostes detallades, així com moltes discussions. La pèrdua d'aquesta informació és l'únic dany objectiu que l'administració de GitHub va aconseguir infligir al projecte. Les còpies parcials de les discussions continuen disponibles a archive.org.

La pèrdua d'escenaris i infraestructures de CI construïts (disponible per a projectes OpenSource de forma gratuïta) ens va obligar a revisió, unificació i eliminació del petit deute tècnic. Ara CI s'ha restaurat gairebé en la mateixa mesura, amb l'excepció de les proves de compilació i execució de totes les variants de BSD i Solaris. Normalment, després de les accions, GitHub no va rebre cap aclariment ni notificació, a part dels recordatoris sobre la necessitat de pagament i els intents de cancel·lar diners.

Des de les darreres notícies sobre el llançament de libmdbx v0.11.3, a més de la recuperació de les accions de GitHub, val la pena destacar les següents millores i correccions:

  • S'ha afegit una solució alternativa per a un efecte/defecte d'incoherència detectat a la pàgina combinada i la memòria cau de memòria intermèdia al nucli de Linux. En els sistemes on la memòria cau de la pàgina i la memòria intermèdia estan realment combinades, no té sentit que el nucli malgasti memòria per dues còpies de dades quan s'escriu en un fitxer que ja està assignat a la memòria. Per tant, les dades que s'escriuen es fan visibles a través del mapeig de memòria abans que finalitzi la crida al sistema write(), fins i tot si les dades encara no s'han escrit al disc.

    En general, un altre comportament no és racional, ja que amb una fusió ajornada, encara haureu d'adquirir bloquejos per a llistes de pàgines, copiar dades o ajustar el PTE. Per tant, la regla de coherència tàcita està en vigor des de 1989, quan la memòria cau de memòria intermèdia unificada va aparèixer a SRV4. Per tant, detectar bloquejos estranys en escenaris d'explotació de libmdbx carregats va requerir molta feina. Primer per reproduir el problema, després per verificar hipòtesis i provar millores.

    Ara podem afirmar amb confiança que el problema s'ha identificat, localitzat i eliminat de manera fiable, malgrat la complexitat i especificitat de l'escenari de reproducció. A més, un dels desenvolupadors d'Erigon (Ethereum) va confirmar el funcionament del mecanisme de bypass; en el seu cas, a la compilació de depuració, la protecció es va activar com a regressió a causa d'una comprovació d'assert innecessària.

    Cal tenir en compte que en el context de l'ús generalitzat de libmdbx en projectes de producció, garantir un funcionament fiable és fonamentalment més important que esbrinar si es tracta d'un error o d'una característica i si es pot confiar en aquesta coherència, i molt menys cercar la causes de la incoherència dins del nucli Linux. Per tant, aquí estem parlant de solucionar un problema que podria haver afectat els usuaris.

  • S'ha eliminat la regressió de l'error EXDEV (enllaç entre dispositius) en copiar en calent una base de dades sense compactació a un altre sistema de fitxers, tant mitjançant l'API com amb la utilitat mdbx_copy.
  • Kris Zyp va implementar el suport libmdbx a Deno. Kai Wetlesen va dissenyar embalatges RPM per a Fedora. David Bouyssié va implementar enllaços per a Scala.
  • S'ha solucionat el processament del valor especificat per l'opció MDBX_opt_rp_augment_limit quan es processen grans transaccions en grans bases de dades. Anteriorment, a causa d'un error, es podien realitzar accions innecessàries, que de vegades afectaven el rendiment en les implementacions d'Ethereum (Erigon/Akula/Silkworm) i els projectes Binance Chain.
  • S'han corregit molts errors, inclòs l'API de C++. S'han solucionat molts problemes de construcció en configuracions rares i exòtiques. Una llista completa de totes les millores significatives està disponible a ChangeLog.
  • S'han fet un total de 185 canvis a 89 fitxers, s'han afegit ≈3300 línies, ≈4100 es van suprimir. Es van eliminar més a causa principalment de la neteja de fitxers de tecnologia ja inútils associats a GitHub i serveis dependents.

Històricament, libmdbx és un redisseny profund del SGBD LMDB i supera el seu progenitor en termes de fiabilitat, conjunt de funcions i rendiment. En comparació amb LMDB, libmdbx posa molt èmfasi en la qualitat del codi, l'estabilitat de l'API, les proves i les comprovacions automatitzades. Es proporciona una utilitat per comprovar la integritat de l'estructura de la base de dades amb algunes opcions de recuperació.

En termes tecnològics, libmdbx ofereix ACID, serialització de canvis forts i lectures sense bloqueig amb escala lineal als nuclis de la CPU. S'admeten la compactació automàtica, la gestió automàtica de la mida de la base de dades i l'estimació de consultes d'interval. Des del 2016, el projecte està finançat per Positive Technologies i s'utilitza en els seus productes des del 2017.

libmdbx ofereix una API C++ desenvolupada, així com enllaços compatibles amb entusiastes als idiomes Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Font: opennet.ru

Afegeix comentari