Pagpagawas sa high-performance embedded DBMS libmdbx 0.10.4 ug libfpta 0.3.9

Ang libmdbx 0.10.4 (MDBX) nga librarya gipagawas uban ang pagpatuman sa usa ka high-performance compact embedded key-value database, ug ang kaubang libfpta 0.3.9 (FPTA) nga librarya, nga nagpatuman sa usa ka tabular nga representasyon sa datos nga adunay secondary ug composite index. sa ibabaw sa MDBX. Ang duha ka librarya gipang-apud-apod ubos sa OSI aprubado nga mga lisensya. Ang tanan nga kasamtangan nga operating system ug arkitektura gisuportahan, ingon man ang Russian Elbrus 2000.

Sa kasaysayan, ang libmdbx usa ka lawom nga pag-rework sa LMDB DBMS ug labaw sa iyang katigulangan sa kasaligan, set sa feature ug performance. Kung itandi sa LMDB, ang libmdbx naghatag daghang gibug-aton sa kalidad sa code, kalig-on sa API, pagsulay, ug awtomatiko nga pagsusi. Usa ka gamit alang sa pagsusi sa integridad sa istruktura sa database nga adunay pipila ka mga kapabilidad sa pagbawi gihatag.

Maalamon sa teknolohiya, ang libmdbx nagtanyag sa ACID, kusog nga pagbag-o sa serialization, ug dili pag-block nga mga pagbasa nga adunay linear scaling sa mga cores sa CPU. Auto-compactification, automatic database size management, ug range query estimation gisuportahan. Sukad sa 2016, ang mga proyekto gipondohan sa Positive Technologies ug sukad 2017 gigamit sa mga produkto niini.

Nagtanyag ang libmdbx og C++ API, ingon man ang mga gigapos nga pinulongan nga gisuportahan sa mga mahiligon alang sa Rust, Haskell, Python, NodeJS, Ruby, Go, ug Nim. Alang sa libfpta, ang paghulagway lamang sa API ang magamit sa publiko sa porma sa usa ka C/C++ header file.

Ang dagkong mga inobasyon, pagpaayo ug pagtul-id gidugang sukad sa miaging balita sa Mayo 9:

  • Makapahimo sa mga reproducible nga pagtukod.
  • Giayo ang usa ka bug tungod niini, sa talagsaon nga mga kahimtang, ang usa ka loop/freeze mahimong mahitabo sa panahon sa usa ka transaksyon nga nahimo. Ang problema giila sa mga espesyalista sa Positive Tecnologies atol sa internal nga pagsulay sa ilang kaugalingong mga produkto.
  • Gipauswag ang mga pagsulay ug gipalapdan ang mga senaryo sa pagsulay aron masusi ang tanang maabot nga non-isomorphic nga estado sa page tree ug mga sulod sa GC sulod sa database.
  • Sa C++ API, usa ka dugang nga "noexcept" ang naayo, dugang nga mga overload ang gidugang alang sa "cursor:: erase()" nga pamaagi, ang pagpatuman sa mga buffer naluwas sa paggamit sa "std:: string" aron masiguro ang pag-align (may kalabutan alang sa CLANG libstdc++).
  • Usa ka pagbag-o sa hugaw nga panid nga spilling algorithm (pinili nga ejection sa giusab nga mga panid sa database) nga gipakita sa usa ka talagsaon nga wala damha nga MDBX_PROBLEM nga sayup kung ang pagbag-o sa datos sa dagkong mga transaksyon nawagtang.
  • Ang usa ka phasing test gihimo uban ang pagdugang sa daghang mga tseke aron masiguro ang kalig-on kung adunay tinuyo nga kadaot sa database.
  • Giayo ang mga menor de edad nga mga pahimangno nga Wala mahibal-an ang mga isyu sa Pag-scan sa Behavior ug Coverity Scan.
  • Giayo ang pagsusi sa karaan ug wala na gigamit nga internal nga bandila nga "P_DIRTY" sa mga nested nga panid sa sulod sa mga imahe sa database nga gihimo sa mga daan nga bersyon sa librarya.
  • Sa mga script sa CMake, ang pagpangita sa mga sangkap sa compiler nga gikinahanglan alang sa LTO (link-time optimization) gipauswag.
  • Ang kinatas-ang ihap sa dungan nga mga magbabasa nadugangan ngadto sa 32767.
  • Gipauswag nga pasundayag kung gigamit ang Valgrind ug AddressSanitizer.
  • Sa Windows, ang recursive nga paggamit sa SRW-lock sa dihang nagtrabaho sa MDBX_NOTLS mode (nga walay paggamit sa thread local storage) giwagtang, ang bootid generation naayo kung ang sistema sa oras nausab, ang WSL1 ug WSL2 detection naayo, ug ang abilidad sa ablihan ang usa ka database sa Plano 9 nga gitaod pinaagi sa DrvFS gidugang.
  • Sa kinatibuk-an, labaw pa sa 160 nga mga pagbag-o ang gihimo sa 57 nga mga file, ~ 5000 nga linya ang gidugang, ~ 2500 ang natangtang.

Labi na nakong pasalamatan ang team sa proyekto sa Erigon (Ethereum ecosystem) sa ilang tabang sa pagsulay sa mga sitwasyon sa grabeng paggamit. Mahinungdanon nga sa lima ka bulan sukad sa pagpagawas sa libmdbx v0.10.0, nga adunay gidaghanon sa database nga 1-2 TB sa matag pag-install sa Erigon (gigamit sa 7% sa mga node sa Ethereum), tulo ra nga mga taho sa korapsyon sa database ang nadawat, tanan sa nga nahitabo tungod sa panggawas nga mga hinungdan, ug dili mga sayup sa software: sa duha ka mga kaso ang hinungdan mao ang mga kapakyasan sa RAM, sa ikatulo usa ka sayup sa pag-reset sa datos sa usa ka piho nga pagsumpo sa subsystem sa pagtipig gamit ang BTRFS.

Source: opennet.ru

Idugang sa usa ka comment