Paglabas ng high-performance na naka-embed na DBMS libmdbx 0.10.4 at libfpta 0.3.9

Ang mga library ng libmdbx 0.10.4 (MDBX) ay inilabas sa pagpapatupad ng isang high-performance na compact na naka-embed na key-value database, at ang nauugnay na libfpta 0.3.9 (FPTA) na library, na nagpapatupad ng isang tabular na representasyon ng data na may pangalawang at pinagsama-samang mga index sa ibabaw ng MDBX. Ang parehong mga aklatan ay ipinamamahagi sa ilalim ng mga inaprubahang lisensya ng OSI. Lahat ng kasalukuyang operating system at arkitektura ay suportado, pati na rin ang Russian Elbrus 2000.

Sa kasaysayan, ang libmdbx ay isang malalim na reworking ng LMDB DBMS at mas mataas kaysa sa ninuno nito sa pagiging maaasahan, set ng tampok at pagganap. Kung ikukumpara sa LMDB, binibigyang-diin ng libmdbx ang kalidad ng code, katatagan ng API, pagsubok, at mga awtomatikong pagsusuri. Ang isang utility para sa pagsuri sa integridad ng istraktura ng database na may ilang mga kakayahan sa pagbawi ay ibinibigay.

Marunong sa teknolohiya, ang libmdbx ay nag-aalok ng ACID, malakas na pagbabago ng serialization, at hindi nakaharang na mga pagbabasa na may linear scaling sa mga CPU core. Ang auto-compactification, awtomatikong pamamahala ng laki ng database, at pagtatantya ng query sa hanay ay sinusuportahan. Mula noong 2016, ang mga proyekto ay pinondohan ng Positive Technologies at mula noong 2017 ay ginamit sa mga produkto nito.

Nag-aalok ang libmdbx ng C++ API, pati na rin ang mga enthusiast-supported language bindings para sa Rust, Haskell, Python, NodeJS, Ruby, Go, at Nim. Para sa libfpta, ang paglalarawan ng API lang ang pampublikong available sa anyo ng isang C/C++ header file.

Ang mga pangunahing inobasyon, pagpapahusay at pagwawasto ay idinagdag mula noong nakaraang balita noong Mayo 9:

  • Ine-enable ang mga reproducible build.
  • Inayos ang isang bug dahil sa kung saan, sa napakabihirang mga pangyayari, maaaring mangyari ang isang loop/freeze sa panahon ng isang transaksyon na ginawa. Natukoy ang problema ng mga espesyalista sa Positive Tecnologies sa panahon ng panloob na pagsubok ng kanilang sariling mga produkto.
  • Napabuti ang mga pagsubok at pinalawak ang mga senaryo ng pagsubok upang suriin ang lahat ng naaabot na hindi isomorphic na estado ng page tree at mga nilalaman ng GC sa loob ng database.
  • Sa C++ API, isang dagdag na "noexcept" ay naayos na, karagdagang mga labis na karga ay naidagdag para sa "cursor::erase()" na paraan, ang pagpapatupad ng mga buffer ay naligtas sa paggamit ng "std::string" upang matiyak ang pagkakahanay (may kaugnayan para sa CLANG libstdc++).
  • Ang isang regression sa maruming page spilling algorithm (selective ejection ng binagong database page) na ipinakita ng isang bihirang hindi inaasahang error na MDBX_PROBLEM kapag ang pagbabago ng data sa malalaking transaksyon ay inalis.
  • Ang isang phasing test ay isinagawa kasama ang pagdaragdag ng isang bilang ng mga pagsusuri upang matiyak ang katatagan sa kaganapan ng intensyonal na pinsala sa database.
  • Inayos ang mga menor de edad na babala na UndefinedBehaviorSanitizer at Coverity Scan na mga isyu.
  • Inayos ang pagsuri sa luma at hindi na ginagamit na panloob na flag na "P_DIRTY" sa mga nested na pahina sa loob ng mga imahe ng database na ginawa ng mga mas lumang bersyon ng library.
  • Sa mga script ng CMake, ang paghahanap para sa mga bahagi ng compiler na kinakailangan para sa LTO (link-time optimization) ay napabuti.
  • Ang maximum na bilang ng sabay-sabay na mga mambabasa ay nadagdagan sa 32767.
  • Pinahusay na performance kapag gumagamit ng Valgrind at AddressSanitizer.
  • Sa Windows, ang recursive na paggamit ng SRW-lock kapag nagtatrabaho sa MDBX_NOTLS mode (nang hindi gumagamit ng thread local storage) ay inalis, bootid generation ay naayos kung ang oras ng system ay nagbago, WSL1 at WSL2 detection ay napabuti, at ang kakayahang buksan ang isang database sa Plan 9 na naka-mount sa pamamagitan ng DrvFS ay naidagdag.
  • Sa kabuuan, higit sa 160 pagbabago ang ginawa sa 57 na file, ~5000 linya ang idinagdag, ~2500 ang tinanggal.

Gusto kong pasalamatan lalo na ang pangkat ng proyekto ng Erigon (Ethereum ecosystem) para sa kanilang tulong sa pagsubok sa mga sitwasyon ng matinding paggamit. Mahalaga na sa loob ng limang buwan mula noong inilabas ang libmdbx v0.10.0, na may dami ng database na 1-2 TB sa bawat pag-install ng Erigon (ginamit sa 7% ng mga Ethereum node), tatlong ulat lamang ng katiwalian sa database ang natanggap, lahat ay na nangyari dahil sa mga panlabas na kadahilanan, at hindi mga error sa software: sa dalawang kaso ang sanhi ay ang mga pagkabigo ng RAM, sa pangatlo ay isang error sa pag-reset ng data sa isang tiyak na pagsasaayos ng subsystem ng imbakan gamit ang BTRFS.

Pinagmulan: opennet.ru

Magdagdag ng komento