Rhyddhau perfformiad uchel wedi'i fewnosod DBMS libmdbx 0.10.4 a libfpta 0.3.9

Rhyddhawyd y llyfrgell libmdbx 0.10.4 (MDBX) gyda gweithredu cronfa ddata gwerth allweddol mewnosodedig cryno perfformiad uchel, a'r llyfrgell libfpta 0.3.9 (FPTA) gysylltiedig, sy'n gweithredu cynrychiolaeth tabl o ddata gyda mynegeion uwchradd a chyfansawdd ar ben MDBX. Dosberthir y ddwy lyfrgell o dan drwyddedau a gymeradwyir gan yr OSI. Cefnogir yr holl systemau gweithredu a phensaernïaeth gyfredol, yn ogystal â'r Elbrus 2000 o Rwsia.

Yn hanesyddol, mae libmdbx yn ail-weithio dwfn o'r LMDB DBMS ac mae'n well na'i hynafiad o ran dibynadwyedd, set nodwedd a pherfformiad. O'i gymharu â LMDB, mae libmdbx yn rhoi llawer o bwyslais ar ansawdd cod, sefydlogrwydd API, profi, a gwiriadau awtomataidd. Darperir cyfleustodau ar gyfer gwirio cywirdeb strwythur y gronfa ddata gyda rhai galluoedd adfer.

O ran technoleg, mae libmdbx yn cynnig ACID, cyfresoli newid cryf, a darlleniadau di-rwystro gyda graddio llinellol ar draws creiddiau CPU. Cefnogir awto-gywasgu, rheoli maint cronfa ddata yn awtomatig, ac amcangyfrif ymholiad amrediad. Ers 2016, mae prosiectau wedi'u hariannu gan Positive Technologies ac ers 2017 wedi'u defnyddio yn ei gynhyrchion.

Mae libmdbx yn cynnig API C ++, yn ogystal â rhwymiadau iaith a gefnogir gan frwdfrydedd ar gyfer Rust, Haskell, Python, NodeJS, Ruby, Go, a Nim. Ar gyfer libfpta, dim ond y disgrifiad API sydd ar gael yn gyhoeddus ar ffurf ffeil pennawd C/C++.

Ychwanegwyd arloesiadau, gwelliannau a chywiriadau mawr ers y newyddion blaenorol ar Fai 9:

  • Mae'n galluogi adeiladau y gellir eu hatgynhyrchu.
  • Wedi trwsio nam a allai, mewn amgylchiadau prin iawn, dolen/rhewi ddigwydd yn ystod ymrwymiad trafodiad. Nodwyd y broblem gan arbenigwyr Positive Tecnologies yn ystod profion mewnol o'u cynhyrchion eu hunain.
  • Mae profion wedi'u gwella ac mae senarios prawf wedi'u hehangu i wirio holl gyflwr an-isomorffig y goeden dudalen a chynnwys GC y tu mewn i'r gronfa ddata.
  • Yn yr API C ++, mae “noexcept” ychwanegol wedi'i osod, mae gorlwythiadau ychwanegol wedi'u hychwanegu ar gyfer y dull “cyrchwr:: dileu()”, mae gweithredu byfferau wedi'i arbed rhag defnyddio “std::string” i sicrhau aliniad (yn berthnasol ar gyfer CLANG libstdc++).
  • Mae atchweliad yn yr algorithm sarnu tudalennau budr (dafliad detholus o dudalennau cronfa ddata wedi'u newid) a amlygwyd gan wall annisgwyl prin MDBX_PROBLEM wrth newid data mewn trafodion enfawr wedi'i ddileu.
  • Cynhaliwyd prawf graddol gan ychwanegu nifer o wiriadau i sicrhau sefydlogrwydd pe bai difrod bwriadol i'r gronfa ddata.
  • Mân rybuddion sefydlog UndefinedBehaviorSanitizer a materion Sgan Coverity.
  • Sefydlog yn gwirio'r faner fewnol hen ffasiwn “P_DIRTY” mewn tudalennau nythu y tu mewn i ddelweddau cronfa ddata a grëwyd gan fersiynau hŷn o'r llyfrgell.
  • Mewn sgriptiau CMake, mae'r chwiliad am gydrannau casglwr sydd eu hangen ar gyfer LTO (optimeiddio amser cyswllt) wedi'i wella.
  • Cynyddwyd uchafswm nifer y darllenwyr ar yr un pryd i 32767.
  • Gwell perfformiad wrth ddefnyddio Valgrind a AddressSanitizer.
  • Ar Windows, mae'r defnydd ailadroddus o SRW-lock wrth weithio yn y modd MDBX_NOTLS (heb ddefnyddio storfa edau lleol) wedi'i ddileu, mae cynhyrchu bootid wedi'i osod os yw amser y system wedi newid, mae canfod WSL1 a WSL2 wedi'i wella, a'r gallu i agor cronfa ddata ar Gynllun 9 wedi'i osod trwy DrvFS wedi'i ychwanegu.
  • Yn gyfan gwbl, gwnaed mwy na 160 o newidiadau i 57 o ffeiliau, ychwanegwyd ~5000 o linellau, ~ dilëwyd ~2500.

Hoffwn ddiolch yn arbennig i dîm prosiect Erigon (ecosystem Ethereum) am eu cymorth wrth brofi senarios defnydd eithafol. Mae'n arwyddocaol, mewn pum mis ers rhyddhau libmdbx v0.10.0, gyda chyfrol cronfa ddata o 1-2 TB ym mhob gosodiad Erigon (a ddefnyddir ar 7% o nodau Ethereum), dim ond tri adroddiad o lygredd cronfa ddata a dderbyniwyd, pob un o a ddigwyddodd oherwydd rhesymau allanol, ac nid gwallau meddalwedd: mewn dau achos yr achos oedd methiannau RAM, yn y trydydd gwall wrth ailosod data mewn cyfluniad penodol o'r is-system storio gan ddefnyddio BTRFS.

Ffynhonnell: opennet.ru

Ychwanegu sylw