Utjefte fan ynbêde DBMS mei hege prestaasjes libmdbx 0.10.4 en libfpta 0.3.9

De biblioteken libmdbx 0.10.4 (MDBX) waarden útbrocht mei de ymplemintaasje fan in hege prestaasjes kompakte ynbêde kaai-wearde databank, en de assosjearre bibleteek libfpta 0.3.9 (FPTA), dy't ymplemintearret in tabel werjefte fan gegevens boppe op MDBX mei sekundêre en gearstalde yndeksen. Beide bibleteken wurde ferspraat ûnder OSI goedkard lisinsjes. Alle hjoeddeistige bestjoeringssystemen en arsjitektueren wurde stipe, lykas de Russyske Elbrus 2000.

Histoarysk is libmdbx in djippe werynrjochting fan 'e LMDB DBMS en oertreft syn foarfaar yn termen fan betrouberens, funksjeset en prestaasjes. Yn ferliking mei LMDB leit libmdbx in protte klam op koadekwaliteit, API-stabiliteit, testen en automatisearre kontrôles. In hulpprogramma foar it kontrolearjen fan de yntegriteit fan 'e databankstruktuer wurdt levere mei guon herstelopsjes.

Technologysk biedt libmdbx ACID, strikte feroaringserialisaasje, en net-blokkearjende lêzings mei lineêre skaalfergrutting oer CPU-kearnen. Autokompaktifikaasje, automatysk behear fan databasegrutte, en skatting fan berikfragen wurde stipe. Sûnt 2016 binne projekten finansierd troch Positive Technologies en binne sûnt 2017 brûkt yn har produkten.

libmdbx biedt in C ++ API, likegoed as entûsjast-stipe bindingen oan Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Foar libfpta is allinich de beskriuwing fan 'e API iepenbier beskikber yn' e foarm fan in C / C ++ header triem.

De wichtichste ynnovaasjes, ferbetteringen en korreksjes tafoege nei it foarige nijs fan 9 maaie:

  • De mooglikheid fan reproducible gearkomsten wurdt foarsjoen.
  • In brek reparearre wêrtroch, yn in heul seldsume set fan omstannichheden, in lus / hingje koe foarkomme tidens it begean fan in transaksje. It probleem waard identifisearre troch Positive Technologies-spesjalisten tidens ynterne testen fan har eigen produkten.
  • Ferbettere tests en útwreide testskripts om alle berikbere net-isomorphyske steaten fan 'e sidebeam en GC-ynhâld yn' e database te testen.
  • Yn 'e C++ API is de ekstra "noexcept" reparearre, ekstra overloads binne tafoege foar de metoade "cursor :: wiskje ()", de ymplemintaasje fan buffers is sparre fan it brûken fan "std :: string" om ôfstimming te garandearjen (relevant foar CLANG libstdc++).
  • In regression reparearre yn it smoarge side-spillingsalgoritme (selektive ekstrudering fan feroare databanksiden) dy't manifestearre waard troch in seldsume ûnferwachte MDBX_PROBLEM-flater by it feroarjen fan gegevens yn enoarme transaksjes.
  • Der is in fazekontrôle útfierd mei de tafoeging fan in oantal kontrôles om stabiliteit te garandearjen yn gefal fan opsetlike skea oan de databank.
  • Fêste lytse problemen mei UndefinedBehaviorSanitizer en Coverity Scan.
  • Fêste kontrôle fan ferâldere en net mear brûkte ynterne flagge "P_DIRTY" yn nestede siden binnen databankôfbyldings makke troch âlde ferzjes fan 'e bibleteek.
  • Yn CMake-skripts is it sykjen nei kompilerkomponinten nedich foar LTO (link-time optimization) ferbettere.
  • It maksimum oantal tagelyk lêzers is ferhege nei 32767.
  • Fersnelle by it brûken fan Valgrind en AddressSanitizer.
  • Op Windows is it rekursive gebrûk fan SRW-slot by it wurkjen yn MDBX_NOTLS-modus (sûnder gebrûk fan lokale opslach fan thread) elimineare, bootid-generaasje is reparearre yn gefal fan systeemtiidwizigingen, WSL1- en WSL2-deteksje is ferbettere, de mooglikheid om te iepenjen in databank op Plan 9 monteard fia DrvFS is tafoege.
  • Yn totaal waarden mear as 160 wizigingen makke oan 57 bestannen, ~5000 rigels waarden tafoege, ~2500 waarden wiske.

Apart wol ik it Erigon-projektteam (Ethereum-ekosysteem) betankje foar har help by it testen yn ekstreme gebrûksgefallen. It is wichtich dat yn 'e fiif moannen sûnt de frijlitting fan libmdbx v0.10.0, mei in databankvolumint fan 1-2 TB yn elke Erigon-ynstallaasje (brûkt troch 7% fan Ethereum-knooppunten), mar trije rapporten fan databaseskea binne ûntfongen, allegear barde fanwege eksterne oarsaken, en net software flaters: yn twa gefallen, de oarsaak wie RAM flaters, yn de tredde, in gegevens reset flater yn in spesifike konfiguraasje fan de opslach subsysteem mei help fan BTRFS.

Boarne: opennet.ru

Add a comment