Drugi kandidat za izdajo libmdbx v1.0 po petih letih razvoja.

Knjižnica libmdbx je bistveno preoblikovan potomec LMDB - izjemno visoko zmogljive, kompaktne vdelane baze podatkov ključ-vrednost.
Trenutna različica v0.5 je tehnična izdaja, ki označuje zaključek kakršnih koli izboljšav in prehod v javno končno fazo testiranja in stabilizacije, s kasnejšim oblikovanjem prve polne izdaje knjižnice.

LMDB je dokaj dobro znan transakcijski vgrajeni DBMS razreda ključ-vrednost, ki temelji na drevo B+ brez proaktivno beleženje, ki omogoča, da roj večnitnih procesov deluje konkurenčno in izjemno učinkovito z lokalno deljeno (ne omrežno) bazo podatkov. Po drugi strani je MDBX hitrejši in zanesljivejši od LMDB, medtem ko libmdbx ohranja vse ključne značilnosti svojega prednika, kot je npr. KISLINA in neblokirajoče branje z linearnim skaliranjem po jedrih CPU ter dodaja tudi nekaj novih.

Opis razlik in izboljšav libmdbx glede na LMDB si zasluži ločen članek (načrtovana je objava na Habré in Medium). Tukaj je primerno omeniti najpomembnejše in opazne:

  • V bistvu je več pozornosti namenjene kakovosti kode, testiranju in avtomatskim preverjanjem.
  • Bistveno več nadzora med delovanjem, od preverjanja parametrov do notranje revizije struktur baze podatkov.
  • Samodejna kompaktizacija in samodejno upravljanje velikosti baze podatkov.
  • En sam format zbirke podatkov za 32-bitne in 64-bitne sklope.
  • Ocena obsega vzorcev po razponih (range query estimation).
  • Podpora za ključe, dvakrat večje od palačink, in velikost strani baze podatkov, ki jo lahko izbere uporabnik.

Izdan kandidat za izdajo libmdbx je rezultat odločitve (glejte spodaj), da se avgusta 2019 razdelita projekta MDBX in MithrilDB. Pri tem se je libmdbx odločil odpraviti (razumno) največji tehnični dolg in stabilizirati knjižnico. Dejansko je bilo v navedeni smeri opravljenega 2-3 krat več dela, kot je bilo prvotno ocenjeno in načrtovano:

  • Implementirana podpora za Mac OS in platforme drugega nivoja: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Po potrebi je mogoče dodati podporo za AIX in HP -UX.
  • Razkužena koda z Undefined Behavior Sanitizer in Address Sanitizer, popravljena vsa gradbena opozorila z -Wpedantic, vsa opozorila Coverity Static Analyzer itd.
  • Nadgradnja Opisi API-jev.
  • Združevanje izvorne kode za lažjo vdelavo.
  • Podpora za CMake.
  • Podpora za ugnezdene transakcije.
  • Uporaba bootida za ugotavljanje, ali se je OS znova zagnal (umazana zaustavitev baze podatkov).
  • Število posodobljenih/starih strani od konca do konca in napredne informacije o transakcijah.
  • Možnost MDBX_ACCEDE za povezavo z že odprto zbirko podatkov v združljivem načinu.
  • Uporaba OFD ključavnice glede na njihovo razpoložljivost.
  • Vroča varnostna kopija v cevi.
  • Specializiran optimiziran notranji algoritem za razvrščanje (do 2-3-krat hitrejši od qsort() in do 30 % hitrejši od std::sort()).
  • Povečana največja dolžina ključa.
  • Samodejni nadzor vnaprejšnjega branja (strategija predpomnjenja datotek baze podatkov v pomnilniku).
  • Agresivnejše in hitrejše samodejno zbijanje.
  • Bolj optimalna strategija za združevanje drevesnih strani B+.
  • Nadzor nad nelokalnimi datotečnimi sistemi (NFS, Samba, itd.) za preprečevanje poškodb baze podatkov zaradi zlorabe.
  • Razširjena zbirka testov.

Razvoj "naslednje" različice libmdbx se bo nadaljeval kot ločen projekt MithrilDB, medtem ko je razvojni vektor "trenutne" različice MDBX usmerjen v zamrznitev nabora funkcij in stabilizacijo. Ta odločitev je bila sprejeta iz treh razlogov:

  • Popolna nezdružljivost: MithrilDB zahteva drugačno (nezdružljivo) obliko datoteke baze podatkov in drugačen (nezdružljiv) API za izvajanje vseh načrtovanih funkcij.
  • Nova izvorna koda: izvorna koda MithrilDB je licenčno neodvisna od LMDB, sam projekt pa naj bi bil objavljen pod drugo licenco (odobril ALI ČE licenca Apache 2.0In ne OpenLDAP Foundation).
  • Ločevanje preprečuje morebitno zmedo, vnaša več gotovosti in zagotavlja neodvisnost razvojne poti projektov.

MithrilDB, tako kot MDBX, prav tako temelji na drevo B+ zanj pa bo značilna tudi izjemno visoka zmogljivost, hkrati pa bo odpravljena vrsta temeljnih pomanjkljivosti MDBX in LMDB. Zlasti bo odpravljen problem "dolgih branj", ki se kaže kot "nabrekanje" baze podatkov zaradi dejstva, da je obdelava smeti blokirana s transakcijami dolgega branja. Nove funkcije MithrilDB vključujejo:

  • podpora za postavitev baze podatkov na več heterogenih medijev: HDD, SSD in obstojni pomnilnik.
  • optimalne strategije za "dragocene" in "nizke vrednosti", za "vroče", "tople" in "hladne" podatke.
  • uporabo drevesa Merkle za nadzor celovitosti baze podatkov.
  • izbirna uporaba WAL in bistveno boljša zmogljivost v scenarijih z intenzivnim pisanjem z jamstvi za celovitost podatkov.
  • lazy catch-up se zaveže na diske.

Vir: linux.org.ru

Dodaj komentar