libmdbx 0.10.4 (MDBX) á á¬ááŒáá·áºááá¯ááºááᯠá áœááºážáá±á¬ááºáááºááŒáá·áº áá»á áºáá áºááááºáááºážá áœá¬ ááá·áºááœááºážáá¬ážáá±á¬ áá±á¬á·áááºááá¯ážáá±áá¬áá±á·á áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áºá ááŸáá·áº áááºá ááºáá±áá±á¬ libfpta 0.3.9 (FPTA) á á¬ááŒáá·áºááá¯ááºáá á¡áááºáááºážááŸáá·áº áá±á«ááºážá ááºá¡ááœáŸááºážáá»á¬ážááŒáá·áº áá±áá¬áááá¬ážááœááºáá»á¬ážááᯠááá¯ááºá á¬ážááŒá¯ááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážáá«áááºá MDBX áááááºááœááºá á á¬ááŒáá·áºááá¯ááºááŸá áºáá¯áá¯á¶ážááᯠOSI ááœáá·áºááŒá¯áá¬ážáá±á¬ááá¯ááºá ááºáá»á¬ážá¡á±á¬ááºááœáẠááŒáá·áºáá±áá¬ážáá«áááºá áááºááŸááááºáááºááŸá¯á áá áºáá»á¬ážááŸáá·áº áááá¯áá¬áááºáá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá¶á·ááá¯ážáá¬ážááŒá®áž áá¯ááŸá¬áž Elbrus 2000 ááá¯áááºáž áá¶á·ááá¯ážáá¬ážáááºá
áááá¯ááºážááŒá±á¬ááºážá¡áá libmdbx ááẠLMDB DBMS á áááºáá²áá±á¬ ááŒááºáááºááŒá¯ááŒááºááŸá¯áá áºáá¯ááŒá áºááŒá®áž áá¯á¶ááŒááºá áááºáá»áááŸá¯á á¡ááºá¹áá«áááºááŸáá·áº á áœááºážáá±á¬ááºáááºáá»á¬ážááœáẠáááºážáááá¯ážáá±ážáá»á¬ážááẠáá¬ááœááºáááºá LMDB ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á libmdbx ááẠáá¯ááºá¡áááºá¡ááœá±ážá API áááºááŒáááºááŸá¯á á ááºážáááºááŸá¯ááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠá á áºáá±ážááŸá¯áá»á¬ážááᯠá¡áá±ážáá±ážáá¬ážáááºá ááŒááºáááºááá°ááŒááºážá áœááºážáááºá¡áá»áá¯á·ááŸáá·áºá¡áá° áá±áá¬áá±á·á áºááœá²á·á ááºážáá¯á¶á ááá¯ááºáá¬ááŸá¯ááᯠá á áºáá±ážáááºá¡ááœáẠá¡áá¯á¶ážáááºááŸá¯áá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážáá¬ážáááºá
áááºážááá¬á¡áá libmdbx ááẠACIDá ááŒááºážáááºáá±á¬ááŒá±á¬ááºážáá²ááŸá¯ á¡ááŸááºá ááºááŒá¯áá¯ááºááŒááºážááŸáá·áº CPU cores áá»á¬ážáá áºáá»áŸá±á¬áẠlinear scaling ááŒáá·áº ááááºááá¯á·ááŒááºážááá¯ááºáá±á¬ reads áá»á¬ážááᯠáá±ážáá«áááºá á¡ááá¯á¡áá»á±á¬áẠá á¯á ááºážááŸá¯á á¡ááá¯á¡áá»á±á¬áẠáá±áá¬áá±á·á Ạá¡ááœááºá¡á á¬áž á á®áá¶ááá·áºááœá²ááŸá¯ááŸáá·áº á¡ááá¯ááºážá¡ááŒá¬áž áá±ážááŒááºážááŸá¯ ááá·áºááŸááºážáá»ááºááá¯á·ááᯠáá¶á·ááá¯ážáá¬ážáááºá 2016 áá¯ááŸá áºááŸá áááºá ááá±á¬áá»ááºáá»á¬ážá¡á¬áž Positive Technologies á០áááºáá¯á¶ááœá±áá±á¬ááºáá¶á·áá²á·ááŒá®áž 2017 áá¯ááŸá áºááŸá áááºáᬠáááºážááá¯ááºáá¯ááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áá²á·áááºá
libmdbx ááẠC++ API ááŸáá·áº Rustá Haskellá Pythoná NodeJSá Rubyá Go ááŸáá·áº Nim á¡ááœáẠá áááºá¡á¬ážáááºáááºáá±á¬ áá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ áá¬áá¬á áá¬áž bindings áá»á¬ážááᯠáá±ážáá«áááºá libfpta á¡ááœááºá API áá±á¬áºááŒáá»ááºá¡á¬áž C/C++ áá±á«ááºážá á®ážááá¯ááºáá¯á¶á á¶ááŒáá·áº áá°ááááŸááºááŒá¬áž áááŸáááá¯ááºáá«áááºá
áá±á á áááºáá±á·áá¯áẠááááºááááºážááŸá á á¡ááá áá®ááœááºáááºážáá áºááŸá¯áá»á¬ážá ááŒáŸáá·áºáááºááŸá¯áá»á¬ážááŸáá·áº ááŒááºáááºááŸá¯áá»á¬áž ááá·áºááœááºážáá¬ážáááº-
- áá»áá¯ážááœá¬ážááá¯ááºáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááœáá·áºáá±ážáááºá
- á¡ááœááºááŸá¬ážáá«ážáá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááœáẠááœá±áá±ážááœá±áá° áááááŒá¯áá±á ááºá¡ááœááºáž ááœááºážáááº/á¡á±ážáá²ááŸá¯áá»á¬áž ááŒá áºáá±á«áºááá¯ááºáá±á¬ááŒá±á¬áá·áº áá»áœááºááœááºážáá»ááºáá áºáá¯ááᯠááŒááºáááºáá²á·áááºá áááºážááŒá¿áá¬ááᯠPositive Tecnologies áá»áœááºážáá»ááºáá°áá»á¬ážá áááºážááá¯á·áááá¯ááºááá¯ááºáá¯ááºáá¯ááºáá»á¬ážááᯠá¡ááœááºážááá¯ááºážá ááºážáááºááŸá¯á¡ááœááºáž ááœá±á·ááŸááá²á·ááŒááºážááŒá áºáááºá
- á ááºážáááºááŸá¯áá»á¬ážááᯠááŒáŸáá·áºáááºááŒá®áž áá±áá¬áá±á·á áºá¡ááœááºážááŸá á á¬áá»ááºááŸá¬áá áºá isomorphic ááá¯ááºáá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááŸáá·áº GC á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠá á áºáá±ážáááºá¡ááœáẠá ááºážáááºááŸá¯á¡ááŒá±á¡áá±áá»á¬ážááᯠááá¯ážáá»á²á·áá¬ážáá«áááºá
- C++ API ááœááºá á¡ááᯠ"noexception" ááᯠááŒááºáááºááŒá®ážááŒá áºáááºá "cursor::erase()" áááºážáááºážá¡ááœáẠá¡ááá¯ááá¯áá»áŸá¶ááŸá¯áá»á¬ážááᯠáá±á«ááºážááá·áºáá¬ážáááºá áá»áááºááŸáááŸá¯ááá¯áá±áá»á¬á á±áááºá¡ááœáẠááŒá¬ážáá¶áá»á¬ážááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠ"std::string" ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááᯠááŸááŒá±á¬ááá¯ááºáá«áááºá (CLANG libstdc++ á¡ááœáẠáááºááá¯ááºáá¬)á
- ááŒá®ážáá¬ážáá±á¬ááœá±ááŒá±ážááœáŸá²ááŒá±á¬ááºážááŸá¯ááœáẠáá±áá¬ááá¯ááŒá±á¬ááºážáá²áá±á¬á¡áá« ááŸá¬ážáá«ážáá±á¬ááá»áŸá±á¬áºááá·áºáá¬ážáá±á¬á¡ááŸá¬ážáá áºáá¯ááŒá±á¬áá·áº MDBX_PROBLEM ááŸááŒááá²á·áá±á¬ áá áºáááºáá±á¬á á¬áá»ááºááŸá¬ spilling algorithm (ááŒá±á¬ááºážáá²áá¬ážáá±á¬áá±áá¬áá±á·á áºá á¬áá»ááºááŸá¬áá»á¬ážááá¯ááœá±ážáá»ááºáá¯ááºáááºááŒááºáž) á០áá¯ááºáá¯ááºááŒááºážá¡á¬áž áááºááŸá¬ážááá¯ááºáá«áááºá
- áá±áá¬áá±á·á áºááᯠáááºááœááºáá»ááºááŸáááŸá áá»ááºá á®ážááœá¬ážááá·áºá¡áá«ááœáẠáááºááŒáááºááŸá¯ááŸáá á±ááẠá á áºáá±ážááŸá¯á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºáá±á¬ááºážááŒááºážááŒáá·áº á¡ááá·áºááá·áºá ááºážáááºááŸá¯ááᯠááŒá¯áá¯ááºáá²á·áááºá
- á¡áá±ážá¡ááœáŸá¬ážááááá±ážáá»ááºáá»á¬áž UndefinedBehaviorSanitizer ááŸáá·áº Coverity Scan ááŒá¿áá¬áá»á¬ážááᯠááŒááºáááºáá¬ážáááºá
- áá áºáá»á áºááẠáá¬ážááŸááºážá¡áá±á¬ááºážáá»á¬ážááŒáá·áº áááºáá®ážáá¬ážááá·áº áá±áá¬áá±á·á áºáá¯á¶áá»á¬ážá¡ááœááºážááŸá á¡á á¯á¡áá±ážá á¬áá»ááºááŸá¬áá»á¬ážááœáẠâP_DIRTYâ á¡ááœááºážááá¯ááºážá¡áᶠâP_DIRTYâ ááᯠá¡áá¯á¶ážáááŒá¯áá±á¬á·áá² áá±ááºááá®áá±á¬á·ááŒá±á¬ááºáž á á áºáá±ážááŒááºážááᯠááŒááºáááºááŒá®ážááŒá áºáááºá
- CMake scripts áá»á¬ážááœáẠLTO (link-time optimization) á¡ááœáẠááá¯á¡ááºáá±á¬ compiler á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááŸá¬ááœá±ááŸá¯ááᯠááŒáŸáá·áºáááºáá¬ážáá«áááºá
- áá áºááŒáá¯ááºáááºáááºážáááºááŸá¯áá° á¡áá»á¬ážáá¯á¶ážá¡áá±á¡ááœááºááẠááááá áŠážá¡áá ááá¯ážáá¬áá²á·áááºá
- Valgrind ááŸáá·áº AddressSanitizer ááᯠá¡áá¯á¶ážááŒá¯áá±á¬á¡áá« á áœááºážáá±á¬ááºááẠááá¯ááá¯áá±á¬ááºážááœááºáá¬áááºá
- Windows ááœááºá MDBX_NOTLS áá¯ááºááœáẠá¡áá¯ááºáá¯ááºááá·áºá¡áá« SRW-áá±á¬á·ááºááᯠáá áºáá»á±á¬á·ááŒááºá¡áá¯á¶ážááŒá¯ááŒááºáž (á¡ááºáá»áá±áááœááºážááá¯ááŸá±á¬ááºááŸá¯á¡áá¯á¶ážáááŒá¯áá²) ááᯠáááºááŸá¬ážááá¯ááºáááºá á áá áºá¡áá»áááºááŒá±á¬ááºážááœá¬ážáá«á bootid áá»áá¯ážáááºááᯠááŒááºáááºááŒá®ážááŒá áºáááºá WSL1 ááŸáá·áº WSL2 áá±á¬ááºááŸááºážááŸá¯ááᯠááŒáŸáá·áºáááºááŒá®áž áá¯ááºáá±á¬ááºááá¯ááºá áœááºážá DrvFS ááŸáá áºááá·áº áááºáááºáá¬ážáá±á¬ Plan 9 ááœáẠáá±áá¬áá±á·á áºáá áºáá¯ááᯠááœáá·áºááŒá®ážáá«ááŒá®á
- á á¯á á¯áá±á«ááºážá ááá¯áẠ160 áá¯ááœáẠááŒá±á¬ááºážáá²ááŸá¯ 57 áá»á±á¬áº ááŒá¯áá¯ááºáá²á·ááŒá®áž ááá¯ááºážáá±á«ááºáž 5000 ááᯠáá±á«ááºážááá·áºáᬠ~2500 ááᯠáá»ááºáá²á·áááºá
ááœááºáá²á
áœá¬á¡áá¯á¶ážááŒá¯ááŸá¯á¡ááŒá±á¡áá±áá»á¬ážááœáẠá
ááºážáááºáá¬ááœáẠáááºážááá¯á·áá¡áá°á¡áá®á¡ááœáẠErigon ááá±á¬áá»ááºá¡ááœá²á· (Ethereum áá±áá
áá
áº) ááᯠá¡áá°ážáá»á±ážáá°ážáááºááŸááá«áááºá Erigon áááºáááºááŸá¯áá
áºáá¯á
á®ááœáẠ0.10.0-1 TB ááŸááá±á¬ áá±áá¬áá±á·á
áºááá¬á 2-7 TB ááŸááá±á¬ libmdbx vXNUMX ááᯠáá¯ááºááŒááºááŒá®ážááááºážá (Ethereum node áá»á¬ážá XNUMX% ááœááºá¡áá¯á¶ážááŒá¯áááº) áá±áá¬áá±á·á
áºááŒá
á¬ážááŸá¯ á¡á
á®áááºáá¶á
ᬠáá¯á¶ážáá¯áᬠáááºáá¶áááŸááá²á·áááºááŸá¬ áááºááŸá¬ážáá«áááºá ááŒááºáá¡ááŒá±á¬ááºážááŒáá»ááºááŒá±á¬áá·áºááá¯ááºáá² áá±á¬á·ááºáá²á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŒá±á¬áá·áº ááŒá
áºááœá¬ážáááŒááºážááŒá
áºáááº- ááá
á¹á
ááŸá
áºáá¯ááœáẠá¡ááŒá±á¬ááºážáááºážááŸá¬ RAM áá»áá¯á·ááœááºážááŸá¯ááŒá
áºááŒá®áž ááááááŸá¬ BTRFS ááá¯á¡áá¯á¶ážááŒá¯ááá·áº ááá¯ááŸá±á¬ááºááŸá¯á
áá
áºááœá²á
áá
áºá áá®ážááŒá¬ážááœá²á·á
ááºážáá¯á¶áá
áºáá¯ááœáẠáá±áá¬ááŒááºáááºáááºááŸááºááŒááºážááá¯ááºáᬠá¡ááŸá¬ážáá
áºáá¯ááŒá
áºáááºá
source: opennet.ru