UtgÄvan av biblioteket libmdbx 0.13.7 (MDBX) har publicerats med implementeringen av en högpresterande kompakt inbyggd nyckel-vÀrde-databas. Koden för libmdbx distribueras under Apache 2.0-licensen. Alla aktuella operativsystem och arkitekturer stöds, inklusive den ryska Elbrus 2000. För libmdbx erbjuds ett utvecklat API för C++, samt stödda bindningar för sprÄk som Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno och Scala. Bland projekten som anvÀnder libmdbx kan nÀmnas Isar, Erigon och Reth samt utvecklingarna av StarkWare och Positive Technologies.
Historiskt sett Àr libmdbx en djupgÄende omarbetning av databashanteraren LMDB och övertrÀffar sin föregÄngare i pÄlitlighet, funktionalitet och prestanda. JÀmfört med LMDB lÀgger libmdbx stort fokus pÄ kodkvalitet, stabilitet i API:et, testning och automatiska kontroller. En databasintegritetskontrollverktyg levereras med vissa ÄterstÀllningsfunktioner. Teknologiskt erbjuder libmdbx ACID, strikt serialisering av förÀndringar och icke-blockerande lÀsning med linjÀr skalning över CPU-kÀrnor. Automatisk komprimering, automatisk hantering av databasens storlek och uppskattning av urvalets volym över intervall (range query estimation) stöds.
Huvudsakliga förÀndringar:
- En kritisk bugg i funktionen mdbx_env_resurrect_after_fork() vid anvÀndning av SysV-semaforer har ÄtgÀrdats. Felet uppstod endast efter skapandet av en barnprocess via fork() under en pÄgÄende skrivtransaktion, vilket ledde till felaktig funktionalitet i semaforerna och dÀrmed olika typer av fel, upp till och med databaskorruption. Problemet har funnits sedan mdbx_env_resurrect_after_fork() introducerades och pÄverkade macOS samt POSIX-plattformar vid kompilering med alternativet MDBX_LOCKING=5.
- Ett problem i API:t för databasöverföring, som uppstod pÄ andra POSIX-system Àn Linux (frÀmst macOS), samt i vissa fall nÀr den mÄlfilen lÄg pÄ en icke-lokal filsystem, har ÄtgÀrdats. Problemet ledde till ett felmeddelande EWOULDBLOCK/EAGAIN, vilket berodde pÄ en brist/motsÀttning mellan lÄsningar fcntl(F_SETLK) och flock() i operativsystemets kÀrna. Felhanteringen för filblockering i API:t för databasöverföring har omarbetats för POSIX-system.
- En bugg som ledde till ett ovÀntat ÄtervÀndande av MDBX_BAD_DBI vid samtidigt startande av flera transaktioner inom en och samma process efter att databasen öppnats har ÄtgÀrdats.
- En bugg som ledde till ett ovÀntat ÄtervÀndande av MDBX_DBS_FULL vid Äteröppnande av redan öppnade tabeller och nÀr grÀnsen för öppna DBI-deskriptorer hade nÄtts har ÄtgÀrdats.
- Byggfel för Android-plattformar vid tydlig definition av _FILE_OFFSET_BITS har ÄtgÀrdats.
- Problemet med anvÀndning av ENOMEM istÀllet för MDBX_ENOMEM har ÄtgÀrdats. Detta kunde förstöra byggprocessen pÄ icke-POSIX/Windows-plattformar, beroende pÄ konfiguration och/eller SDK-version.
- Flera felaktiga assert-kontroller har korrigerats eller tagits bort, vilket ledde till kraschar i debug-uppbyggnader under specifika förhÄllanden. Detta gÀllde frÀmst koden i funktionerna txn_end(), txn_lock() och txn_unlock() bÄde pÄ Windows och POSIX.
- Onödiga MSVC-varningar har ÄtgÀrdats. Varningarna C5286 och C5287 har inaktiverats.
- Logiken för att avbryta anvÀndningen av OFD-lÄs pÄ POSIX-plattformar har förbÀttrats. Nu beaktas utöver EINVAL Àven ytterligare felkoder (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), vilket gör att det sammanstÀllda biblioteket kan fungera i vissa fall dÀr nuvarande kÀrna/kontainer/emulator inte stödjer de nödvÀndiga systemanropen.
- Testramverket har fĂ„tt stöd för alternativet "ânuma " för att binda den stokastiska testen till en NUMA-nod. I battery/tmux-skriptet har en tydlig fördelning över NUMA-noder lagts till, vilket vĂ€sentligt har ökat effektiviteten vid testning pĂ„ NUMA-maskiner.
- I det stokastiska skriptet har en slumpmÀssig startsekvens för enskilda tester genomförts.
KĂ€lla: opennet.ru
