Vydanie vysoko výkonného vstavaného DBMS libmdbx 0.10.4 a libfpta 0.3.9

Knižnice libmdbx 0.10.4 (MDBX) boli vydané s implementáciou vysoko výkonnej kompaktnej vloženej databázy kľúč-hodnota a súvisiacej knižnice libfpta 0.3.9 (FPTA), ktorá implementuje tabuľkovú reprezentáciu údajov so sekundárnymi a zloženými indexmi. na vrchu MDBX. Obe knižnice sú distribuované pod licenciami schválenými OSI. Podporované sú všetky súčasné operačné systémy a architektúry, ako aj ruský Elbrus 2000.

Historicky je libmdbx hlbokým prepracovaním LMDB DBMS a je lepší ako jeho predchodca v spoľahlivosti, sade funkcií a výkonu. V porovnaní s LMDB kladie libmdbx veľký dôraz na kvalitu kódu, stabilitu API, testovanie a automatické kontroly. Dodáva sa pomocný program na kontrolu integrity databázovej štruktúry s niektorými schopnosťami obnovy.

Z technologického hľadiska ponúka libmdbx ACID, silnú serializáciu zmien a neblokujúce čítanie s lineárnym škálovaním medzi jadrami CPU. Podporovaná je automatická kompaktifikácia, automatická správa veľkosti databázy a odhad dotazu na rozsah. Od roku 2016 projekty financuje spoločnosť Positive Technologies a od roku 2017 sú využívané v jej produktoch.

libmdbx ponúka C++ API, ako aj nadšencom podporované jazykové väzby pre Rust, Haskell, Python, NodeJS, Ruby, Go a Nim. Pre libfpta je verejne dostupný iba popis API vo forme hlavičkového súboru C/C++.

Hlavné novinky, vylepšenia a opravy pridané od predchádzajúcej správy z 9. mája:

  • Umožňuje reprodukovateľné zostavy.
  • Opravená chyba, kvôli ktorej vo veľmi zriedkavých prípadoch mohlo dôjsť k slučke/zamrznutiu počas potvrdenia transakcie. Problém identifikovali špecialisti Positive Tecnologies pri internom testovaní vlastných produktov.
  • Testy boli vylepšené a testovacie scenáre boli rozšírené na kontrolu všetkých dosiahnuteľných neizomorfných stavov stromu stránok a obsahu GC v databáze.
  • V C++ API bol opravený ďalší „noexcept“, boli pridané ďalšie preťaženia pre metódu „cursor::erase()“, implementácia vyrovnávacích pamätí bola ušetrená od použitia „std::string“, aby sa zabezpečilo zarovnanie (relevantné pre CLANG libstdc++).
  • Regresia v algoritme prelievania nečistých stránok (selektívne vyhadzovanie zmenených databázových stránok), ktorá sa prejavovala zriedkavou neočakávanou chybou MDBX_PROBLEM pri zmene údajov vo veľkých transakciách, bola odstránená.
  • Uskutočnil sa fázový test s pridaním množstva kontrol na zabezpečenie stability v prípade úmyselného poškodenia databázy.
  • Opravené menšie problémy s upozorneniami UndefinedBehaviorSanitizer a Coverity Scan.
  • Opravená kontrola zastaraného a už nepoužívaného interného príznaku „P_DIRTY“ na vnorených stránkach v databázových obrazoch vytvorených staršími verziami knižnice.
  • V skriptoch CMake bolo vylepšené vyhľadávanie komponentov kompilátora, ktoré sú potrebné pre LTO (link-time optimalizácia).
  • Maximálny počet simultánnych čitateľov bol zvýšený na 32767.
  • Vylepšený výkon pri používaní Valgrind a AddressSanitizer.
  • V systéme Windows bolo eliminované rekurzívne používanie SRW-lock pri práci v režime MDBX_NOTLS (bez použitia lokálneho úložiska vlákien), bolo opravené generovanie bootidov, ak sa zmenil systémový čas, bola vylepšená detekcia WSL1 a WSL2 a schopnosť bolo pridané otvoriť databázu na pláne 9 pripojená cez DrvFS.
  • Celkovo bolo vykonaných viac ako 160 zmien v 57 súboroch, bolo pridaných ~5000 riadkov, ~2500 bolo odstránených.

Osobitne by som sa chcel poďakovať projektovému tímu Erigon (ekosystém Ethereum) za pomoc pri testovaní v scenároch extrémneho použitia. Je príznačné, že za päť mesiacov od vydania libmdbx v0.10.0 s objemom databázy 1 – 2 TB v každej inštalácii Erigon (použitých na 7 % uzlov Etherea) boli prijaté iba tri správy o poškodení databázy, všetky ku ktorému došlo z vonkajších príčin, a nie softvérových chýb: v dvoch prípadoch boli príčinou zlyhania pamäte RAM, v treťom chyba pri resetovaní údajov v konkrétnej konfigurácii úložného subsystému pomocou BTRFS.

Zdroj: opennet.ru

Pridať komentár