á
á¬ááŒáá·áºááá¯áẠlibmdbx á¡ááœááºá
áœááºážáá±á¬ááºáááºááŒáá·áºáá¬ážááŒá®áž áá»á
áºáá
áºááááºáááºážá
áœá¬ ááá·áºááœááºážáá¬ážáá±á¬ áá±á¬á·áááºááá¯ážáá±áá¬áá±á·á
ẠLMDB á áááááá¬áᬠááŒááºáááºáá®ááá¯ááºážáá¯ááºáá¬ážáá±á¬ áá»áá¯ážáááºáá
áºáá¯ááŒá
áºáááºá
áááºááŸááá¬ážááŸááºáž v0.5 ááẠáááºážááá¬ááá¯ááºážááá¯ááºáᬠáá¯ááºáá±ááŸá¯áá
áºáá¯ááŒá
áºááŒá®ážá áááºááá·áºááá¯ážáááºááŸá¯áá»á¬ážáááᯠááŒá®ážááŒá±á¬ááºááŒá±á¬ááºážááŸáá·áº á
á¬ááŒáá·áºááá¯ááºá áááá¡ááŒáááºáá¯ááºááœáŸááºááŸá¯á áá±á¬ááºáááºááœá²ááœá²á·á
ááºážááŸá¯ááŸáá·áºá¡áá° á¡áá»á¬ážáá°ááŸá¬ áá±á¬ááºáá¯á¶ážá
ááºážáááºááŒááºážááŸáá·áº áááºááŒáááºááŒááºážá¡ááá·áºááá¯á· áá°ážááŒá±á¬ááºážááŒááºážááᯠá¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá
LMDB DBMS ááᯠá¡ááŒá±áá¶á áá»áŸáá»áŸáá áá°áááá»á¬ážáá±á¬ ááœá±áá±ážááœá±áá° ááŒáŸá¯ááºááŸá¶áá¬ážáá±á¬ áá±á¬á·áááºááá¯áž DBMS áá áºáá¯ááŒá áºáááºá áá áºááẠB+ ááá«áá² proactive áá áºáá¯ááºááŒááºážáMulti-threaded áá¯ááºáááºážá ááºáá»á¬ážááᯠáá±áááœááºáž áá»áŸáá±áá¬ážáá±á¬ (ááá¯ááºáá±á¬) áá±áá¬áá±á·á áºáá áºáá¯ááŒáá·áº á¡ááŒáá¯ááºá¡ááá¯ááºááŸáá·áº á¡ááœááºá¡áááºáž áááááá±á¬ááºáá±á¬áẠáá¯ááºáá±á¬ááºááá¯ááºá á±ááá·áºá áá áºáááºá MDBX ááẠLMDB ááẠááá¯ááá¯ááŒááºáááºááŒá®áž ááá¯ááá¯áá¯á¶ááŒááºá áááºáá»áááŒá®áž libmdbx ááẠáááºážáááá¯ážáá±ážáá®áááºá á¡áááá¡ááºá¹áá«áááºá¡á¬ážáá¯á¶ážááᯠááááºážááááºážáá¬ážáá±á¬áºáááºážá á¡ááºáá ẠááŸáá·áº CPU cores áá»á¬ážáá áºáá»áŸá±á¬áẠlinear scaling ááŒáá·áº ááááºááá¯á·ááŒááºážááá¯ááºáá±á¬ reads áá»á¬ážá¡ááŒáẠá¡áá áºáá»á¬ážá áœá¬ááá¯áááºáž áá±á«ááºážááá·áºáá«áááºá
LMDB ááŸáá·áº áááºáááºááá·áº libmdbx á ááœá¬ááŒá¬ážáá»ááºáá»á¬ážááŸáá·áº ááá¯ážáááºááŸá¯áá»á¬ážááᯠáá±á¬áºááŒáá»ááºááẠáá®ážááŒá¬ážáá±á¬ááºážáá«áž (Habré ááŸáá·áº Medium ááœáẠáá¯ááºáá±ááẠá á®á ááºáá¬ážáááº) ááŸáá·áº ááá¯ááºáááºáá«áááºá á€áá±áá¬ááœáẠá¡áá±ážááŒá®ážáá¯á¶ážááŸáá·áº áááá¬áááºááŸá¬ážáá±á¬á¡áá»ááºááᯠáá±á¬áºááŒááẠááá·áºáá»á±á¬áºáá«áááºá
- á¡ááŒá±áá¶á¡á¬ážááŒáá·áºá áá¯ááºá¡áááºá¡ááœá±ážá á ááºážáááºááŒááºážááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠá á áºáá±ážááŸá¯áá»á¬ážááᯠááá¯áá¡á¬áá¯á¶á áá¯ááºáááºá
- ááá·áºáááºáá±á¬ááºáá»á¬ážááᯠá á áºáá±ážááŒááºážá០áá±áá¬áá±á·á áºáááºáá±á¬ááºáá¯á¶áá»á¬ážá á¡ááœááºážááá¯ááºážá á áºáá±ážááŸá¯á¡áá áá¯ááºáá±á¬ááºáá»ááºá¡ááœááºáž áááá¬áááºááŸá¬ážá áœá¬ ááá¯ááá¯ááááºážáá»á¯ááºááá¯ááºáááºá
- á¡ááá¯á¡áá»á±á¬áẠá á¯á ááºážááŸá¯ááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠáá±áá¬áá±á·á Ạá¡ááœááºá¡á á¬áž á á®áá¶ááá·áºááœá²ááŸá¯á
- 32-bit ááŸáá·áº 64-bit á ááºážáá±ážááœá²áá»á¬ážá¡ááœáẠáá±áá¬áá±á·á áºáá±á¬áºáááºáá áºáá¯á
- á¡ááá¯ááºážá¡ááŒá¬ážá¡ááá¯áẠááá°áá¬á¡ááœááºá¡á á¬ážááᯠááá·áºááŸááºážááŒááºáž (á¡ááœá¬á¡áá±áž áá±ážááŒááºážááŸá¯ ááá·áºááŸááºážáá»ááº)á
- áááºááááºáá»á¬ážááŸáá·áº á¡áá¯á¶ážááŒá¯áá°ááœá±ážáá»ááºááá¯ááºáá±á¬ áá±áá¬áá±á·á Ạá á¬áá»ááºááŸá¬á¡ááœááºá¡á á¬ážááẠááŸá áºáááá¯ááŒá®ážáá±á¬ áá®ážáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯á
libmdbx áá¯ááºáá±ááá·áº ááá¯ááºá á¬ážááŸááºáá±á¬ááºážááẠ2019 áá¯ááŸá ẠááŒáá¯ááºáááœáẠMDBX ááŸáá·áº MithrilDB ááá±á¬áá»ááºáá»á¬ážááᯠááœá²áá¯ááºááẠ(á¡á±á¬ááºááœááºááŒáá·áºáá«) áá¯á¶ážááŒááºáá»ááºáááááºááŒá áºáááºá áá áºáá»áááºáááºážááœáẠlibmdbx ááẠ(áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áº) á¡ááŒáá·áºáá¯á¶ážáááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®áá»á¬ážááᯠáááºááŸá¬ážááŒá®áž á á¬ááŒáá·áºááá¯ááºááᯠáááºááŒáááºá á±ááẠáá¯á¶ážááŒááºáá²á·áááºá á¡ááŸááºááŸá¬á áááŠážááá·áºááŸááºážáá¬ážáááºááŸáá·áº á á®á ááºáá¬ážáááºááẠáááºááŸááºáá¬ážáá±á¬ áŠážáááºáá»ááºááœáẠá-á á ááá¯ááá¯áá¯ááºáá±á¬ááºááá¯ááºáááº-
- Mac OS ááŸáá·áº áá¯áááá¡ááá·áº ááááºáá±á¬ááºážáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááº- FreeBSDá Solarisá DragonFly BSDá OpenBSDá NetBSDá AIX ááŸáá·áº HP-UX á¡áá±á¬ááºá¡áá¶á·ááᯠááá¯á¡ááºáááᯠááá·áºááá¯ááºáááºá
- Undefined Behavior Sanitizer ááŸáá·áº Address Sanitizer ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºááᯠááá·áºá ááºáá¬ážááŒá®ážá -Wpedantic ááŒáá·áº áááºáá±á¬ááºááá·áºá¡áá« ááááá±ážáá»ááºáá»á¬ážá Coverity Static Analyzer ááááá±ážáá»ááºáá»á¬áž á áááºááá¯á·ááᯠáááºááŸá¬ážáá²á·áááºá
- ááœááºážáᶠAPI áá±á¬áºááŒáá»ááº.
- ááŒáŸá¯ááºááŸá¶áá¬ááœáẠááœááºáá°á á±ááẠá¡áááºážá¡ááŒá áºáá¯ááºááᯠáá±á«ááºážá ááºážááŒááºážá
- CMake áá¶á·ááá¯ážááŸá¯á
- á¡ááá¯ááºá¡áááºáž á¡áá±á¬ááºážá¡áááºáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯á
- OS ááŒááºáááºá áááºááŒááºáž ááŸáá áááŸá áá¯á¶ážááŒááºááẠbootid ááᯠá¡áá¯á¶ážááŒá¯ááŒááºáž (áá áºáááºáá±á¬ áá±áá¬áá±á·á Ạáááºááá·áºááŒááºáž)á
- á¡ááºááááºáá¯ááºáá¬ážáá±á¬/áá±á¬ááºáž á á¬áá»ááºááŸá¬áá»á¬ážá á¡áá¯á¶ážá០á¡áá¯á¶ážá¡áá áá±ááœááºááŒááºážááŸáá·áº ááá¯ážáá»á²á·ááœá±áá±ážááœá±áá° á¡áá»ááºá¡áááºá
- ááœá²áá¯á¶ážááá¯ááºáá±á¬áá¯ááºááœáẠááœáá·áºáá¬ážááŒá®ážáá±á¬áá±áá¬áá±á·á áºááá¯á·áá»áááºáááºáááºá¡ááœáẠááœá±ážáá»ááºá áᬠMDBX_ACCEDEá
- áá¡áá¯á¶ážááŒá¯ááŸá¯ OFD ááááºááá¯á·ááŒááºážá áááŸáááá¯ááºáá±á¬á¡áá«á
- ááá¯ááºáá²ááœáẠáá°áá±á¬á¡áá¶á
- á¡áá°ážááŒá¯ ááŒá¯ááŒááºáá¬ážáá±á¬ á¡ááœááºážááá¯ááºáž á á®ááŒááºáž á¡ááºáááá¯áá®ááẠ(qsort() ááẠ2-3 á ááá¯ááŒááºááŒá®áž std::sort() ááẠ30% á¡áá ááá¯ááŒááºáááºá
- á¡áá»á¬ážáá¯á¶ážáá±á¬á·á¡ááŸááºááᯠááá¯ážááŒáŸáá·áºáá¬ážáááºá
- ááŒáá¯áááºááŒááºážá¡á¬áž á¡ááá¯á¡áá»á±á¬áẠááááºážáá»á¯ááºááŒááºáž (ááŸááºáá¬ááºáá²ááœáẠáá±áá¬áá±á·á áºááá¯áẠááááºážáááºážááŒááºážáááºážáá»á°áá¬)á
- ááá¯ááá¯ááŒááºážáááºááŒá®áž ááá¯ááŒááºáá±á¬ á¡ááá¯á¡áá»á±á¬áẠá á¯á ááºážááŸá¯á
- B+ áá áºáááºá á¬áá»ááºááŸá¬áá»á¬ážááᯠáá±á«ááºážá ááºážáááºá¡ááœáẠááá¯ááá¯ááá·áºáá»á±á¬áºáá±á¬ áá»á°áá¬áá áºáá¯á
- ááŸá¬ážááœááºážá áœá¬á¡áá¯á¶ážááŒá¯áá«á áá±áá¬áá±á·á áºáá»ááºá á®ážááŒááºážá០áá¬ááœááºááẠáá±áááœááºážááá¯ááºáá±á¬ ááá¯ááºá áá áºáá»á¬áž (NFSá Samba á áááº) ááᯠááááºážáá»á¯ááºáá«á
- á á áºáá±ážááŸá¯á¡á á¯á¶ááᯠááá¯ážáá»á²á·ááŒá®ážáá«ááŒá®á
libmdbx á "áá±á¬ááºáá áºáá¯" áá¬ážááŸááºážááᯠáá®ážááŒá¬ážááá±á¬áá»ááºáá áºáá¯á¡ááŒá Ạáááºáááºáá±á¬áºáá±á¬ááºáá«áááºá MithrilDBMDBX á "áááºááŸá" áá¬ážááŸááºážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ vector ááẠáááºááŸááºá¡ááºá¹áá«áááºááᯠá¡á±ážáá²á á±áááºááŸáá·áº áááºážááᯠáááºááŒáááºá á±ááẠáááºááœááºáá«áááºá á€áá¯á¶ážááŒááºáá»ááºááᯠá¡ááŒá±á¬ááºážá¡áááºáž áá¯á¶ážáá¯ááŒáá·áº ááŒá¯áá¯ááºáá²á·ááŒááºážááŒá áºáááº-
- áá¯á¶ážááááá¬ááááŒá áºáá«- MithrilDB ááẠá á®á ááºáá¬ážááá·áºá¡ááºá¹áá«áááºá¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠááá°áá®áá±á¬ (áááá¬ááááŒá áº) áá±áá¬áá±á·á áºááá¯ááºáá±á¬áºáááºááŸáá·áº ááá°áá®áá±á¬ (áááá¬ááááŒá áº) API áá áºáᯠááá¯á¡ááºáááºá
- á¡áááºážá¡ááŒá áºáá¯ááºá¡áá áº- MithrilDB áááºážááŒá áºáá¯ááºááᯠLMDB á០áá®ážááŒá¬ážááá¯ááºá ááºááá¬ážááŒá®ážá ááá±á¬áá»ááºááá¯ááºááá¯ááºá ááá°áá®áá±á¬ááá¯ááºá ááºáá áºáá¯á¡á±á¬ááºááœáẠáá¯ááºáá±ááẠá á®á ááºáá¬ážááẠ(ááœáá·áºááŒá¯áá¬ážáá±á¬á OR IF ááá¯ááºá áẠApache ááᯠ2.0ááá¯áá»áŸáá OpenLDAP áá±á¬ááºáá±ážááŸááºáž).
- ááœá²ááœááºááŒááºážááẠááŒá áºááá¯ááºáá»á±ááŸááá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážáᬠááá¯ááá¯áá±áá»á¬ááŸá¯áá±ážáᬠááá±á¬áá»ááºáá»á¬ážá¡ááœáẠááœááºáááºáá±á¬ááŸá±á·ááá¯á· áááºážááŒá±á¬ááºážáá áºáá¯ááŸáááŒá±á¬ááºáž áá±áá»á¬á á±áááºá
MDBX áá²á·ááá¯á· MithrilDB ááá¯áááºáž á¡ááŒá±áá¶áá¬ážáááºá áá áºááẠB+ MDBX ááŸáá·áº LMDB ááá¯á·á á¡ááŒá±áá¶á¡á¬ážáááºážáá»ááºáá»á¬ážá áœá¬ááᯠáááºááŸá¬ážáá±ážáá±á ááºááœáẠá¡ááœááºááŒáá·áºáá¬ážáá±á¬ á áœááºážáá±á¬ááºáááºááá¯áááºáž áá«ááŸááááºá á¡áá°ážáááŒáá·áºá ááŸááºáá»á¬ážáá±á¬á á¬áááºááŒááºážáá¯ááºáááºážáá»á¬ážááŒáá·áº á¡ááŸáá¯ááºáá»á¬ážáá¯ááºáá±á¬ááºááŒááºážááᯠááááºááá¯á·áá¬ážááŒááºážááŒá±á¬áá·áº áá±áá¬áá±á·á áºá "áá±á¬ááºáááºážááŒááºáž" áá¯áááºááŸá¬ážááá·áº "ááŒá¬ááŸááºá áœá¬áááºááŸá¯ááŒááºáž" áááŒá¿áá¬ááᯠáááºááŸá¬ážáá áºáááºááŒá áºáááºá MithrilDB á¡ááºá¹áá«áááºá¡áá áºáá»á¬áž áá«áááºáááº-
- ááœá²ááŒá¬ážáá±á¬áá®áá®áá¬á¡áá»á¬ážá¡ááŒá¬ážááœáẠáá±áá¬áá±á·á áºááᯠáá¬ážááŸáááŒááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯- HDDá SSD ááŸáá·áº ááááºááŒáááºáá±á¬ááŸááºáá¬ááºá
- "áá°"á "ááœá±áž" ááŸáá·áº "á¡á±áž" áá±áá¬á¡ááœáẠ"áááºááá¯ážááŸááá±á¬" ááŸáá·áº "áááºááá¯ážáááºáž" á¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážáá»á°áá¬áá»á¬ážá
- áá±áá¬áá±á·á áºááá¯ááºáá¬ááŸá¯ááá¯á á±á¬áá·áºááŒáá·áºááẠMerkle tree ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
- WAL ááᯠá áááºááŒáá¯ááºááœá±ážáá»ááºá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž áá±ážááŸááºá¡á¬ážááŒá¯áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááŸáá·áº áá±áá¬ááá¯ááºáá¬ááŸá¯á¡á¬ááá¶áá»ááºáá»á¬ážááœáẠáááááá¬áá¬ááŒáá·áºáá¬ážáá±á¬á áœááºážáá±á¬ááºáááºá
- áá áºááºáá»á¬ážááŸá áá±áá¬áá»á¬ážááᯠáá»ááºážááá áœá¬ áááºážáá°ááŒá±ááŸááºážááŒááºážá
source: linux.org.ru