Al doilea candidat pentru versiunile libmdbx v1.0 după cinci ani de dezvoltare.

Biblioteca libmdbx este un descendant semnificativ îmbunătățit al LMDB — o bază de date încorporată, extrem de performantă și compactă, de tip cheie-valoare.
Versiunea actuală v0.5 este o lansare tehnică, marcând finalizarea oricăror modificări și trecerea la faza de testare publică finală și stabilizare, urmată de formarea primei versiuni complete a bibliotecii.

LMDB este o bază de date încorporată tranzacțională cunoscută de tip „cheie-valoare” bazată pe arborele B+ fără jurnalizarea anticipată, care permite unui grup de procese multi-thread să lucreze concurent și extrem de eficient cu o bază de date local partajată (nu rețea). În acest sens, MDBX este mai rapid și mai fiabil decât LMDB, păstrând în același timp toate capabilitățile cheie ale predecesorului său, cum ar fi ACID și citirea non-blocantă cu scalare liniară pe nucleele CPU, adăugând în același timp câteva noutăți.

Descrierea diferențelor și îmbunătățirilor libmdbx față de LMDB merită un articol separat (se preconizează publicarea pe „Habr” și „Medium”). Aici este oportun să menționăm cele mai importante și notabile:

  • O atenție semnificativ mai mare este acordată calității codului, testării și verificărilor automate.
  • Compactarea automată și gestionarea automată a dimensiunii Bazei de Date.
  • Format unic de Baza de Date pentru build-uri de 32 și 64 de biți.
  • Estimarea volumului interogărilor pe intervale (range query estimation).
  • Estimarea volumului interogărilor pe intervale (estimarea interogărilor pe intervale).
  • Suport pentru chei de două ori mai mari și dimensiunea paginii bazei de date aleasă de utilizator.

Lansarea candidatului libmdbx este rezultatul deciziei (vezi mai jos) de a separa proiectele MDBX și MithrilDB în august 2019. În acest context, s-a decis să se elimine (rational) maximum de datorii tehnice și să se stabilizeze biblioteca. În fapt, în direcția menționată s-a realizat de 2-3 ori mai mult decât a fost estimat și planificat inițial:

  • A fost implementat suportul pentru Mac OS și platformele de „al doilea nivel”: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Suportul pentru AIX și HP-UX poate fi adăugat la nevoie.
  • S-a efectuat o curățare a codului cu ajutorul Undefined Behavior Sanitizer și Address Sanitizer, eliminând toate avertizările în timpul compilării cu -Wpedantic, toate avertizările analizei statice Coverity etc.
  • Actualizarea descrierii API.
  • Amalgamarea codului sursă pentru a facilita integrarea.
  • Suport pentru CMake.
  • Suport pentru tranzacții imbricate.
  • Utilizarea bootid pentru a determina existența unei reporniri a sistemului de operare (oprirea murdară a bazei de date).
  • Contorizarea totală a paginilor actualizate/vechi și informații extinse despre tranzacții.
  • Opțiunea MDBX_ACCEDE pentru conectarea la o bază de date deja deschisă în modul compatibil.
  • Utilizare blocări OFD în cazul în care sunt disponibile.
  • Backup la cald în pipe.
  • Un algoritm specializat optimizat pentru sortare internă (de până la 2-3 ori mai rapid decât qsort() și cu până la 30% mai rapid decât std::sort()).
  • Lungimea maximă a cheii a fost extinsă.
  • Gestionarea automată a citirii anticipate (strategia de caching a fișierului bazei de date în memorie).
  • Compacție automată mai agresivă și rapidă.
  • O strategie de îmbinare a paginilor B+ mai optimă.
  • Controlul sistemelor de fișiere non-locale (NFS, Samba etc.) pentru prevenirea deteriorării bazei de date în cazul unei utilizări incorecte.
  • Setul de teste a fost extins.

Dezvoltarea versiunii „următoare” a libmdbx va continua în cadrul unui proiect separat. MithrilDB, în timp ce vectorul de dezvoltare al versiunii „curente” MDBX este orientat spre înghețarea setului de funcționalități și stabilizare. Această decizie a fost luată din trei motive:

  • Incompatibilitate totală: pentru implementarea tuturor funcționalităților planificate în MithrilDB este necesar un format de fișier al bazei de date diferit (incompatibil) și un API diferit (incompatibil).
  • Noul cod sursă: codul sursă al MithrilDB va avea independență de licență față de LMDB, iar proiectul va fi publicat sub o altă licență (aprobată OSI licența Apache 2.0, nu OpenLDAP Foundation).
  • Divizarea permite evitarea confuziilor potențiale, oferind mai multă claritate și asigurând independența în dezvoltarea proiectelor.

MithrilDB, ca și MDBX, se bazează și pe arborele B+ și se va distinge printr-o performanță extrem de înaltă, eliminând în același timp o serie de defecte fundamentale ale MDBX și LMDB. În special, va fi rezolvată problema „lecturilor îndelungate”, care se manifestă ca o „umflare” a bazei de date din cauza faptului că procesarea de curățare este blocată de tranzacțiile de citire lungi. Printre noile funcționalități ale MithrilDB se numără:

  • suport pentru găzduirea bazelor de date pe suporturi heterogene: HDD, SSD și memorie non-volatile.
  • strategii optime pentru datele „valoroase” și „non-valoroase”, pentru datele „fierbinți”, „călduțe” și „reci”.
  • utilizarea Merkle tree pentru a controla integritatea bazelor de date.
  • utilizarea opțională a WAL și o performanță semnificativ mai mare în scenariile cu scriere intensă și garanții de integritate a datelor.
  • fixarea leneșă a datelor pe discuri.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster