рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдПрдореНрдмреЗрдбреЗрдб DBMS libmdbx 0.10.4 рдЖрдгрд┐ libfpta 0.3.9 рдЪреЗ рдкреНрд░рдХрд╛рд╢рди

libmdbx 0.10.4 (MDBX) рд▓рд╛рдпрдмреНрд░рд░реА рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЙрдореНрдкреЕрдХреНрдЯ рдПрдореНрдмреЗрдбреЗрдб рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд libfpta 0.3.9 (FPTA) рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╣ рд╕реЛрдбрдгреНрдпрд╛рдд рдЖрд▓реА, рдЬреА рджреБрдпреНрдпрдо рдЖрдгрд┐ рд╕рдВрдорд┐рд╢реНрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрд╕рд╣ рдбреЗрдЯрд╛рдЪреЗ рд╕рд╛рд░рдгреАрдмрджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓рд╛рдЧреВ рдХрд░рддреЗ. MDBX рдЪреНрдпрд╛ рд╡рд░. рджреЛрдиреНрд╣реА рд▓рд╛рдпрдмреНрд░рд░реА OSI рдордВрдЬреВрд░ рдкрд░рд╡рд╛рдиреНрдпрд╛рдЦрд╛рд▓реА рд╡рд┐рддрд░реАрдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рд╕рд░реНрд╡ рд╡рд░реНрддрдорд╛рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЖрдгрд┐ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд, рддрд╕реЗрдЪ рд░рд╢рд┐рдпрди рдПрд▓реНрдмреНрд░рд╕ 2000.

рдРрддрд┐рд╣рд╛рд╕рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛, libmdbx рд╣реЗ LMDB DBMS рдЪреА рд╕рдЦреЛрд▓ рдкреБрдирд░реНрд░рдЪрдирд╛ рдЖрд╣реЗ рдЖрдгрд┐ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣рддрд╛, рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╕рдВрдЪ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдд рддреНрдпрд╛рдЪреНрдпрд╛ рдкреВрд░реНрд╡рдЬрд╛рдВрдкреЗрдХреНрд╖рд╛ рд╢реНрд░реЗрд╖реНрда рдЖрд╣реЗ. LMDB рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд, libmdbx рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛, API рд╕реНрдерд┐рд░рддрд╛, рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рддрдкрд╛рд╕рдгреНрдпрд╛рдВрд╡рд░ рдЦреВрдк рднрд░ рджреЗрддреЗ. рдХрд╛рд╣реА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдХреНрд╖рдорддреЗрд╕рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдиреЗрдЪреА рдЕрдЦрдВрдбрддрд╛ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрддрддрд╛ рдкреБрд░рд╡рд▓реА рдЬрд╛рддреЗ.

рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдиреБрд╕рд╛рд░, libmdbx ACID, рд╕рд╢рдХреНрдд рдЪреЗрдВрдЬ рд╕реАрд░рд┐рдпрд▓рд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ CPU рдХреЛрд░рд╡рд░ рд░реЗрдЦреАрдп рд╕реНрдХреЗрд▓рд┐рдВрдЧрд╕рд╣ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд░реАрдб рдСрдлрд░ рдХрд░рддреЗ. рдСрдЯреЛ-рдХреЙрдореНрдкреЕрдХреНрдЯрд┐рдлрд┐рдХреЗрд╢рди, рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдХрд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЖрдгрд┐ рд╢реНрд░реЗрдгреА рдХреНрд╡реЗрд░реА рдЕрдВрджрд╛рдЬ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд. 2016 рдкрд╛рд╕реВрди, рдкреЙрдЭрд┐рдЯрд┐рд╡реНрд╣ рдЯреЗрдХреНрдиреЙрд▓реЙрдЬреАрдЬрджреНрд╡рд╛рд░реЗ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдирд╛ рдирд┐рдзреА рджрд┐рд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ 2017 рдкрд╛рд╕реВрди рддреНрдпрд╛рдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ.

libmdbx C++ API, рддрд╕реЗрдЪ Rust, Haskell, Python, NodeJS, Ruby, Go, рдЖрдгрд┐ Nim рд╕рд╛рдареА рдЙрддреНрд╕рд╛рд╣реА-рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛ рдмрдВрдзрдиреЗ рджреЗрддреЗ. libfpta рд╕рд╛рдареА, рдлрдХреНрдд API рд╡рд░реНрдгрди C/C++ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХрд░реАрддреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.

9 рдореЗ рд░реЛрдЬреАрдЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рдмрд╛рддрдореНрдпрд╛рдВрдкрд╛рд╕реВрди рдореБрдЦреНрдп рдирд╡рдХрд▓реНрдкрдирд╛, рд╕реБрдзрд╛рд░рдгрд╛ рдЖрдгрд┐ рд╕реБрдзрд╛рд░рдгрд╛ рдЬреЛрдбрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛:

  • рдкреБрдирд░реБрддреНрдкрд╛рджрдХ рдмрд┐рд▓реНрдб рд╕рдХреНрд╖рдо рдХрд░рддреЗ.
  • рджреЛрд╖ рдирд┐рд░рд╛рдХрд░рдг рдХреЗрд▓реЗ рдЬреНрдпрд╛рдореБрд│реЗ, рдЕрддреНрдпрдВрдд рджреБрд░реНрдорд┐рд│ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреНрдпрд╛ рдХрдорд┐рдЯ рджрд░рдореНрдпрд╛рди рд▓реВрдк/рдлреНрд░реАрдЬ рд╣реЛрдК рд╢рдХрддреЗ. рдкреЙрдЭрд┐рдЯрд┐рд╡реНрд╣ рдЯреЗрдХреНрдиреЙрд▓реЙрдЬреАрдЬ рддрдЬреНрдЮрд╛рдВрдиреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдВрдЪреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдЪрд╛рдЪрдгреА рджрд░рдореНрдпрд╛рди рд╕рдорд╕реНрдпрд╛ рдУрд│рдЦрд▓реА.
  • рдЪрд╛рдЪрдгреНрдпрд╛ рд╕реБрдзрд╛рд░рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдкреЗрдЬ рдЯреНрд░реА рдЖрдгрд┐ GC рд╕рд╛рдордЧреНрд░реАрдЪреНрдпрд╛ рд╕рд░реНрд╡ рдкреЛрд╣реЛрдЪрдгреНрдпрд╛рдпреЛрдЧреНрдп рдиреЙрди-рдЖрдпрд╕реЛрдореЙрд░реНрдлрд┐рдХ рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЪрд╛рдЪрдгреА рдкрд░рд┐рд╕реНрдерд┐рддреА рд╡рд╛рдврд╡рдгреНрдпрд╛рдд рдЖрд▓реА рдЖрд╣реЗ.
  • C++ API рдордзреНрдпреЗ, рдЕрддрд┐рд░рд┐рдХреНрдд "noexcept" рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, "рдХрд░реНрд╕рд░::erase()" рдкрджреНрдзрддреАрд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡реНрд╣рд░рд▓реЛрдб рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд, рд╕рдВрд░реЗрдЦрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрдлрд░рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА "std::string" рд╡рд╛рдкрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд▓реА рдЖрд╣реЗ. (CLANG libstdc++ рд╕рд╛рдареА рд╕рдВрдмрдВрдзрд┐рдд).
  • рдкреНрд░рдЪрдВрдб рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдордзреНрдпреЗ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛рдирд╛ рджреБрд░реНрдорд┐рд│ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯреА MDBX_PROBLEM рджреНрд╡рд╛рд░реЗ рдкреНрд░рдХрдЯ рд╣реЛрдгрд╛рд░реЗ рдЧрд▓рд┐рдЪреНрдЫ рдкреГрд╖реНрда рд╕реНрдкрд┐рд▓рд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо (рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреГрд╖реНрдард╛рдВрдЪреЗ рдирд┐рд╡рдбрдХ рдЗрдЬреЗрдХреНрд╢рди) рдордзреАрд▓ рдкреНрд░рддрд┐рдЧрдорди рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрд╣реЗ.
  • рдбреЗрдЯрд╛рдмреЗрд╕рд▓рд╛ рд╣реЗрддреБрдкреБрд░рд╕реНрд╕рд░ рдиреБрдХрд╕рд╛рди рдЭрд╛рд▓реНрдпрд╛рд╕ рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рддрдкрд╛рд╕рдгреНрдпрд╛ рдЬреЛрдбреВрди рдЯрдкреНрдкреНрдпрд╛рдЯрдкреНрдкреНрдпрд╛рдиреЗ рдЪрд╛рдЪрдгреА рдХреЗрд▓реА рдЧреЗрд▓реА.
  • рдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рд░рдХреЛрд│ рдЗрд╢рд╛рд░реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрддрди рд╕реЕрдирд┐рдЯрд╛рдпрдЭрд░ рдЖрдгрд┐ рдХрд╡реНрд╣рд░рд┐рдЯреА рд╕реНрдХреЕрди рд╕рдорд╕реНрдпрд╛.
  • рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рдЬреБрдиреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдорд╛рдВрдордзреАрд▓ рдиреЗрд╕реНрдЯреЗрдб рдкреГрд╖реНрдард╛рдВрдордзреНрдпреЗ рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЖрдгрд┐ рдпрд╛рдкреБрдвреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдгрд╛рд░реЗ рдЕрдВрддрд░реНрдЧрдд рдзреНрд╡рдЬ тАЬP_DIRTYтАЭ рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ.
  • CMake рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рдордзреНрдпреЗ, LTO (рд▓рд┐рдВрдХ-рдЯрд╛рдЗрдо рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди) рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдШрдЯрдХрд╛рдВрдЪрд╛ рд╢реЛрдз рд╕реБрдзрд╛рд░рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ.
  • рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╡рд╛рдЪрдХрд╛рдВрдЪреА рдХрдорд╛рд▓ рд╕рдВрдЦреНрдпрд╛ 32767 рдкрд░реНрдпрдВрдд рд╡рд╛рдврд╡рд▓реА рдЖрд╣реЗ.
  • Valgrind рдЖрдгрд┐ Address Sanitizer рд╡рд╛рдкрд░рддрд╛рдирд╛ рд╕реБрдзрд╛рд░рд┐рдд рдХрд╛рдордЧрд┐рд░реА.
  • Windows рд╡рд░, MDBX_NOTLS рдореЛрдбрдордзреНрдпреЗ (рдереНрд░реЗрдб рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдЯреЛрд░реЗрдЬ рди рд╡рд╛рдкрд░рддрд╛) рдХрд╛рдо рдХрд░рддрд╛рдирд╛ SRW-рд▓реЙрдХрдЪрд╛ рдЖрд╡рд░реНрддреА рд╡рд╛рдкрд░ рдХрд╛рдвреВрди рдЯрд╛рдХрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рд╕рд┐рд╕реНрдЯрдо рд╡реЗрд│ рдмрджрд▓рд▓реНрдпрд╛рд╕ рдмреВрдЯрд┐рдб рдЬрдирд░реЗрд╢рди рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, WSL1 рдЖрдгрд┐ WSL2 рдУрд│рдЦ рд╕реБрдзрд╛рд░рд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ, рдЖрдгрд┐ рдХреНрд╖рдорддрд╛ DrvFS рджреНрд╡рд╛рд░реЗ рдорд╛рдЙрдВрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд▓реЕрди 9 рд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдШрдбрд╛ рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ.
  • рдПрдХреВрдг, 160 рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ 57 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ, ~ 5000 рдУрд│реА рдЬреЛрдбрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛, ~ 2500 рд╣рдЯрд╡рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛.

рдореА рд╡рд┐рд╢реЗрд╖рддрдГ рдПрд░рд┐рдЧреЙрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреАрдордЪреЗ (рдЗрдереЗрд░рд┐рдпрдо рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо) рдЕрддреНрдпрдВрдд рд╡рд╛рдкрд░рд╛рдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХреЗрд▓реНрдпрд╛рдмрджреНрджрд▓ рддреНрдпрд╛рдВрдЪреЗ рдЖрднрд╛рд░ рдорд╛рдиреВ рдЗрдЪреНрдЫрд┐рддреЛ. рд╣реЗ рд▓рдХреНрд╖рдгреАрдп рдЖрд╣реЗ рдХреА libmdbx v0.10.0 рд░рд┐рд▓реАрдЬ рдЭрд╛рд▓реНрдпрд╛рдкрд╛рд╕реВрди рдкрд╛рдЪ рдорд╣рд┐рдиреНрдпрд╛рдВрдд, рдкреНрд░рддреНрдпреЗрдХ рдПрд░рд┐рдЧреЙрди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдирдордзреНрдпреЗ 1-2 TB рдЪреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡реНрд╣реЙрд▓реНрдпреВрдорд╕рд╣ (7% рдЗрдерд░рд┐рдпрдо рдиреЛрдбреНрд╕рд╡рд░ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ), рдбреЗрдЯрд╛рдмреЗрд╕ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░рд╛рдЪреЗ рдлрдХреНрдд рддреАрди рдЕрд╣рд╡рд╛рд▓ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ, рд╕рд░реНрд╡ рдЬреЗ рдмрд╛рд╣реНрдп рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ рдЭрд╛рд▓реЗ, рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рддреНрд░реБрдЯреАрдВрдореБрд│реЗ рдирд╛рд╣реА: рджреЛрди рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рдХрд╛рд░рдг RAM рдЕрдкрдпрд╢реА рд╣реЛрддреЗ, рддрд┐рд╕рд▒реНрдпрд╛рдордзреНрдпреЗ BTRFS рд╡рд╛рдкрд░реВрди рд╕реНрдЯреЛрд░реЗрдЬ рд╕рдмрд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдбреЗрдЯрд╛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛рдирд╛ рддреНрд░реБрдЯреА.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛