рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

2019 рдХреЛ рдкрддрдирдорд╛, Mail.ru Cloud iOS рдЯреЛрд▓реАрдорд╛ рд▓рд╛рдореЛ-рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдШрдЯрдирд╛ рднрдпреЛред рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╕реНрдЯреЗрдЯрдХреЛ рдирд┐рд░рдиреНрддрд░ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдореБрдЦреНрдп рдбрд╛рдЯрд╛рдмреЗрд╕ рдореЛрдмрд╛рдЗрд▓ рд╕рдВрд╕рд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рд╡рд┐рджреЗрд╢реА рднрдПрдХреЛ рдЫ рд▓рд╛рдЗрдЯрдирд┐рдЩ рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕ (LMDB)ред рдХрдЯ рддрд▓ рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЪрд╛рд░ рднрд╛рдЧрд╣рд░реВрдорд╛ рдпрд╕рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрджрдЫреМрдВред рдкрд╣рд┐рд▓реЗ, рдпрд╕реНрддреЛ рдЧреИрд░-рддреБрдЪреНрдЫ рд░ рдЧрд╛рд╣реНрд░реЛ рдЫрдиреЛрдЯрдХреЛ рдХрд╛рд░рдгрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реМрдВред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА LMDB рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдХреЛ рдореБрдЯреБрдорд╛ рд░рд╣реЗрдХрд╛ рддреАрдирд╡рдЯрд╛ рд╕реНрддрдореНрднрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рдЕрдЧрд╛рдбрд┐ рдмрдвреНрдиреЗрдЫреМрдВ: рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ, B+-рдЯреНрд░реА, рд▓реЗрдирджреЗрдирд╢реАрд▓рддрд╛ рд░ рдорд▓реНрдЯрд┐рднрд░реНрд╕рди рд▓рд╛рдЧреВ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдЕрди-рд░рд╛рдЗрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдгред рдЕрдиреНрддрдорд╛, рдорд┐рдард╛рдИ рд▓рд╛рдЧрд┐ - рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧред рдпрд╕рдорд╛ рд╣рд╛рдореА рдирд┐рдореНрди-рд╕реНрддрд░ рдХреБрдЮреНрдЬреА-рдорд╛рди API рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рд╣рд┐рдд рдзреЗрд░реИ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд╕рд╣рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХрд┐рдорд╛ рдХрд╕рд░реА рдбрд┐рдЬрд╛рдЗрди рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╣реЗрд░реНрдиреЗрдЫреМрдВред

рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ

  1. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЗрд░рдгрд╛
  2. LMDB рд╕реНрдерд┐рддрд┐
  3. LMDB рдХреЛ рддреАрди рд╕реНрддрдореНрдн
    3.1ред рд╣реНрд╡реЗрд▓ #1ред рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ
    3.2ред рд╣реНрд╡реЗрд▓ #2ред B+-рд░реВрдЦ
    3.3ред рд╣реНрд╡реЗрд▓ #3ред рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдЕрди-рд▓реЗрдЦрди
  4. рдХреБрдЮреНрдЬреА-рдорд╛рди API рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдбреЗрдЯрд╛ рд╕реНрдХрд┐рдорд╛ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрджреИ
    4.1ред рдЖрдзрд╛рд░рднреВрдд Abstractions
    4.2ред рддрд╛рд▓рд┐рдХрд╛ рдореЛрдбрд▓рд┐рдЩ
    4.3ред рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ рдореЛрдбрд▓рд┐рдЩ рд╕рдореНрдмрдиреНрдз

1. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЗрд░рдгрд╛

2015 рдорд╛ рдПрдХ рд╡рд░реНрд╖, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдХрддрд┐ рдкрдЯрдХ рдврд┐рд▓реЛ рд╣реБрдиреНрдЫ рдорд╛рдкрди рдЧрд░реНрди рд╕рдорд╕реНрдпрд╛ рдЙрдард╛рдпреМрдВред рд╣рд╛рдореАрд▓реЗ рдпреЛ рдПрдЙрдЯрд╛ рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЧрд░реНтАНрдпреМрдВред рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рдмрд╛рд░рдореНрдмрд╛рд░ рдЧреБрдирд╛рд╕реЛрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдХрд╛ рдЫреМрдВ рдХрд┐ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди рд░реЛрдХреНрдЫ: рдмрдЯрдирд╣рд░реВ рдерд┐рдЪреНрди рд╕рдХрд┐рдБрджреИрди, рд╕реВрдЪреАрд╣рд░реВ рд╕реНрдХреНрд░реЛрд▓ рдЧрд░реНрджреИрди, рдЖрджрд┐ред рдорд╛рдкрди рдХреЛ рдореЗрдХрд╛рдирд┐рдХреНрд╕ рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдмрддрд╛рдП AvitoTech рдорд╛, рддреНрдпрд╕реИрд▓реЗ рдпрд╣рд╛рдБ рдо рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рдХреНрд░рдо рдорд╛рддреНрд░ рджрд┐рдиреНрдЫреБред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдорд╛рдкрди рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдЪрд┐рд╕реЛ рд╕реНрдирд╛рди рднрдпреЛред рдпреЛ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрд┐рдпреЛ рдХрд┐ рдЕрдиреНрдп рдХреБрдиреИ рдкрдирд┐ рднрдиреНрджрд╛ рдлреНрд░рд┐рдЬрдХреЛ рдХрд╛рд░рдг рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреНред рдпрджрд┐ рдпреЛ рддрдереНрдпрд▓рд╛рдИ рдорд╣рд╕реБрд╕ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдЧреБрдгрд╕реНрддрд░рдХреЛ рдореБрдЦреНрдп рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕реВрдЪрдХ рджреБрд░реНрдШрдЯрдирд╛ рдореБрдХреНрдд рдерд┐рдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рдлреЛрдХрд╕ рдкрдЫрд┐ рд╕рд╛рд░рд┐рдпреЛ рдлреНрд░реАрдЬ рдлреНрд░реА рдорд╛ред

рдирд┐рд░реНрдорд╛рдг рдЧрд░реЗрдХреЛ рд╣реЛ рдлреНрд░реАрдЬ рд╕рдВрдЧ рдбреНрдпрд╛рд╕рдмреЛрд░реНрдб рд░ рдЦрд░реНрдЪ рдкрдЫрд┐ рдорд╛рддреНрд░рд╛рддреНрдордХ ╨╕ рдЧреБрдг рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рд░рдгрд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдореБрдЦреНрдп рд╢рддреНрд░реБ рд╕реНрдкрд╖реНрдЯ рднрдпреЛ - рднрд╛рд░реА рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдЖрд╡реЗрджрди рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдорд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рддред рдпрд╕ рдЕрдкрдорд╛рдирдХреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд▓реЗ рдпрд╕рд▓рд╛рдИ рдХрд╛рдордХреЛ рдзрд╛рд░рд╛рд╣рд░реВрдорд╛ рдзрдХреЗрд▓реНрдиреЗ рдЗрдЪреНрдЫрд╛ рдерд┐рдпреЛред рдпрд╕ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдкрдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рд▓рд╛рдЗрдЯрд╡реЗрдЯ рдЕрднрд┐рдиреЗрддрд╛рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рдХреЛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдпреМрдВред рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ iOS рд╕рдВрд╕рд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕рдХреЛ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рд╕рдорд░реНрдкрд┐рдд рдЧрд░реЗрдВ рджреБрдИ рдзрд╛рдЧреЛ рд╕рд╛рдореВрд╣рд┐рдХ рдЯреНрд╡рд┐рдЯрд░ рд░ Habr├й рдорд╛ рд▓реЗрдЦред рд╣рд╛рд▓рдХреЛ рдХрдерд╛рдХреЛ рдЕрдВрд╢рдХреЛ рд░реВрдкрдорд╛, рдо рдирд┐рд░реНрдгрдпрдХрд╛ рддреА рдкрдХреНрд╖рд╣рд░реВрд▓рд╛рдИ рдЬреЛрдб рджрд┐рди рдЪрд╛рд╣рдиреНрдЫреБ рдЬрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдЫрдиреЛрдЯрд▓рд╛рдИ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реЗрдХреЛ рдерд┐рдпреЛред

рдкреНрд░рдгрд╛рд▓реА рд╕рдВрдЧрдардирдХреЛ рдЕрднрд┐рдиреЗрддрд╛ рдореЛрдбреЗрд▓рд▓реЗ рдорд╛рдиреНрджрдЫ рдХрд┐ рдорд▓реНрдЯрд┐рдереНрд░реЗрдбрд┐рдЩ рдпрд╕рдХреЛ рджреЛрд╕реНрд░реЛ рд╕рд╛рд░ рдмрдиреНрдЫред рдпрд╕рдорд╛ рдореЛрдбреЗрд▓ рд╡рд╕реНрддреБрд╣рд░реВ рд╕реНрдЯреНрд░рд┐рдо рд╕реАрдорд╛рд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрди рдорди рдкрд░рд╛рдЙрдБрдЫрдиреНред рд░ рддрд┐рдиреАрд╣рд░реВ рдпреЛ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдВ рд░ рдпрд╣рд╛рдБ рд░ рддреНрдпрд╣рд╛рдБ рд╣реЛрдЗрди, рддрд░ рд▓рдЧрднрдЧ рд▓рдЧрд╛рддрд╛рд░ рд░ рдЬрддрд╛рддрддреИ рдЧрд░реНрдЫрдиреН

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рд╕реНрддреБрдд рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рдорд╛ рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛред рдпрд╕рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп macropattern рд▓рд╛рдЧреВ рдЧрд░реНрди рдЫ рд╕рд╛рдЭрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ред рдпрджрд┐ рдЙрджреНрдпрдо рд╕рдВрд╕рд╛рд░рдорд╛ рдпреЛ рд╕реЗрд╡рд╛рд╣рд░реВ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдЕрднрд┐рдиреЗрддрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рдХреЛ рдорд╛рдорд▓рд╛рдорд╛ - рдереНрд░реЗрдбрд╣рд░реВ рдмреАрдЪрдХреЛ рдбреЗрдЯрд╛ред рддрд╕рд░реНрде, рд╣рд╛рдореАрд▓рд╛рдИ рдПрдХ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЪрд╛рд╣рд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рдмрд╣реБ-рдереНрд░реЗрдб рдЧрд░рд┐рдПрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдпрд╕рдХреЛ рд╕рд╛рде рдХрд╛рдо рдЧрд░реНрджрд╛ рдиреНрдпреВрдирддрдо рдХрдард┐рдирд╛рдЗрд╣рд░реВ рдкрдирд┐ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджреИрдиред рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рдпрд╕рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБрд╣рд░реВ рдХрдореНрддрд┐рдорд╛ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ, рд░ рдЖрджрд░реНрд╢ рд░реВрдкрдорд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЧреИрд░-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реБрдиреБрдкрд░реНрдЫред рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдкрдЫрд┐рд▓реНрд▓реЛ рдХреБрдиреИ рдкрдирд┐ рд▓рдХрдХреЛ рд╕рд╣рд╛рд░рд╛ рдмрд┐рдирд╛ рдзреЗрд░реИ рдереНрд░реЗрдбрд╣рд░реВрдмрд╛рдЯ рдПрдХ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдкреНрд░рджрд░реНрд╢рдирдорд╛ рд▓рд╛рднрджрд╛рдпрдХ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреАрдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдЫрдиреЛрдЯрд▓рд╛рдИ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдиреЗ рджреЛрд╕реНрд░реЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рд╣рд╛рдореНрд░реЛ рдХреНрд▓рд╛рдЙрдб рдПрдкреАрдЖрдИ рдерд┐рдпреЛред рдпреЛ git рджреНрд╡рд╛рд░рд╛ рдЕрдкрдирд╛рдИрдПрдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдкреНрд░реЗрд░рд┐рдд рдерд┐рдпреЛред рдЙрд╣рд╛рдБ рдЬрд╕реНрддреИ, рд╣рд╛рдореАрд▓реЗ рд▓рдХреНрд╖реНрдп рд░рд╛рдЦреНрдпреМрдВ рдЕрдлрд▓рд╛рдЗрди-рдкрд╣рд┐рд▓реЛ API, рдЬреБрди рдХреНрд▓рд╛рдЙрдб рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рднрдиреНрджрд╛ рдмрдвреА рджреЗрдЦрд┐рдиреНрдЫред рдпреЛ рдорд╛рдирд┐рдПрдХреЛ рдерд┐рдпреЛ рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдХреНрд▓рд╛рдЙрдбрдХреЛ рдкреВрд░реНрдг рдЕрд╡рд╕реНрдерд╛ рдПрдХ рдкрдЯрдХ рдорд╛рддреНрд░ рдкрдореНрдк рдЧрд░реНрдиреЗрдЫрдиреН, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдзреЗрд░реИ рдЬрд╕реЛ рдХреЗрд╕рд╣рд░реВрдорд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рд░реЛрд▓ рдЖрдЙрдЯ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдорд╛рд░реНрдлрдд рд╣реБрдиреЗрдЫред рдЕрдлрд╕реЛрд╕, рдпреЛ рдЕрд╡рд╕рд░ рдЕрдЭреИ рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рдХреНрд╖реЗрддреНрд░рдорд╛ рдорд╛рддреНрд░ рдЫ, рд░ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдкреНрдпрд╛рдЪрд╣рд░реВрд╕рдБрдЧ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╕рд┐рдХреЗрдХрд╛ рдЫреИрдирдиреНред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╡рд╕реНрддреБрдЧрдд рдХрд╛рд░рдгрд╣рд░реВ рдЫрдиреН, рдЬреБрди, рдкрд░рд┐рдЪрдпрдорд╛ рдврд┐рд▓рд╛рдЗ рдирдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдХреЛрд╖реНрдардХрд╣рд░реВ рдкрдЫрд╛рдбрд┐ рдЫреЛрдбреНрдиреЗрдЫреМрдВред рдЕрдм, рдзреЗрд░реИ рдЪрд╛рд╕реЛрдХреЛ рдХреБрд░рд╛ рднрдиреЗрдХреЛ рдПрдкреАрдЖрдИрд▓реЗ "A" рд░ рдпрд╕рдХреЛ рдЙрдкрднреЛрдХреНрддрд╛рд▓реЗ "B" рдирднрдиреНрджрд╛ рдХреЗ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдкрд╛рдардХреЛ рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реЛред

рддреНрдпрд╕реЛрднрдП, рдпрджрд┐ рддрдкрд╛рдЗрдБ git рдХреЛ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рдЬреБрди рдкреБрд▓ рдХрдорд╛рдгреНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджрд╛, рд╕реНрдерд╛рдиреАрдп рд╕реНрдиреНрдпрд╛рдкрд╕рдЯрдорд╛ рдкреНрдпрд╛рдЪрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рдпрд╕рдХреЛ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рдкреВрд░реНрдг рд╕рд░реНрднрд░ рд░рд╛рдЬреНрдпрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрджрдЫ, рддрдм рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдХреНрд▓рд╛рдЙрдбрдорд╛ рдХрд╕рд░реА рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдПрдХрджрдо рд╕рд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реБрдиреЗрдЫред рдЧреНрд░рд╛рд╣рдХрд╣рд░реБред рдпреЛ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫ рдХрд┐ рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рд╕рдмреИ рд╕рд░реНрднрд░ рд░ рд╕реНрдерд╛рдиреАрдп рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд╕рд╛рде рдореЗрдореЛрд░реАрдорд╛ рджреБрдИ DOM рд░реВрдЦрд╣рд░реВ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ рдХрд┐ рдпрджрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдХреНрд▓рд╛рдЙрдбрдорд╛ 500 рд╣рдЬрд╛рд░ рдлрд╛рдЗрд▓рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓рд╛рдИ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди 1 рдорд┐рд▓рд┐рдпрди рдиреЛрдбрд╣рд░реВрд╕рдБрдЧ рджреБрдИ рд░реВрдЦрд╣рд░реВ рдкреБрди: рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдирд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд╕рдмрд╡рдЬреЗрдХреНрдЯрд╣рд░реВрдХреЛ рдЧреНрд░рд╛рдл рднрдПрдХреЛ рд╕рдордЧреНрд░ рд╣реЛред рдпрд╕ рдкреНрд░рдХрд╛рд╢рдорд╛, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдЩ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд┐рдПред рдпреЛ рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ рдХрд┐ рдорд░реНрдЬ рдЧрд░реНрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рдирд▓рд┐рдИ рдкрдирд┐, рдзреЗрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╕рд╛рдирд╛ рд╡рд╕реНрддреБрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд░ рдкрдЫрд┐ рдирд╖реНрдЯ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдПрдХ рдзреЗрд░реИ рдкреИрд╕рд╛ рдЦрд░реНрдЪ рд╣реБрдиреНрдЫред рдЖрдзрд╛рд░рднреВрдд рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рдЕрдкрд░реЗрд╢рди рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ рддрдереНрдпрд▓реЗ рдЕрд╡рд╕реНрдерд╛ рдмрд┐рдЧреНрд░рд┐рдПрдХреЛ рдЫред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдкрд┐рд╣рд░реВрдХреЛред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЫрдиреМрдЯ рдЧрд░реНрди рджреЛрд╕реНрд░реЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдгреНрдб рдареАрдХ рдЧрд░реНрдЫреМрдВ - рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рдмрд┐рдирд╛ CRUD рдЕрдкрд░реЗрд╢рдирд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ред

рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдЕрдзрд┐рдХ рдкрд░рдореНрдкрд░рд╛рдЧрдд рдЫрдиреН рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕реВрдЪреА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫред

  1. рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ред
  2. рдмрд╣реБрдкреНрд░рд╢реЛрдзрдиред рдереНрд░реЗрдбрд╣рд░реВ рдмреАрдЪ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд░ рдЖрдИрдУрдПрд╕ рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рдмреАрдЪ рдкрдирд┐ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЗрдЪреНрдЫрд╛рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рддред
  3. рдЧреИрд░-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░рдг рд╕рдВрд╕реНрдерд╛рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛
  4. CRUD рд╕рдЮреНрдЪрд╛рд▓рди рднрд┐рддреНрд░ рдХреБрдиреИ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рдЫреИрдиред
  5. рдЖрдзрд╛рд░рднреВрдд рдЧреБрдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд▓реЗрдирджреЗрди рд╕рдорд░реНрдерди рдПрд╕рд┐рдб: рдкрд░рдорд╛рдгреБ, рд╕реНрдерд┐рд░рддрд╛, рдЕрд▓рдЧрд╛рд╡ рд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ред
  6. рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЗрд╕рд╣рд░реВрдорд╛ рдЧрддрд┐ред

рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рдпрд╕ рд╕реЗрдЯрдХреЛ рд╕рд╛рде, SQLite рд░рд╛рдореНрд░реЛ рд╡рд┐рдХрд▓реНрдк рдерд┐рдпреЛ рд░ рд░рд╣рдиреНрдЫред рдпрджреНрдпрдкрд┐, рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рдЕрдзреНрдпрдпрдирдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рдореИрд▓реЗ рдПрдЙрдЯрд╛ рдкреБрд╕реНрддрдХ рднреЗрдЯреЗрдВ "LevelDB рдХреЛ рд╕рд╛рде рд╕реБрд░реБ рдЧрд░реНрджреИ"ред рдЙрдирдХреЛ рдиреЗрддреГрддреНрд╡рдорд╛, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд▓рд╛рдЙрдб рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВрдорд╛ рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдордХреЛ рдЧрддрд┐рдХреЛ рддреБрд▓рдирд╛ рдЧрд░реНрджреИ рдмреЗрдиреНрдЪрдорд╛рд░реНрдХ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛред рдкрд░рд┐рдгрд╛рдорд▓реЗ рд╣рд╛рдореНрд░реЛ рдЬрдВрдЧрд▓реА рдЕрдкреЗрдХреНрд╖рд╛рд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрдпреЛред рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЗрд╕рд╣рд░реВрдорд╛ - рд╕рдмреИ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рд░ рджрд┐рдЗрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреАрдорд╛ рдХрд░реНрд╕рд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ - LMDB SQLite рднрдиреНрджрд╛ 10 рдЧреБрдгрд╛ рдЫрд┐рдЯреЛ рднрдпреЛред рдЫрдиреЛрдЯ рд╕реНрдкрд╖реНрдЯ рднрдпреЛред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

2. LMDB рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рдг

LMDB рдПрдХ рдзреЗрд░реИ рд╕рд╛рдиреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛ (рдХреЗрд╡рд▓ 10K рдкрдЩреНрдХреНрддрд┐рд╣рд░реВ) рдЬрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рддрд▓реНрд▓реЛ рдЖрдзрд╛рд░рднреВрдд рддрд╣ - рднрдгреНрдбрд╛рд░рдгрд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдорд╛рдерд┐рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ LMDB рдХреЛ SQLite рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдиреЗ, рдЬрд╕рд▓реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░рд╣рд░реВ рдкрдирд┐ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХреЛрд░ рдбрд╛рдЯрд╛рдХреЛ рд╕рд╛рде SQLite рднрдиреНрджрд╛ рдмрдвреА рд╕рд╣реА рдЫреИрдиред рд╕рдорд╛рди рдкреНрд░рддрд┐рдпреЛрдЧреАрд╣рд░реВ - BerkeleyDB, LevelDB, Sophia, RocksDB, рдЗрддреНрдпрд╛рджрд┐рдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рднрдгреНрдбрд╛рд░рдг рдЗрдиреНрдЬрд┐рдирд╣рд░реВ рдЙрджреНрдзреГрдд рдЧрд░реНрди рдЕрдЭ рдЙрдЪрд┐рдд рд╣реБрдиреЗрдЫред LMDB рд▓реЗ SQLite рдХреЛ рд▓рд╛рдЧрд┐ рднрдгреНрдбрд╛рд░рдг рдЗрдиреНрдЬрд┐рди рдШрдЯрдХрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╡рд┐рдХрд╛рд╕рд╣рд░реВ рдкрдирд┐ рдЫрдиреНред рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдпрд╕реНрддреЛ рдкреНрд░рдпреЛрдЧ рд╕рдиреН реирежрезреи рдорд╛ рднрдПрдХреЛ рдерд┐рдпреЛ рдЦрд░реНрдЪ рднрдпреЛ LMDB рджреНрд╡рд╛рд░рд╛ рд╣рд╛рд╡рд░реНрдб рдЪреБ. ╨а╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л рдпрддрд┐ рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рднрдпреЛ рдХрд┐ рдЙрдирдХреЛ рдкрд╣рд▓ OSS рдЙрддреНрд╕рд╛рд╣реАрд╣рд░реВрд▓реЗ рдЙрдард╛рдП, рд░ рд╡реНрдпрдХреНрддрд┐рдорд╛ рдпрд╕рдХреЛ рдирд┐рд░рдиреНрддрд░рддрд╛ рдкрд╛рдПред LumoSQLред рдЬрдирд╡рд░реА реирежреиреж рдорд╛, рдпрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХрд╛ рд▓реЗрдЦрдХ рдбреЗрди рд╢рд┐рдпрд░рд░ рдерд┐рдП рдкреНрд░рд╕реНрддреБрдд LinuxConfAu рдорд╛ред

LMDB рдореБрдЦреНрдпрддрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЗрдиреНрдЬрд┐рдирдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╕рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЛрдгреА рдЫ рдУрдкрдирдПрд▓рдбреАрдПрдк, рдЬреЛ рдЖрдлреНрдиреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ BerkeleyDB рд╕рдБрдЧ рдЕрддреНрдпрдзрд┐рдХ рдЕрд╕рдиреНрддреБрд╖реНрдЯ рдерд┐рдПред рдПрдЙрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реНрджреИ btree, рд╣рд╛рд╡рд░реНрдб рдЪреБрд▓реЗ рд╣рд╛рдореНрд░реЛ рд╕рдордпрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рдерд┐рдПред рдЙрдирд▓реЗ рдЖрдлреНрдиреЛ рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╕ рдХрдерд╛рдорд╛, рд╕рд╛рдереИ LMDB рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛рдорд╛ рд╕рдорд░реНрдкрд┐рдд рдЧрд░реЗред "рдмрд┐рдЬреБрд▓реА рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕"ред рднрдгреНрдбрд╛рд░рдг рд╕реБрд╡рд┐рдзрд╛ рдЬрд┐рддреНрдиреЗ рд░рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпреЛрдирд┐рдж рдпреБрд░рд┐рдПрдн (рдЙрд░реНрдл yleoрд╣рд╛рдЗрд▓реЛрдб 2015 рдорд╛ рдЙрдирдХреЛ рд░рд┐рдкреЛрд░реНрдЯрдорд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреАрдмрд╛рдЯ "LMDB рдЗрдиреНрдЬрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪреНрдпрд╛рдореНрдкрд┐рдпрди рд╣реЛ"ред рдпрд╕рдорд╛, рдЙрд╣рд╛рдБрд▓реЗ ReOpenLDAP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ LMDB рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд░ LevelDB рдкрд╣рд┐рд▓реЗ рдиреИ рддреБрд▓рдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛рдХреЛ рд╡рд┐рд╖рдп рдмрдиреЗрдХреЛ рдЫред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреАрд╣рд░реВрдорд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдлреЛрд░реНрдХ рдкрдирд┐ рдерд┐рдпреЛ MDBX рдзреЗрд░реИ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ, рдЕрдиреБрдХреВрд▓рди рд░ рдмрдЧ рдлрд┐рдХреНрд╕рд╣рд░реВ.

LMDB рдкреНрд░рд╛рдп рдЬрд╕реЛ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдореЛрдЬрд┐рд▓рд╛ рдлрд╛рдпрд░рдлрдХреНрд╕ рдмреНрд░рд╛рдЙрдЬрд░ рд░реЛрдЬрд┐рдпреЛ рдпреЛ рдзреЗрд░реИ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд░, рд╕рдВрд╕реНрдХрд░рдг 9, Xcode рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫ рд░реБрдЪрд╛рдЗрдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕рдХреЛ SQLiteред

рдЗрдиреНрдЬрд┐рдирд▓реЗ рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕рдХреЛ рд╕рдВрд╕рд╛рд░рдорд╛ рдкрдирд┐ рдЖрдлреНрдиреЛ рдЫрд╛рдк рдЫреЛрдбреЗрдХреЛ рдЫред рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧ рдХреЛ рдирд┐рд╢рд╛рди рд╣реБрди рд╕рдХреНрдЫ ╨╜╨░╨╣╤В╨╕ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордХреЛ рд▓рд╛рдЧрд┐ iOS рдЧреНрд░рд╛рд╣рдХрдорд╛ред LinkedIn рдЕрдЭ рдЕрдЧрд╛рдбрд┐ рдмрдвреНрдпреЛ рд░ LMDB рд▓рд╛рдИ рдпрд╕рдХреЛ рд╣реЛрдордЧреНрд░рд╛рдЙрди рдбрд╛рдЯрд╛ рдХреНрдпрд╛рд╕рд┐рдЩ рдлреНрд░реЗрдорд╡рд░реНрдХ рд░рдХреЗрдЯ рдбрд╛рдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рднрдгреНрдбрд╛рд░рдгрдХреЛ рд░реВрдкрдорд╛ рд░реЛрдЬреНрдпреЛ, рдЬрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдмрддрд╛рдП 2016 рдорд╛ рдЙрдирдХреЛ рд▓реЗрдЦрдорд╛ред

LMDB Oracle рдХреЛ рдирд┐рдпрдиреНрддреНрд░рдгрдорд╛ рдЖрдП рдкрдЫрд┐ BerkeleyDB рд▓реЗ рдЫреЛрдбреЗрдХреЛ рдЖрд▓рд╛рдорд╛ рд╕реВрд░реНрдпрдорд╛ рд╕реНрдерд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рдбрд┐рд░рд╣реЗрдХреЛ рдЫред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╕рдХреЛ рдЧрддрд┐ рд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рд▓рд╛рдЧреА рдорд╛рдпрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдпрд╕рдХреЛ рд╕рд╛рдереАрд╣рд░реБ рдХреЛ рддреБрд▓рдирд╛ рдорд╛ред рддрдкрд╛рдИрдВрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдирд┐:рд╢реБрд▓реНрдХ рдЦрд╛рдЬрд╛рд╣рд░реВ рдЫреИрдирдиреН, рд░ рдо LMDB рд░ SQLite рдмреАрдЪ рдЫрдиреМрдЯ рдЧрд░реНрджрд╛ рддрдкрд╛рдИрдВрд▓реЗ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рдЯреНрд░реЗрдб-рдЕрдлрд▓рд╛рдИ рдЬреЛрдб рджрд┐рди рдЪрд╛рд╣рдиреНрдЫреБред рдорд╛рдерд┐рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рд▓реЗ рдХрд╕рд░реА рдмрдвреЗрдХреЛ рдЧрддрд┐ рд╣рд╛рд╕рд┐рд▓ рдЧрд░рд┐рдиреНрдЫ рднрдиреЗрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рджреЗрдЦрд╛рдЙрдБрдЫред рдкрд╣рд┐рд▓реЛ, рд╣рд╛рдореА рдбрд┐рд╕реНрдХ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдЕрдореВрд░реНрддрддрд╛рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╣рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднреБрдХреНрддрд╛рди рдЧрд░реНрджреИрдиреМрдВред рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ рд░рд╛рдореНрд░реЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрдЭреИ рдкрдирд┐ рддрд┐рдиреАрд╣рд░реВ рдмрд┐рдирд╛ рдЧрд░реНрди рд╕рдХреНрджреИрди, рд░ рддрд┐рдиреАрд╣рд░реВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдбрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫ, рддрд░ рддрд┐рдиреАрд╣рд░реВ рдзреЗрд░реИ рд╕реВрдХреНрд╖реНрдо рд╣реБрдиреЗрдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдирдкрд░реНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрдирдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, SQL рднрд╛рд╖рд╛рдорд╛ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред рджреЛрд╕реНрд░реЛ, рдбрд┐рд╕реНрдХ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдкрд░реЗрд╢рдирд╣рд░реВрдХреЛ рдореНрдпрд╛рдкрд┐рдЩрд▓рд╛рдИ рдЗрд╖реНрдЯрддрдо рд░реВрдкрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдореНрднрд╡ рд╣реБрдиреНрдЫред рдпрджрд┐ SQLite рдореЗрд░реЛ рдХрд╛рдордорд╛ рдФрд╕рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдФрд╕рдд рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ, рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛, рдореБрдЦреНрдп рдХрд╛рд░реНрдпрднрд╛рд░ рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВ рдмрд╛рд░реЗ рд░рд╛рдореНрд░рд░реА рд╕рдЪреЗрдд рд╣реБрдиреБрд╣реБрдиреНрдЫред рдердк рдЙрддреНрдкрд╛рджрдХ рд╕рдорд╛рдзрд╛рдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕рдорд╛рдзрд╛рдирдХреЛ рд╡рд┐рдХрд╛рд╕ рд░ рддреНрдпрд╕рдкрдЫрд┐рдХреЛ рд╕рдорд░реНрдердирдХреЛ рд▓рд╛рдЧрд┐ рджреБрд╡реИ рдмрдвреЗрдХреЛ рдореВрд▓реНрдп рдЯреНрдпрд╛рдЧ рддрд┐рд░реНрдиреБрдкрд░реНрдиреЗрдЫред

3. LMDB рдХреЛ рддреАрди рд╕реНрддрдореНрдн

LMDB рд▓рд╛рдИ рдЪрд░рд╛рдХреЛ рдЖрдБрдЦрд╛рдмрд╛рдЯ рд╣реЗрд░реЗрдкрдЫрд┐, рдпреЛ рдЧрд╣рд┐рд░рд╛рдЗрдорд╛ рдЬрд╛рдиреЗ рд╕рдордп рдерд┐рдпреЛред рдЕрд░реНрдХреЛ рддреАрди рдЦрдгреНрдбрд╣рд░реВ рдореБрдЦреНрдп рд╕реНрддрдореНрднрд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдорд╛ рд╕рдорд░реНрдкрд┐рдд рд╣реБрдиреЗрдЫрдиреН рдЬрд╕рдорд╛ рднрдгреНрдбрд╛рд░рдг рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЯрд┐рдХреНрдЫ:

  1. рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдлрд╛рдЗрд▓рд╣рд░реВ рдбрд┐рд╕реНрдХрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд░ рдЖрдиреНрддрд░рд┐рдХ рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рдВрдпрдиреНрддреНрд░рдХреЛ рд░реВрдкрдорд╛ред
  2. рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛рдХреЛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕рдВрдЧрдардирдХреЛ рд░реВрдкрдорд╛ B+-рдЯреНрд░реАред
  3. ACID рд▓реЗрдирджреЗрди рдЧреБрдгрд╣рд░реВ рд░ рдмрд╣реБрд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдЕрди-рд▓реЗрдЦрдиред

рей.резред рд╣реНрд╡реЗрд▓ #3.1ред рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ

рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдпрд╕реНрддреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рддрддреНрд╡ рд╣реБрдиреН рдЬреБрди рддрд┐рдиреАрд╣рд░реВ рднрдгреНрдбрд╛рд░рдХреЛ рдирд╛рдордорд╛ рдкрдирд┐ рджреЗрдЦрд╛ рдкрд░реНрдЫрдиреНред рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЬрд╛рдирдХрд╛рд░реАрдорд╛ рдкрд╣реБрдБрдЪрдХреЛ рдХреНрдпрд╛рд╕рд┐рдЩ рд░ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рдирдХреЛ рдореБрджреНрджрд╛рд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордорд╛ рдЫреЛрдбрд┐рдиреНрдЫрдиреНред LMDB рд▓реЗ рдЖрдлреИ рднрд┐рддреНрд░ рдХреБрдиреИ рдХреНрдпрд╛рд╕ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрдиред рдпреЛ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдЪреЗрдд рдирд┐рд░реНрдгрдп рд╣реЛ, рдХрд┐рдирдХрд┐ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рд╕реАрдзреИ рдбрд╛рдЯрд╛ рдкрдвреНрджрд╛ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЗрдиреНрдЬрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рдзреЗрд░реИ рдХреБрдирд╛рд╣рд░реВ рдХрд╛рдЯреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рддрд▓ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреЗрд╣реАрдХреЛ рдкреВрд░реНрдг рд╕реВрдЪреАрдмрд╛рдЯ рдЯрд╛рдврд╛ рдЫред

  1. рдзреЗрд░реИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдмрд╛рдЯ рдХрд╛рдо рдЧрд░реНрджрд╛ рднрдгреНрдбрд╛рд░рдгрдорд╛ рдбрд╛рдЯрд╛рдХреЛ рд╕реНрдерд┐рд░рддрд╛ рдХрд╛рдпрдо рд░рд╛рдЦреНрдиреБ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордХреЛ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реА рд╣реБрдиреНрдЫред рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛, рдпреЛ рдореЗрдХрд╛рдирд┐рдХреНрд╕рд▓рд╛рдИ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд░ рдЪрд┐рддреНрд░рд╣рд░реВ рд╕рд╣рд┐рдд рдЫрд▓рдлрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫред
  2. рдХреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐рд▓реЗ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдУрднрд░рд╣реЗрдбрдмрд╛рдЯ LMDB рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╣рдЯрд╛рдЙрдБрдЫред рдЕрднреНрдпрд╛рд╕рдорд╛ рдбреЗрдЯрд╛ рдкрдвреНрдиреБ рднрдиреЗрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдорд╛ рд╕рд╣реА рдареЗрдЧрд╛рдирд╛рдорд╛ рдкреЛрдЗрдиреНрдЯрд░ рд╕реЗрдЯ рдЧрд░реНрдиреБ рд╣реЛ рд░ рдЕрд░реВ рдХреЗрд╣реА рдЫреИрдиред рдпреЛ рд╡рд┐рдЬреНрдЮрд╛рди рдХрдерд╛ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рднрдгреНрдбрд╛рд░рдг рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ calloc рдорд╛ рд╕рдмреИ рдХрд▓рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рдЫрдиреНред
  3. рдХреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рднрдиреЗрдХреЛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкрд╣реБрдБрдЪрдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд▓рдХрд╣рд░реВрдХреЛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реЛред рдкрд╛рдардХрд╣рд░реВ, рдЬрд╕рдордзреНрдпреЗ рдПрдХреИ рд╕рдордпрдорд╛ рдкрд╛рдардХрд╣рд░реВрдХреЛ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рд╣реБрди рд╕рдХреНрдЫ, рдбреЗрдЯрд╛рдорд╛ рдЬрд╛рдиреЗ рдмрд╛рдЯреЛрдорд╛ рдПрдХрд▓ рдореНрдпреБрдЯреЗрдХреНрд╕рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрджреИрдиред рдпрд╕ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛, CPU рдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдкрдарди рдЧрддрд┐рдорд╛ рдЖрджрд░реНрд╢ рд░реИрдЦрд┐рдХ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рд╣реБрдиреНрдЫред LMDB рдорд╛, рдкрд░рд┐рдорд╛рд░реНрдЬрди рдХрд╛рд░реНрдпрд╣рд░реВ рдорд╛рддреНрд░ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рд╣реБрдиреНрдЫрдиреНред рддреНрдпрд╣рд╛рдБ рдПрдХ рдкрдЯрдХрдорд╛ рдПрдХ рдорд╛рддреНрд░ рд▓реЗрдЦрдХ рд╣реБрди рд╕рдХреНрдЫред
  4. рдиреНрдпреВрдирддрдо рдХреНрдпрд╛рд╕рд┐рдЩ рд░ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рддрд░реНрдХрд▓реЗ рдмрд╣реБ-рдереНрд░реЗрдб рдЧрд░рд┐рдПрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЕрддреНрдпрдиреНрдд рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░рдХрд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВрд▓рд╛рдИ рд╣рдЯрд╛рдЙрдБрдЫред Usenix OSDI 2014 рд╕рдореНрдореЗрд▓рдирдорд╛ рджреБрдИрд╡рдЯрд╛ рд░реЛрдЪрдХ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЕрдзреНрдпрдпрдирд╣рд░реВ рдерд┐рдП: "рд╕рдмреИ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рд╕рдорд╛рди рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдЫреИрдирдиреН: рдХреНрд░реНрдпрд╛рд╕-рд╕рдВрдЧрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдХреНрд░рд╛рдлреНрдЯрд┐рдЩрдХреЛ рдЬрдЯрд┐рд▓рддрд╛рдорд╛" ╨╕ "рд░рдорд╛рдЗрд▓реЛ рд░ рдирд╛рдлрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрд▓рд╛рдИ рдпрд╛рддрдирд╛ рджрд┐рдиреЗ"ред рддрд┐рдиреАрд╣рд░реВрдмрд╛рдЯ рддрдкрд╛рдИрд▓реЗ LMDB рдХреЛ рдЕрднреВрддрдкреВрд░реНрд╡ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд░ ACID рд▓реЗрдирджреЗрди рдЧреБрдгрд╣рд░реВрдХреЛ рд▓рдЧрднрдЧ рдирд┐рд░реНрджреЛрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдмрдЯреБрд▓реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬреБрди SQLite рднрдиреНрджрд╛ рдЙрдЪреНрдЪ рдЫред
  5. LMDB рдХреЛ minimalism рд▓реЗ рдпрд╕рдХреЛ рдХреЛрдбрдХреЛ рдореЗрд╕рд┐рди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд▓рд╛рдИ рдЖрдЧрд╛рдореА рдЧрддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрд╕рдБрдЧ рдкреНрд░реЛрд╕реЗрд╕рд░рдХреЛ L1 рдХреНрдпрд╛рд╕рдорд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдЖрдИрдУрдПрд╕рдорд╛, рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕рд╛рде, рд╕рдмреИ рдХреБрд░рд╛ рд╣рд╛рдореАрд▓реЗ рдЪрд╛рд╣реЗрдХреЛ рдЬрд╕реНрддреЛ рдХреНрд▓рд╛рдЙрдбрд▓реЗрд╕ рд╣реБрдБрджреИрдиред рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрдордЬреЛрд░реАрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк рд╕рдЪреЗрдд рд░реВрдкрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрди, рдпреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рдорд╛ рдпреЛ рд╕рдВрдпрдиреНрддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдиреНрдд рд╕рдореНрдЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЫред

рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреАрдЪрд▓реНрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╕рдБрдЧ, рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднрдирд┐рдиреЗ рдирд┐рдХрд╛рдпрд▓рд╛рдИ рд╕рдореНрдмрджреНрдз рдЧрд░реНрджрдЫред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рдПрдХ рд╕рдиреНрдирд┐рд╣рд┐рдд рджрд╛рдпрд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬрд╕рдорд╛ рдпрд╕рд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╕рдмреИ рдЪреАрдЬрд╣рд░реВ рд░рд╛рдЦреНрдЫред рд╕рдмреИрднрдиреНрджрд╛ рддрд▓реНрд▓реЛ рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдорд╛ рдХреЛрдб рд░ рд╣рд╛рд░реНрдб-рдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдбреЗрдЯрд╛ рд░ рд╕реНрд░реЛрддрд╣рд░реВ рднрдПрдХрд╛ рдЦрдгреНрдбрд╣рд░реВ рдЫрдиреНред рдЕрд░реНрдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рдареЗрдЧрд╛рдирд╛ рд╕реНрдкреЗрд╕рдХреЛ рдмрдвреНрджреЛ рдмреНрд▓рдХ рдЖрдЙрдБрдЫ, рд╣рд╛рдореАрд▓рд╛рдИ рдирд╛рдордХреЛ рдвреЗрд░ рдЕрдиреНрддрд░реНрдЧрдд рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рдЫред рдпрд╕рд▓реЗ рд╕рдВрд╕реНрдерд╛рд╣рд░реВрдХреЛ рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬреБрди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛ рджреЗрдЦрд╛ рдкрд░реНрджрдЫред рд╢реАрд░реНрд╖рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдЯреНрдпрд╛рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╣реЛред рдпреЛ рдпрд╛ рдд рдмрдвреНрдЫ рд╡рд╛ рд╕рдВрдХреБрдЪрд┐рдд рд╣реБрдиреНрдЫ; рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдпрд╕рдХреЛ рдЖрдХрд╛рд░ рдкрдирд┐ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХреГрддрд┐ рдЫред рд╕реНрдЯреНрдпрд╛рдХ рд░ рд╣рд┐рдкрд▓рд╛рдИ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рдзрдХреЗрд▓реНрди рд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЧрд░реНрдирдмрд╛рдЯ рд░реЛрдХреНрди, рддрд┐рдиреАрд╣рд░реВ рдареЗрдЧрд╛рдирд╛ рд╕реНрдкреЗрд╕рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЫреЗрдЙрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред рдорд╛рдерд┐ рд░ рддрд▓ рджреБрдИ рдЧрддрд┐рд╢реАрд▓ рдЦрдгреНрдбрд╣рд░реВ рдмреАрдЪ рдПрдЙрдЯрд╛ рдкреНрд╡рд╛рд▓ рдЫред рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╕рдБрдЧ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдХрд╛рдпрд╣рд░реВрд▓рд╛рдИ рд╕рдореНрдмрджреНрдз рдЧрд░реНрди рдпреЛ рдордзреНрдп рдЦрдгреНрдбрдорд╛ рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛, рдпрд╕рд▓реЗ рдбрд┐рд╕реНрдХрдорд╛ рдлрд╛рдЗрд▓рд╕рдБрдЧ рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░рдиреНрддрд░ рд╕реЗрдЯрд▓рд╛рдИ рд╕рдореНрдмрджреНрдз рдЧрд░реНрди рд╕рдХреНрдЫред рдпрд╕реНрддреЛ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рднрдирд┐рдиреНрдЫ

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдЖрд╡рдВрдЯрд┐рдд рдареЗрдЧрд╛рдирд╛ рдард╛рдЙрдБ рдареВрд▓реЛ рдЫред рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рд░реВрдкрдорд╛, рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рд╕реВрдЪрдХрдХреЛ рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдЫ, рдЬреБрди рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдмрд┐рдЯ рдХреНрд╖рдорддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рднреМрддрд┐рдХ рдореЗрдореЛрд░реАрд▓рд╛рдИ 1-to-1 рдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ рд╕рдореНрдкреВрд░реНрдг RAM рдорд╛рдерд┐ рдЬрд╛рдиреНрдЫ, рд░ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдкрдирд┐ рдорд▓реНрдЯрд┐рдЯрд╛рд╕реНрдХрд┐рдЩрдХреЛ рдХреБрд░рд╛ рд╣реБрдБрджреИрдиред

рдпрджреНрдпрдкрд┐, рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡рдмрд╛рдЯ рд╣рд╛рдореА рдЬрд╛рдиреНрджрдЫреМрдВ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╣рд░реВрд▓реЗ рдПрдХреИ рд╕рд╛рде рдзреЗрд░реИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпреЛ рддрдереНрдпрдХреЛ рдХрд╛рд░рдгрд▓реЗ рд╕рдореНрднрд╡ рдЫ рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдХреЗрд╡рд▓ рдХрд╛рдЧрдЬрдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдорд╛ рдзреЗрд░реИ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдЫрдиреН, рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ рддрд┐рдиреАрд╣рд░реВ рдореБрдЦреНрдп рднреМрддрд┐рдХ рдореЗрдореЛрд░реАрдорд╛ рдорд╛рддреНрд░ рд▓реЛрдб рд╣реБрдиреНрдЫрдиреН рдЬреБрди рдпрд╣рд╛рдБ рд░ рдЕрд╣рд┐рд▓реЗ рдорд╛рдЧрдорд╛ рдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдореЗрдореЛрд░реАрд▓рд╛рдИ рднрд░реНрдЪреБрдЕрд▓ рднрдирд┐рдиреНрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рд░ рдлрд┐рдЬрд┐рдХрд▓ рдореЗрдореЛрд░реАрд▓рд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд╛рдЗрдЬрдХреЛ рдкреГрд╖реНрдард╣рд░реВрдорд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдЫред рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдкреГрд╖реНрдардХреЛ рдорд╛рдЧ рд╣реБрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд▓реЗ рдпрд╕рд▓рд╛рдИ рднреМрддрд┐рдХ рдореЗрдореЛрд░реАрдорд╛ рд▓реЛрдб рдЧрд░реНрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдорд┐рд▓рд╛рдЙрдБрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдирд┐: рд╢реБрд▓реНрдХ рд╕реНрд▓рдЯрд╣рд░реВ рдЫреИрдирдиреН рднрдиреЗ, рдкрд╣рд┐рд▓реЗ рд▓реЛрдб рдЧрд░рд┐рдПрдХрд╛ рдкреГрд╖реНрдард╣рд░реВ рдордзреНрдпреЗ рдПрдЙрдЯрд╛ рдбрд┐рд╕реНрдХрдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдорд╛рдЧрдорд╛ рд░рд╣реЗрдХреЛрд▓реЗ рдпрд╕рдХреЛ рд╕реНрдерд╛рди рд▓рд┐рдиреНрдЫред рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬреБрди рд╣рд╛рдореА рдЫрд┐рдЯреНрдЯреИ рдлрд░реНрдХрдиреЗрдЫреМрдВ, рд╕реНрд╡реИрдкрд┐рдЩ рднрдирд┐рдиреНрдЫред рддрд▓рдХреЛ рдЪрд┐рддреНрд░рд▓реЗ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдЪрд┐рддреНрд░рдг рдЧрд░реНрджрдЫред рдпрд╕рдорд╛, рдареЗрдЧрд╛рдирд╛ реж рд╕рд╣рд┐рддрдХреЛ рдкреГрд╖реНрда A рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ рдареЗрдЧрд╛рдирд╛ 0 рднрдПрдХреЛ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдкреГрд╖реНрдардорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдерд┐рдпреЛред рдпреЛ рддрдереНрдп рд╕реЗрд▓ рдирдореНрдмрд░ реж рдХреЛ рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рднрдПрдХреЛ рдерд┐рдпреЛред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдореЗрдореЛрд░реАрдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрд╕рдБрдЧ рдХрдерд╛ рдареНрдпрд╛рдХреНрдХреИ рдЙрд╕реНрддреИ рдЫред рддрд╛рд░реНрдХрд┐рдХ рд░реВрдкрдорд╛, рддрд┐рдиреАрд╣рд░реВ рдХрдерд┐рдд рд░реВрдкрдорд╛ рдирд┐рд░рдиреНрддрд░ рд░ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рднрд░реНрдЪреБрдЕрд▓ рдареЗрдЧрд╛рдирд╛ рдард╛рдЙрдБрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред рдпрджреНрдпрдкрд┐, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдкреГрд╖реНрда рдкреГрд╖реНрдарджреНрд╡рд╛рд░рд╛ рд░ рдЕрдиреБрд░реЛрдзрдорд╛ рдорд╛рддреНрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдЫрдиреНред рддреНрдпрд╕реНрддрд╛ рдкреГрд╖реНрдард╣рд░реВрдХреЛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдбрд┐рд╕реНрдХрдорд╛ рд░рд╣реЗрдХреЛ рдлрд╛рдЗрд▓рд╕рдБрдЧ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ, рддрдкрд╛рдИрд▓реЗ рдореЗрдореЛрд░реАрдорд╛ рдмрд╛рдЗрдЯрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реЗрд░ рдлрд╛рдЗрд▓ I/O рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - рд╕рдмреИ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдиреЗрд▓рджреНрд╡рд╛рд░рд╛ рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рд╣реБрдиреЗрдЫрдиреНред
тАЛ
рддрд▓рдХреЛ рдЫрд╡рд┐рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛рдмреЗрд╕рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ LMDB рд▓реЗ рдЖрдлреНрдиреЛ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдХрд╕рд░реА рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред рдПрдЙрдЯреИ рдлрд╛рдЗрд▓рдорд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░реЗрд░, рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдкрдорд╛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдареЗрдЧрд╛рдирд╛ рд╕реНрдкреЗрд╕рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдмреНрд▓рдХрд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рд╕рдБрдЧ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди рдмрд╛рдзреНрдп рдЧрд░реНрдЫреМрдВ, рдЬрд╣рд╛рдБ LMDB рджреЗрдЦрд┐рдиреНрдЫред
тАЛ

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдПрдЙрдЯрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг nuance рдпреЛ рд╣реЛ рдХрд┐ LMDB, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рд▓реЗрдЦрди рдкреНрд░рдгрд╛рд▓реА рдХрд▓ рд╕рдВрдпрдиреНрддреНрд░ рдорд╛рд░реНрдлрдд рдбрд╛рдЯрд╛ рдлрд╛рдЗрд▓ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрджрдЫ, рд░ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдкрдвреНрди-рдорд╛рддреНрд░ рдореЛрдбрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫред рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рджреБрдИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЫрдиреНред

рдкрд╣рд┐рд▓реЛ рдкрд░рд┐рдгрд╛рдо рд╕рдмреИ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╣рд░реВрдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдЫред рдпрд╕рдХреЛ рд╕рд╛рд░ рдЧрд▓рдд рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдорд╛ рдЕрдирдЬрд╛рдирдорд╛ рдХреНрд╖рддрд┐ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдердкреНрдиреБ рд╣реЛред рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдпрд╕рдХреЛ рдареЗрдЧрд╛рдирд╛ рд╕реНрдкреЗрд╕рдХреЛ рдХреБрдиреИ рдкрдирд┐ рдард╛рдЙрдБрдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕реНрд╡рддрдиреНрддреНрд░ рдЫрдиреНред рдПрдХреИ рд╕рдордпрдорд╛, рд╣рд╛рдореАрд▓реЗ рднрд░реНрдЦрд░реИ рд╕рдореНрдЭреНрдпреМрдВ, рд░рд┐рдб-рд░рд╛рдЗрдЯ рдореЛрдбрдорд╛ рдлрд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБ рднрдиреЗрдХреЛ рдХреБрдиреИ рдкрдирд┐ рдирд┐рд░реНрджреЗрд╢рдирд▓реЗ рдпрд╕рд▓рд╛рдИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рдкрдирд┐ рд╕рдХреНрдЫред рдпрджрд┐ рдЙрдирд▓реЗ рдЧрд▓реНрддреАрд▓реЗ рдпреЛ рдЧрд░реНрдЫрд┐рдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдирднрдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдорд╛ рдПрд░реЗ рдПрд▓рд┐рдореЗрдиреНрдЯ рдЕрдзрд┐рд▓реЗрдЦрди рдЧрд░реНрди рдХреЛрд╢рд┐рд╕ рдЧрд░реНрджреИ, рддрдм рдЙрд╕рд▓реЗ рдЧрд▓реНрддрд┐рд▓реЗ рдпреЛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдлрд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдЫ, рдЬрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдирд┐рдореНрддреНрдпрд╛рдЙрдиреЗрдЫред рдпрджрд┐ рдлрд╛рдЗрд▓ рдкрдвреНрдиреЗ-рдорд╛рддреНрд░ рдореЛрдбрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ, рддреНрдпрд╕рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдареЗрдЧрд╛рдирд╛ рд╕реНрдерд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕рд▓реЗ рд╕рдВрдХреЗрддрдХреЛ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдордХреЛ рдЖрдкрддрдХрд╛рд▓реАрди рд╕рдорд╛рдкреНрддрд┐рдХреЛ рдиреЗрддреГрддреНрд╡ рдЧрд░реНрдиреЗрдЫред SIGSEGV, рд░ рдлрд╛рдЗрд▓ рдЕрдХреНрд╖реБрдгреНрдг рд░рд╣рдиреЗрдЫред

рджреЛрд╕реНрд░реЛ рдкрд░рд┐рдгрд╛рдо рдЖрдИрдУрдПрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫред рди рдд рд▓реЗрдЦрдХ рд╡рд╛ рдЕрдиреНрдп рдХреБрдиреИ рд╕реНрд░реЛрддрд╣рд░реВрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗрдХрд╛ рдЫрдиреН, рддрд░ рдпреЛ рдмрд┐рдирд╛ LMDB рдпрд╕ рдореЛрдмрд╛рдЗрд▓ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордорд╛ рдЪрд▓реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреЗрдЫреИрдиред рдЕрд░реНрдХреЛ рдЦрдгреНрдб рдпрд╕рдХреЛ рд╡рд┐рдЪрд╛рд░рдорд╛ рд╕рдорд░реНрдкрд┐рдд рдЫред

iOS рдорд╛ рдореЗрдореЛрд░реА рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛

2018 рдорд╛ WWDC рдорд╛ рдПрдХ рдЕрджреНрднреБрдд рд░рд┐рдкреЛрд░реНрдЯ рдерд┐рдпреЛ "iOS рдореЗрдореЛрд░реА рдЧрд╣рд┐рд░реЛ рдбрд╛рдЗрдн"ред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдмрддрд╛рдЙрдБрдЫ рдХрд┐ iOS рдорд╛, рднреМрддрд┐рдХ рдореЗрдореЛрд░реАрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╕рдмреИ рдкреГрд╖реНрдард╣рд░реВ 3 рдкреНрд░рдХрд╛рд░рдХрд╛ рд╣реБрдиреНрдЫрдиреН: рдлреЛрд╣реЛрд░, рд╕рдВрдХреБрдЪрд┐рдд рд░ рд╕рдлрд╛ред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рд╕рдлрд╛ рдореЗрдореЛрд░реА рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛ рдЬреБрди рднреМрддрд┐рдХ рдореЗрдореЛрд░реАрдмрд╛рдЯ рдкреАрдбрд╛рд░рд╣рд┐рдд рд░реВрдкрдорд╛ рдЕрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рддрд┐рдиреАрд╣рд░реВрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдбрд╛рдЯрд╛ рдпрд╕рдХреЛ рдореВрд▓ рд╕реНрд░реЛрддрд╣рд░реВрдмрд╛рдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдиреБрд╕рд╛рд░ рдкреБрди: рд▓реЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдкрдвреНрдиреЗ-рдорд╛рддреНрд░ рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдпрд╕ рд╢реНрд░реЗрдгреАрдорд╛ рдкрд░реНрдЫрдиреНред iOS рдХреБрдиреИ рдкрдирд┐ рд╕рдордпрдорд╛ рдореЗрдореЛрд░реАрдмрд╛рдЯ рдлрд╛рдЗрд▓рдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдкреГрд╖реНрдард╣рд░реВ рдЕрдирд▓реЛрдб рдЧрд░реНрди рдбрд░рд╛рдЙрдБрджреИрди, рдХрд┐рдирдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдбрд┐рд╕реНрдХрдорд╛ рд░рд╣реЗрдХреЛ рдлрд╛рдЗрд▓рд╕рдБрдЧ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рд╣реБрдиреЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЫрдиреНред
тАЛ
рд╕рдмреИ рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рдкреГрд╖реНрдард╣рд░реВ рдлреЛрд╣реЛрд░ рдореЗрдореЛрд░реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫрдиреН, рдЪрд╛рд╣реЗ рддрд┐рдиреАрд╣рд░реВ рдореВрд▓ рд░реВрдкрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдерд┐рдПред рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдорд╛ рд▓реЗрдЦреЗрд░ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░рд┐рдПрдХрд╛ рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рдпрд╕рд░реА рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░рд┐рдиреЗрдЫред рдЭрдгреНрдбрд╛ рд╕рд╣рд┐рдд LMDB рдЦреЛрд▓реНрджреИ MDB_WRITEMAP, рдпрд╕рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдкрдЫрд┐, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ

рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдзреЗрд░реИ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рд▓рд┐рди рдерд╛рд▓реНрдЫ, iOS рд▓реЗ рдпрд╕рд▓рд╛рдИ рдлреЛрд╣реЛрд░ рдкреГрд╖реНрда рдХрдореНрдкреНрд░реЗрд╕рдирдХреЛ рд╡рд┐рд╖рдп рдмрдирд╛рдЙрдБрдЫред рдлреЛрд╣реЛрд░ рд░ рд╕рдВрдХреБрдЪрд┐рдд рдкреГрд╖реНрдард╣рд░реВрд▓реЗ рдУрдЧрдЯреЗрдХреЛ рдХреБрд▓ рдореЗрдореЛрд░реАрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рддрдерд╛рдХрдерд┐рдд рдореЗрдореЛрд░реА рдлреБрдЯрдкреНрд░рд┐рдиреНрдЯ рдЧрдарди рдЧрд░реНрджрдЫред рдПрдХ рдкрдЯрдХ рдпреЛ рдирд┐рд╢реНрдЪрд┐рдд рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдорд╛рдирдорд╛ рдкреБрдЧреЗрдкрдЫрд┐, OOM рдХрд┐рд▓рд░ рдкреНрд░рдгрд╛рд▓реА рдбреЗрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрдЫрд┐ рдЖрдЙрдБрдЫ рд░ рдЬрдмрд░рдЬрд╕реНрддреА рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрджрдЫред рдпреЛ рдбреЗрд╕реНрдХрдЯрдк рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордХреЛ рддреБрд▓рдирд╛рдорд╛ iOS рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛред рдпрд╕рдХреЛ рд╡рд┐рдкрд░рд┐рдд, рднреМрддрд┐рдХ рдореЗрдореЛрд░реАрдмрд╛рдЯ рдбрд┐рд╕реНрдХрдорд╛ рдкреГрд╖реНрдард╣рд░реВ рдмрджрд▓реЗрд░ рдореЗрдореЛрд░реА рдлреБрдЯрдкреНрд░рд┐рдиреНрдЯ рдШрдЯрд╛рдЙрдиреЗ iOS рдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред рдХрд╛рд░рдгрд╣рд░реВ рдорд╛рддреНрд░ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╕рд╛рдпрдж рдкреГрд╖реНрдард╣рд░реВрд▓рд╛рдИ рдбрд┐рд╕реНрдХрдорд╛ рд░ рдкрдЫрд╛рдбрд┐ рд╕рд╛рд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдКрд░реНрдЬрд╛ рдЦрдкрдд рдЧрд░реНрдЫ, рд╡рд╛ рдЖрдИрдУрдПрд╕рд▓реЗ SSD рдбреНрд░рд╛рдЗрднрд╣рд░реВрдорд╛ рдкреБрди: рд▓реЗрдЦреНрдиреЗ рдХрдХреНрд╖рд╣рд░реВрдХреЛ рд╕реНрд░реЛрдд рдмрдЪрдд рдЧрд░реНрджрдЫ, рд╡рд╛ рд╣реБрдирд╕рдХреНрдЫ рдбрд┐рдЬрд╛рдЗрдирд░рд╣рд░реВ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рдирд╕рдБрдЧ рд╕рдиреНрддреБрд╖реНрдЯ рдерд┐рдПрдирдиреН, рдЬрд╣рд╛рдБ рд╕рдмреИ рдХреБрд░рд╛ рдЫред рд▓рдЧрд╛рддрд╛рд░ рдЕрджрд▓рд╛рдмрджрд▓реАред рдЬреЗ рд╣реЛрд╕реН, рддрдереНрдп рдпрдерд╛рд░реНрде рд░рд╣рд┐рд░рд╣рдиреНрдЫред

рд░рд╛рдореНрд░реЛ рд╕рдорд╛рдЪрд╛рд░, рдкрд╣рд┐рд▓реЗ рдиреИ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдпреЛ рд╣реЛ рдХрд┐ LMDB рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди mmap рд╕рдВрдпрдиреНрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдбрд╛рдЯрд╛ рдЖрдИрдУрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдХреНрд▓реАрди рдореЗрдореЛрд░реАрдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдореЗрдореЛрд░реА рдлреБрдЯрдкреНрд░рд┐рдиреНрдЯрдорд╛ рдпреЛрдЧрджрд╛рди рдЧрд░реНрджреИрдиред рддрдкрд╛рдИрдВрд▓реЗ VM Tracker рднрдирд┐рдиреЗ Xcode рдЙрдкрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрд▓рдХреЛ рд╕реНрдХреНрд░рд┐рдирд╕рдЯрд▓реЗ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ iOS рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдХреЛ рдЕрд╡рд╕реНрдерд╛ рджреЗрдЦрд╛рдЙрдБрдЫред рд╕реБрд░реБрдорд╛, 2 LMDB рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдпрд╕рдорд╛ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдкрд╣рд┐рд▓реЛрд▓рд╛рдИ рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдХреЛ 1GiB рдорд╛ рдЖрдлреНрдиреЛ рдлрд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдерд┐рдпреЛ, рджреЛрд╕реНрд░реЛ - 512MiBред рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж рджреБрдмреИ рднрдгреНрдбрд╛рд░рд╣рд░реВрд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛рдорд╛ рдирд┐рд╡рд╛рд╕реА рдореЗрдореЛрд░реА рдУрдЧрдЯреЗрдХрд╛ рдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреБрдиреИ рдкрдирд┐ рдлреЛрд╣реЛрд░ рдЖрдХрд╛рд░рдорд╛ рдпреЛрдЧрджрд╛рди рдЧрд░реНрджреИрдиред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рд░ рдЕрдм рдпреЛ рдЦрд░рд╛рдм рд╕рдорд╛рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреА рд╕рдордп рд╣реЛред 64-рдмрд┐рдЯ рдбреЗрд╕реНрдХрдЯрдк рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╣рд░реВрдорд╛ рд╕реНрд╡реИрдк рдореЗрдХрд╛рдирд┐рдЬрдордХреЛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ рдпрд╕рдХреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рд╕реНрд╡реИрдкрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдГрд╢реБрд▓реНрдХ рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕рдХреЛ рд░реВрдкрдорд╛ рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗ рднрд░реНрдЪреБрдЕрд▓ рдареЗрдЧрд╛рдирд╛ рдард╛рдЙрдБ рдУрдЧрдЯреНрди рд╕рдХреНрдЫред рдЖрдИрдУрдПрд╕рдорд╛ рдХрдореНрдкреНрд░реЗрд╕рдирдХреЛ рд╕рд╛рде рд╕реНрд╡реИрдк рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирд▓реЗ рдореМрд▓рд┐рдХ рд░реВрдкрдорд╛ рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рдЕрдзрд┐рдХрддрдо рдШрдЯрд╛рдЙрдБрдЫред рдЕрдм рд╕рдмреИ рдЬреАрд╡рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдореБрдЦреНрдп (рд░реЗрдо рдкрдвреНрдиреБрд╣реЛрд╕реН) рдореЗрдореЛрд░реАрдорд╛ рдлрд┐рдЯ рд╣реБрдиреБрдкрд░реНрдЫ, рд░ рд╕рдмреИ рдлрд┐рдЯ рдирд╣реБрдиреЗрд╣рд░реВрд▓рд╛рдИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рдмрд╛рдзреНрдп рд╣реБрдиреБрдкрд░реНрдЫред рдпреЛ рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд░реВрдкрдорд╛ рднрдирд┐рдПрдХреЛ рдЫ рд░рд┐рдкреЛрд░реНрдЯ, рд░ рдорд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, iOS рд▓реЗ mmap рдорд╛рд░реНрдлрдд рд╡рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реАрдХреЛ рдорд╛рддреНрд░рд╛рд▓рд╛рдИ рдЧрдореНрднреАрд░ рд░реВрдкрдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрджрдЫред рдпрд╣рд╛рдБ рдпрд╣рд╛рдБ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдкреНрд░рдгрд╛рд▓реА рдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд┐рднрд┐рдиреНрди рдпрдиреНрддреНрд░рд╣рд░реВрдорд╛ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рдореЗрдореЛрд░реАрдХреЛ рдорд╛рддреНрд░рд╛рдХреЛ рдЕрдиреБрднрд╡рдЬрдиреНрдп рд╕реАрдорд╛рд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╕рдмреИрднрдиреНрджрд╛ рдЖрдзреБрдирд┐рдХ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛, рдЖрдИрдУрдПрд╕ 2 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдЙрджрд╛рд░ рднрдПрдХреЛ рдЫ, рд░ рдЖрдИрдкреНрдпрд╛рдбрдХреЛ рд╢реАрд░реНрд╖ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛ - 4 рджреНрд╡рд╛рд░рд╛ред рдЕрднреНрдпрд╛рд╕рдорд╛, рдЕрд╡рд╢реНрдп рдкрдирд┐, рддрдкрд╛рдИрдВрд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рдХрдо рд╕рдорд░реНрдерд┐рдд рдЙрдкрдХрд░рдг рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬрд╣рд╛рдБ рд╕рдмреИ рдХреБрд░рд╛ рдзреЗрд░реИ рджреБрдГрдЦреА рдЫред рдЕрдЭ рдирд░рд╛рдореНрд░реЛ рдХреБрд░рд╛, VM рдЯреНрд░рдпрд╛рдХрд░рдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рдореЗрдореЛрд░реА рдЕрд╡рд╕реНрдерд╛ рд╣реЗрд░реЗрд░, рддрдкрд╛рдИрдВрд▓реЗ LMDB рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рднрдПрдХреЛ рджрд╛рдмреА рдЧрд░реНрдиреЗ рдПрдХ рдорд╛рддреНрд░рдмрд╛рдЯ рдЯрд╛рдврд╛ рдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛ рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫред рдкреНрд░рдгрд╛рд▓реА рдЖрд╡рдВрдЯрдХрд╣рд░реВ, рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓рд╣рд░реВ, рдЫрд╡рд┐ рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВ, рд░ рдЕрдиреНрдп рд╕рд╛рдирд╛ рд╕рд┐рдХрд╛рд░реАрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд░рд╛рдореНрд░реЛ рднрд╛рдЧрд╣рд░реВ рдЦрд╛рдЗрдиреНрдЫред

рдХреНрд▓рд╛рдЙрдбрдорд╛ рдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдирддрд┐рдЬрд╛рдХреЛ рдЖрдзрд╛рд░рдорд╛, рд╣рд╛рдореА LMDB рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реАрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдореНрди рд╕рдореНрдЭреМрддрд╛ рдорд╛рдирд╣рд░реВрдорд╛ рдЖрдПрдХрд╛ рдЫреМрдВ: 384-рдмрд┐рдЯ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ 32 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд░ 768-рдмрд┐рдЯ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ 64ред рдпреЛ рднреЛрд▓реНрдпреБрдо рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рдХреБрдиреИ рдкрдирд┐ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдХрд╛рд░реНрдпрд╣рд░реВ рдХреЛрдбрд╕рдБрдЧ рд╕рдорд╛рдкреНрдд рд╣реБрди рд╕реБрд░реБ рд╣реБрдиреНрдЫ MDB_MAP_FULLред рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдЧрдордирдорд╛ рддреНрдпрд╕реНрддрд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рджреЗрдЦреНрдЫреМрдВ, рддрд░ рддрд┐рдиреАрд╣рд░реВ рдпрддрд┐ рд╕рд╛рдиреЛ рдЫрдиреН рдХрд┐ рдпрд╕ рдЪрд░рдгрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рднрдгреНрдбрд╛рд░рдг рджреНрд╡рд╛рд░рд╛ рдЕрддреНрдпрдзрд┐рдХ рдореЗрдореЛрд░реА рдЦрдкрддрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рд▓рд╛рдореЛ рд╕рдордпрд╕рдореНрдо рдЪрд▓реНрдиреЗ рд▓реЗрдирджреЗрди рд╣реБрди рд╕рдХреНрдЫред рдпреА рджреБрдИ рдШрдЯрдирд╛рд╣рд░реВ рдХрд╕рд░реА рдЬреЛрдбрд┐рдПрдХрд╛ рдЫрдиреН рднрдиреЗрд░ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓рд╛рдИ LMDB рдХреЛ рдмрд╛рдБрдХреА рджреБрдИ рд╕реНрддрдореНрднрд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реЗрд░ рдорджреНрджрдд рдЧрд░рд┐рдиреЗрдЫред

рей.реиред рд╣реНрд╡реЗрд▓ #3.2ред B+-рд░реВрдЦ

рдХреБрдЮреНрдЬреА-рдорд╛рди рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдЕрдиреБрдХрд░рдг рдЧрд░реНрди, рдирд┐рдореНрди рдХрд╛рд░реНрдпрд╣рд░реВ рдпрд╕рдХреЛ API рдорд╛ рдЙрдкрд╕реНрдерд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ:

  1. рдирдпрд╛рдБ рддрддреНрд╡ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрджреИред
  2. рджрд┐рдЗрдПрдХреЛ рдХреБрдЮреНрдЬреАрдХреЛ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЦреЛрдЬреНрдиреБрд╣реЛрд╕реНред
  3. рддрддреНрд╡ рд╣рдЯрд╛рдЙрдБрджреИред
  4. рдХреБрдЮреНрдЬреАрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░рд┐рдПрдХреЛ рдХреНрд░рдордорд╛ рдЕрдиреНрддрд░рд╛рд▓рд╣рд░реВрдорд╛ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реНред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреАрд╕рдмреИ рдЪрд╛рд░ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдЬрд┐рд▓реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХреНрдиреЗ рд╕рд░рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рд░реВрдЦ рд╣реЛред рдпрд╕рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбреНрд╕рд▓реЗ рдПрдЙрдЯрд╛ рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдЪрд╛рдЗрд▓реНрдб рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рд╕рдореНрдкреВрд░реНрдг рдЙрдкрд╕реЗрдЯрд▓рд╛рдИ рджреБрдИ рдЙрдкрд░реВрдЦрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрджрдЫред рдмрд╛рдпрд╛рдБрдорд╛ рдЖрдорд╛рдмрд╛рдмреБ рднрдиреНрджрд╛ рд╕рд╛рдирд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН, рд░ рджрд╛рдпрд╛рдБрдорд╛ рдареВрд▓рд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреНред рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХреЛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреНрд░реА рдЯреНрд░реНрдпрд╛рднрд░реНрд╕рд▓рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдорд╛рд░реНрдлрдд рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫ

рдмрд╛рдЗрдирд░реА рд░реВрдЦрд╣рд░реВрдорд╛ рджреБрдИрд╡рдЯрд╛ рдЖрдзрд╛рд░рднреВрдд рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдбрд┐рд╕реНрдХ-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд╣реБрдирдмрд╛рдЯ рд░реЛрдХреНрдЫред рдкрд╣рд┐рд▓реЛ, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдиреНрддреБрд▓рдирдХреЛ рдбрд┐рдЧреНрд░реА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЫред рддреНрдпрд╣рд╛рдБ рд░реВрдЦрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдкрд░реНрдпрд╛рдкреНрдд рдЬреЛрдЦрд┐рдо рдЫ рдЬрд╕рдорд╛ рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рд╣рд░реВрдХреЛ рдЙрдЪрд╛рдЗрд╣рд░реВ рдзреЗрд░реИ рдлрд░рдХ рд╣реБрди рд╕рдХреНрдЫ, рдЬрд╕рд▓реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдЦреЛрдЬрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдЦреЛрдЬрдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рдЬрдЯрд┐рд▓рддрд╛рд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдмрд┐рдЧреНрд░рдиреНрдЫред рджреЛрд╕реНрд░реЛ, рдиреЛрдбрд╣рд░реВ рдмреАрдЪрдХреЛ рдХреНрд░рд╕-рд▓рд┐рдЩреНрдХрд╣рд░реВрдХреЛ рдкреНрд░рдЪреБрд░рддрд╛рд▓реЗ рдореЗрдореЛрд░реАрдорд╛ рд╕реНрдерд╛рдиреАрдпрддрд╛рдХреЛ рдмрд╛рдЗрдирд░реА рд░реВрдЦрд╣рд░реВрд▓рд╛рдИ рд╡рдЮреНрдЪрд┐рдд рдЧрд░реНрджрдЫред рдиреЛрдбрд╣рд░реВ рдмрдиреНрдж (рддрд┐рдиреАрд╣рд░реВ рдмреАрдЪрдХреЛ рдЬрдбрд╛рдирдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛) рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдорд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдлрд░рдХ рдкреГрд╖реНрдард╣рд░реВрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрди рд╕рдХреНрдЫред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд░реВрдЦрдорд╛ рдзреЗрд░реИ рдЫрд┐рдореЗрдХреА рдиреЛрдбрд╣рд░реВрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреНрд░рд╛рднрд░реНрд╕рд▓ рдкрдирд┐ рдкреГрд╖реНрдард╣рд░реВрдХреЛ рддреБрд▓рдирд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рднреНрд░рдордг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрди рд╕рдХреНрдЫред рд╣рд╛рдореАрд▓реЗ рдЗрди-рдореЗрдореЛрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд░реВрдкрдорд╛ рдмрд╛рдЗрдирд░реА рд░реВрдЦрд╣рд░реВрдХреЛ рдкреНрд░рднрд╛рд╡рдХрд╛рд░рд┐рддрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрджрд╛ рдкрдирд┐ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛ, рдХрд┐рдирдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреНрдпрд╛рд╕рдорд╛ рд▓рдЧрд╛рддрд╛рд░ рдкреГрд╖реНрдард╣рд░реВ рдШреБрдорд╛рдЙрдиреБ рд╕рд╕реНрддреЛ рдЦреБрд╢реА рд╣реЛрдЗрдиред рдЬрдм рдпреЛ рдкреНрд░рд╛рдп: рдбрд┐рд╕реНрдХрдмрд╛рдЯ рдиреЛрдбрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреГрд╖реНрдард╣рд░реВ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдХреБрд░рд╛ рдЖрдЙрдБрдЫ, рд╕реНрдерд┐рддрд┐ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╣реБрдиреНрдЫ рдирд┐рдиреНрджрдиреАрдпред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреАрдмреА-рдЯреНрд░реАрд╣рд░реВ, рдмрд╛рдЗрдирд░реА рд░реВрдЦрд╣рд░реВрдХреЛ рд╡рд┐рдХрд╛рд╕рдХреЛ рд░реВрдкрдорд╛, рдЕрдШрд┐рд▓реНрд▓реЛ рдЕрдиреБрдЪреНрдЫреЗрджрдорд╛ рдкрд╣рд┐рдЪрд╛рди рдЧрд░рд┐рдПрдХрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкрд╣рд┐рд▓реЛ, рддрд┐рдиреАрд╣рд░реВ рдЖрддреНрдо-рд╕рдВрддреБрд▓рд┐рдд рдЫрдиреНред рджреЛрд╕реНрд░реЛ, рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрд▓реЗ рдЪрд╛рдЗрд▓реНрдб рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рд╕реЗрдЯрд▓рд╛рдИ 2 рдорд╛ рд╣реЛрдЗрди, рддрд░ M рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХрд╛ рд╕рдмрд╕реЗрдЯрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрджрдЫ, рд░ рд╕рдВрдЦреНрдпрд╛ M рдзреЗрд░реИ рдареВрд▓реЛ рд╣реБрди рд╕рдХреНрдЫ, рдзреЗрд░реИ рд╕рдп рд╡рд╛ рд╣рдЬрд╛рд░реМрдВрдХреЛ рдХреНрд░рдордорд╛ред

рдпрд╕рд░реА:

  1. рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд░ рд░реВрдЦрд╣рд░реВ рдзреЗрд░реИ рдЫреЛрдЯреЛ рдЫрдиреНред
  2. рд░реВрдЦрд▓реЗ рдореЗрдореЛрд░реАрдорд╛ рд╕реНрдерд╛рдирдХреЛ рд╕реНрдерд╛рдиреАрдпрддрд╛рдХреЛ рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рдХрд┐рдирдХрд┐ рдореВрд▓реНрдпрдорд╛ рдирдЬрд┐рдХ рднрдПрдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ рд╕рдорд╛рди рд╡рд╛ рдЫрд┐рдореЗрдХреА рдиреЛрдбрд╣рд░реВрдорд╛ рдПрдХрдЕрд░реНрдХрд╛рдХреЛ рдЫреЗрдЙрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреНрдЫрдиреНред
  3. рдЦреЛрдЬреА рдХрд╛рд░реНрдпрдХреЛ рдХреНрд░рдордорд╛ рд░реВрдЦ рдУрд░реНрд▓рдБрджрд╛ рдЯреНрд░рд╛рдиреНрдЬрд┐рдЯ рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдШрдЯрд╛рдЗрдПрдХреЛ рдЫред
  4. рджрд╛рдпрд░рд╛ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд╕рдордпрдорд╛ рдкрдвреНрдиреЗ рд▓рдХреНрд╖реНрдп рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдШрдЯрд╛рдЗрдПрдХреЛ рдЫ, рдХрд┐рдирдХрд┐ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

LMDB рд▓реЗ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди B+ рдЯреНрд░реА рднрдирд┐рдиреЗ B-рдЯреНрд░реАрдХреЛ рднрд┐рдиреНрдирддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдорд╛рдерд┐рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рд▓реЗ рдпрд╕рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рддреАрди рдкреНрд░рдХрд╛рд░рдХрд╛ рдиреЛрдбрд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрдЫ:

  1. рд╢реАрд░реНрд╖рдорд╛ рдЬрд░рд╛ рдЫред рдпрд╕рд▓реЗ рдЧреЛрджрд╛рдо рднрд┐рддреНрд░рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдмрд╛рд╣реЗрдХ рдЕрд░реВ рдХреЗрд╣рд┐ рдЧрд░реНрджреИрдиред рдПрдХ LMDB рдЙрджрд╛рд╣рд░рдг рднрд┐рддреНрд░, рддрдкрд╛рдИрд▓реЗ рдзреЗрд░реИ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдареЗрдЧрд╛рдирд╛ рд╕реНрдерд╛рди рд╕рд╛рдЭрд╛ рдЧрд░реНрджрдЫред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдлреНрдиреИ рдЬрд░рд╛рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫред
  2. рддрд▓реНрд▓реЛ рддрд╣рдорд╛ рдкрд╛рддрд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВ рд░ рдХреЗрд╡рд▓ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдЦреИрд░, рдпреЛ B+-рд░реВрдЦрд╣рд░реВрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛред рдпрджрд┐ рдирд┐рдпрдорд┐рдд B-рдЯреНрд░реАрд▓реЗ рд╕рдмреИ рддрд╣рдХрд╛ рдиреЛрдбрд╣рд░реВрдорд╛ рдореВрд▓реНрдпрдХрд╛ рднрд╛рдЧрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдЫ рднрдиреЗ, B+ рднрд┐рдиреНрдирддрд╛ рд╕рдмреИрднрдиреНрджрд╛ рдХрдо рдорд╛рддреНрд░ рд╣реБрдиреНрдЫред рдпрд╕ рддрдереНрдпрд▓рд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореА LMDB рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд░реВрдЦрдХреЛ рдЙрдкрдкреНрд░рдХрд╛рд░рд▓рд╛рдИ рдХреЗрд╡рд▓ рдПрдХ B-рдЯреНрд░реА рднрдиреНрдиреЗрдЫреМрдВред
  3. рдЬрд░рд╛ рд░ рдкрд╛рддрд╣рд░реВ рдмреАрдЪ рдиреЗрднрд┐рдЧреЗрд╕рдирд▓ (рд╢рд╛рдЦрд╛) рдиреЛрдбрд╣рд░реВрд╕рдБрдЧ реж рд╡рд╛ рдмрдвреА рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕реНрддрд░рд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдп рдкрд╛рддрд╣рд░реВ рдмреАрдЪ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдХреНрд░рдордмрджреНрдз рд╕реЗрдЯ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рд╣реЛред

рднреМрддрд┐рдХ рд░реВрдкрдорд╛, рдиреЛрдбрд╣рд░реВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓рдореНрдмрд╛рдЗрдХреЛ рдореЗрдореЛрд░реАрдХреЛ рдмреНрд▓рдХрд╣рд░реВ рд╣реБрдиреНред рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рд╛рдЗрдЬ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордорд╛ рдореЗрдореЛрд░реА рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд╕рд╛рдЗрдЬрдХреЛ рдзреЗрд░реИ рд╣реЛ, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдЫрд▓рдлрд▓ рдЧрд░реНрдпреМрдВред рдиреЛрдб рд╕рдВрд░рдЪрдирд╛ рддрд▓ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫред рд╣реЗрдбрд░рд▓реЗ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдЬрд╕рдордзреНрдпреЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдЪреЗрдХрд╕рдо рд╣реЛред рдЕрд░реНрдХреЛ рдЕрдлрд╕реЗрдЯрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдЖрдЙрдБрдЫ рдЬрд╕рдорд╛ рдбрд╛рдЯрд╛ рднрдПрдХрд╛ рдХрдХреНрд╖рд╣рд░реВ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред рдпрджрд┐ рд╣рд╛рдореА рдиреЗрднрд┐рдЧреЗрд╕рди рдиреЛрдбрд╣рд░реВ, рд╡рд╛ рдкрд╛рддрд╣рд░реВрдХреЛ рдорд╛рдорд▓рд╛рдорд╛ рд╕рдореНрдкреВрд░реНрдг рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрджреИрдЫреМрдВ рднрдиреЗ рдбреЗрдЯрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫред рддрдкрд╛рдИрдВ рдХрд╛рд░реНрдпрдорд╛ рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред "рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреБрдЮреНрдЬреА-рдореВрд▓реНрдп рд╕реНрдЯреЛрд░рд╣рд░реВрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди".

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдкреГрд╖реНрда рдиреЛрдбрд╣рд░реВрдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реАрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореА рдирд┐рдореНрди рдлрд╛рд░рдордорд╛ LMDB B-tree рд▓рд╛рдИ рд╕рд░рд▓ рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрдиреЗрдЫреМрдВред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдиреЛрдбрд╣рд░реВ рднрдПрдХрд╛ рдкреГрд╖реНрдард╣рд░реВ рдХреНрд░рдорд┐рдХ рд░реВрдкрдорд╛ рдбрд┐рд╕реНрдХрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред рдЙрдЪреНрдЪ рдЕрдВрдХрд┐рдд рдкреГрд╖реНрдард╣рд░реВ рдлрд╛рдЗрд▓рдХреЛ рдЕрдиреНрддреНрдпрддрд┐рд░ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред рддрдерд╛рдХрдерд┐рдд рдореЗрдЯрд╛ рдкреГрд╖реНрдард▓реЗ рдЕрдлрд╕реЗрдЯрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬрд╕рджреНрд╡рд╛рд░рд╛ рд╕рдмреИ рд░реВрдЦрд╣рд░реВрдХреЛ рдЬрд░рд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рдлрд╛рдЗрд▓ рдЦреЛрд▓реНрджрд╛, LMDB рд▓реЗ рд╡реИрдз рдореЗрдЯрд╛ рдкреГрд╖реНрдардХреЛ рдЦреЛрдЬреАрдорд╛ рдлрд╛рдЗрд▓ рдкреГрд╖реНрдард▓рд╛рдИ рдкреГрд╖реНрдардХреЛ рдЕрдиреНрддреНрдпрджреЗрдЦрд┐ рд╕реБрд░реБрд╕рдореНрдо рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрдЫ рд░ рдпрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рдЕрд╡рд╕реНрдерд┐рдд рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдЕрдм, рддрдереНрдпрд╛рдЩреНрдХ рд╕рдВрдЧрдардирдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд░ рднреМрддрд┐рдХ рд╕рдВрд░рдЪрдирд╛рдХреЛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд▓рд┐рдПрд░, рд╣рд╛рдореА LMDB рдХреЛ рддреЗрд╕реНрд░реЛ рд╕реНрддрдореНрднрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рдЕрдЧрд╛рдбрд┐ рдмрдвреНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рдпрд╕рдХреЛ рдорджреНрджрддрд▓реЗ рд╕рдмреИ рднрдгреНрдбрд╛рд░рдг рдкрд░рд┐рдорд╛рд░реНрдЬрдирд╣рд░реВ рд▓реЗрдирджреЗрди рд░ рдПрдХрдЕрд░реНрдХрд╛рдмрд╛рдЯ рдЕрд▓рдЧрд╛рд╡рдорд╛ рд╣реБрдиреНрдЫрдиреН, рдбрд╛рдЯрд╛рдмреЗрд╕рд▓рд╛рдИ рд╕рдордЧреНрд░ рд░реВрдкрдорд╛ рдмрд╣реБрд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рдореНрдкрддреНрддрд┐ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИред

рей.рейред рд╣реНрд╡реЗрд▓ #3.3ред рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдЕрди-рд▓реЗрдЦрди

рдХреЗрд╣реА рдмреА-рдЯреНрд░реА рдЕрдкрд░реЗрд╕рдирд╣рд░реВрд▓реЗ рдпрд╕рдХреЛ рдиреЛрдбрд╣рд░реВрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдПрдЙрдЯрд╛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдиреЛрдбрдорд╛ рдирдпрд╛рдБ рдХреБрдЮреНрдЬреА рдердкрд┐рд░рд╣реЗрдХреЛ рдЫ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдиреИ рдпрд╕рдХреЛ рдЕрдзрд┐рдХрддрдо рдХреНрд╖рдорддрд╛рдорд╛ рдкреБрдЧреЗрдХреЛ рдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫ, рдкрд╣рд┐рд▓реЛ, рдиреЛрдбрд▓рд╛рдИ рджреБрдИ рднрд╛рдЧрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди, рд░ рджреЛрд╕реНрд░реЛ, рдпрд╕рдХреЛ рдЕрднрд┐рднрд╛рд╡рдХрдорд╛ рдирдпрд╛рдБ рдмрдбрд┐рдЩ рдЪрд╛рдЗрд▓реНрдб рдиреЛрдбрдорд╛ рд▓рд┐рдЩреНрдХ рдердкреНрдиред рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореНрднрд╡рддрдГ рдзреЗрд░реИ рдЦрддрд░рдирд╛рдХ рдЫред рдпрджрд┐ рдХреБрдиреИ рдХрд╛рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ (рджреБрд░реНрдШрдЯрдирд╛, рдкрд╛рд╡рд░ рдЖрдЙрдЯреЗрдЬ, рдЗрддреНрдпрд╛рджрд┐) рд╢реГрдЩреНрдЦрд▓рд╛рдмрд╛рдЯ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдорд╛рддреНрд░ рднрд╛рдЧ рд╣реБрдиреНрдЫ, рддрдм рд░реВрдЦ рдЕрд╕рдВрдЧрдд рдЕрд╡рд╕реНрдерд╛рдорд╛ рд░рд╣рдиреЗрдЫред

рдбрд╛рдЯрд╛рдмреЗрд╕ рдЧрд▓реНрддреА-рд╕рд╣рд┐рд╖реНрдгреБ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╕рдорд╛рдзрд╛рди рдмреА-рдЯреНрд░реАрдХреЛ рдЫреЗрдЙрдорд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрди-рдбрд┐рд╕реНрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдердкреНрдиреБ рд╣реЛ - рдПрдХ рд▓реЗрдирджреЗрди рд▓рдЧ, рдЬрд╕рд▓рд╛рдИ рд▓реЗрдЦрди-рдЕрдЧрд╛рдбрд┐ рд▓рдЧ (WAL) рдкрдирд┐ рднрдирд┐рдиреНрдЫред рдпреЛ рдПрдЙрдЯрд╛ рдлрд╛рдИрд▓ рд╣реЛ рдЬрд╕рдХреЛ рдЕрдиреНрддреНрдпрдорд╛ B-tree рд▓рд╛рдИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрдиреБ рдЕрдШрд┐ рдЕрднрд┐рдкреНрд░реЗрдд рдХрд╛рд░реНрдп рдХрдбрд╛рдИрдХрд╛ рд╕рд╛рде рд▓реЗрдЦрд┐рдПрдХреЛ рд╣реБрдиреНрдЫред рдпрд╕реИрд▓реЗ, рдпрджрд┐ рдбреЗрдЯрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдЖрддреНрдо-рдирд┐рджрд╛рдирдХреЛ рд╕рдордпрдорд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЗрдпреЛ рднрдиреЗ, рдбрд╛рдЯрд╛рдмреЗрд╕рд▓реЗ рдЖрдлреИрд▓рд╛рдИ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рд▓рдЧрд▓рд╛рдИ рдкрд░рд╛рдорд░реНрд╢ рдЧрд░реНрдЫред

LMDB рд▓реЗ рдпрд╕рдХреЛ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╕рдВрдпрдиреНрддреНрд░рдХреЛ рд░реВрдкрдорд╛ рдПрдЙрдЯрд╛ рдлрд░рдХ рд╡рд┐рдзрд┐ рд░реЛрдЬреЗрдХреЛ рдЫ, рдЬрд╕рд▓рд╛рдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдЕрди-рд░рд╛рдЗрдЯ рднрдирд┐рдиреНрдЫред рдпрд╕рдХреЛ рд╕рд╛рд░ рдпреЛ рд╣реЛ рдХрд┐ рдЕрд╡рд╕реНрдерд┐рдд рдкреГрд╖реНрдардорд╛ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рдпрд╕рд▓реЗ рдкрд╣рд┐рд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрджрдЫ рд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рдорд╛ рд╕рдмреИ рдкрд░рд┐рдорд╛рд░реНрдЬрдирд╣рд░реВ рдЧрд░реНрджрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдЕрд░реНрдХреЛ, рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рдиреЛрдбрдХреЛ рд▓рд┐рдЩреНрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬреБрди рдпрд╕рдХреЛ рдЕрднрд┐рднрд╛рд╡рдХ рдиреЛрдбрдорд╛ рд╣рд╛рд▓рдХреЛ рднрдПрдХреЛ рдЫред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рднрдПрдХрд╛рд▓реЗ рддреНрдпрд╕рдХреЛ рдирдХреНрдХрд▓ рдкрдирд┐ рдкрд╣рд┐рд▓реНрдпреИ рдЧрд░реНрдиреБрдкрд░реНрдЫ ред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд░рд╛ рд╕рдореНрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬрд╛рд░реА рд░рд╣рдиреНрдЫред рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреНрддрд┐рдо рдХреБрд░рд╛ рдореЗрдЯрд╛ рдкреГрд╖реНрдардорд╛ рдбрд╛рдЯрд╛ рд╣реЛ

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

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

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдирддрд┐рдЬрд╛ рдбрд┐рдЬрд╛рдЗрди, append-only B-tree рднрдирд┐рдиреНрдЫ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ рд▓реЗрдирджреЗрди рдЕрд▓рдЧрд╛рд╡ рд░ рдмрд╣реБ-рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред LMDB рдорд╛, рдкреНрд░рддреНрдпреЗрдХ рдЦреБрд▓рд╛ рд▓реЗрдирджреЗрди рд╣рд╛рд▓рдХреЛ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рд░реВрдЦ рд░реВрдЯрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫред рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рдирднрдПрд╕рдореНрдо, рдпрд╕рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд░реВрдЦрдХрд╛ рдкреГрд╖реНрдард╣рд░реВ рдбреЗрдЯрд╛рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХрд╣рд┐рд▓реНрдпреИ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛ рдкреБрди: рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдЫреИрдиред рдпрд╕рд░реА, рддрдкрд╛рдИрдВрд▓реЗ рддреНрдпрддрд┐рдмреЗрд▓рд╛ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдбреЗрдЯрд╛рдХреЛ рд╕реЗрдЯрд╕рдБрдЧ рдЖрдлреВрд▓реЗ рдЪрд╛рд╣реЗрдХреЛ рд▓рд╛рдореЛ рд╕рдордпрд╕рдореНрдо рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╕ рд╕рдордпрдорд╛ рднрдгреНрдбрд╛рд░рдг рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╣реБрди рдЬрд╛рд░реА рд░рд╛рдЦреЗ рдкрдирд┐ рдХрд╛рд░реЛрдмрд╛рд░ рдЦреЛрд▓рд┐рдПрдХреЛ рдерд┐рдпреЛред рдпреЛ рдмрд╣реБрд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рд░ рд╣реЛ, LMDB рд▓рд╛рдИ рд╣рд╛рдореНрд░рд╛ рдкреНрд░рд┐рдпрдЬрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЖрджрд░реНрд╢ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдмрдирд╛рдЙрдБрджреИ UICollectionViewред рд▓реЗрдирджреЗрди рдЦреЛрд▓рд┐рд╕рдХреЗрдкрдЫрд┐, рдХреЗрд╣рд┐ рдкрдирд┐ рдмрд╛рдБрдХреА рдирд╣реЛрд╕реН рднрдиреНрдиреЗ рдбрд░рд▓реЗ рд╣рддрд╛рд░рдорд╛ рд╣рд╛рд▓рдХреЛ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдХреЗрд╣реА рдЗрди-рдореЗрдореЛрд░реА рд╕рдВрд░рдЪрдирд╛рдорд╛ рдкрдореНрдк рдЧрд░реЗрд░ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рдореЗрдореЛрд░реА рдлреБрдЯрдкреНрд░рд┐рдиреНрдЯ рдмрдврд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рдпреЛ рд╕реБрд╡рд┐рдзрд╛рд▓реЗ LMDB рд▓рд╛рдИ рд╕рдорд╛рди SQLite рдмрд╛рдЯ рдЕрд▓рдЧ рдЧрд░реНрдЫ, рдЬрд╕рд▓реЗ рдпрд╕реНрддреЛ рдХреБрд▓ рдЕрд▓рдЧрд╛рд╡рдХреЛ рдШрдордгреНрдб рдЧрд░реНрди рд╕рдХреНрджреИрдиред рдкрдЫрд┐рд▓реНрд▓реЛрдорд╛ рджреБрдИрд╡рдЯрд╛ рдХрд╛рд░реЛрдмрд╛рд░ рдЦреЛрд▓реЗрд░ рддреА рдордзреНрдпреЗ рдПрдЙрдЯрд╛ рднрд┐рддреНрд░рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдЕрднрд┐рд▓реЗрдЦ рдореЗрдЯрд╛рдПрдкрдЫрд┐, рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рджреЛрд╕реНрд░реЛрдорд╛ рд╕реЛрд╣реА рдЕрднрд┐рд▓реЗрдЦ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдореНрднрд╡ рд╣реБрдиреЗ рдЫреИрдиред

рд╕рд┐рдХреНрдХрд╛рдХреЛ рдлреНрд▓рд┐рдк рд╕рд╛рдЗрдб рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдХреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рд░реВрдкрдорд╛ рдЙрдЪреНрдЪ рдЦрдкрдд рд╣реЛред рдпреЛ рд╕реНрд▓рд╛рдЗрдбрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд╣реЗрд░реЗрд░ рей рдУрдкрди рд░рд┐рдб рдЯреНрд░рд╛рдиреНрдЬреЗрдХреНрд╢рдирд╣рд░реВрд╕рдБрдЧреИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░рд┐рдПрдорд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред LMDB рд▓реЗ рд╣рд╛рд▓рдХреЛ рд▓реЗрдирджреЗрдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЬрд░рд╛рд╣рд░реВрдмрд╛рдЯ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдиреЛрдбрд╣рд░реВ рдкреБрди: рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдирд╕рдХреНрдиреЗ рд╣реБрдирд╛рд▓реЗ, рд╕реНрдЯреЛрд░рд╕рдБрдЧ рдореЗрдореЛрд░реАрдорд╛ рдЕрд░реНрдХреЛ рдЪреМрдереЛ рд░реВрдЯ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдиреБ рд░ рдпрд╕ рдЕрдиреНрддрд░реНрдЧрдд рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рдкреГрд╖реНрдард╣рд░реВрд▓рд╛рдИ рдлреЗрд░рд┐ рдХреНрд▓реЛрди рдЧрд░реНрдиреБ рдмрд╛рд╣реЗрдХ рдЕрд░реНрдХреЛ рд╡рд┐рдХрд▓реНрдк рдЫреИрдиред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдпрд╣рд╛рдБ рдпреЛ рдореЗрдореЛрд░реА-рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдЦрдгреНрдб рд╕рдореНрдЭрди рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реАрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЦрдкрддрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдзреЗрд░реИ рдЪрд┐рдиреНрддрд╛ рдЧрд░реНрдиреБрдкрд░реНрджреИрди, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдореЗрдореЛрд░реА рдлреБрдЯрдкреНрд░рд┐рдиреНрдЯрдорд╛ рдпреЛрдЧрджрд╛рди рдЧрд░реНрджреИрдиред рдпрджреНрдпрдкрд┐, рдПрдХреИ рд╕рдордпрдорд╛, рдпреЛ рдиреЛрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рдХрд┐ рдЖрдИрдУрдПрд╕ рдпрд╕рд▓рд╛рдИ рдмрд╛рдБрдбрдлрд╛рдБрдб рдЧрд░реНрди рдзреЗрд░реИ рдХрдВрдЬреВрд╕ рдЫ, рд░ рд╣рд╛рдореА рд╕рд░реНрднрд░ рд╡рд╛ рдбреЗрд╕реНрдХрдЯрдкрдорд╛ рдЬрд╕реНрддреИ, 1 рдЯреЗрд░рд╛рдмрд╛рдЗрдЯрдХреЛ LMDB рдХреНрд╖реЗрддреНрд░ рдкреНрд░рджрд╛рди рдЧрд░реНрди рд╕рдХреНрджреИрдиреМрдВ рд░ рдпреЛ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪреНрджреИрдиреМрдВред рдпрджрд┐ рд╕рдореНрднрд╡ рдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рд▓реЗрдирджреЗрдирдХреЛ рдЬреАрд╡рдирдХрд╛рд▓ рд╕рдХреЗрд╕рдореНрдо рдЫреЛрдЯреЛ рдмрдирд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫред

4. рдХреБрдЮреНрдЬреА-рдорд╛рди API рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдбреЗрдЯрд╛ рд╕реНрдХрд┐рдорд╛ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрджреИ

LMDB рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЖрдзрд╛рд░рднреВрдд рдПрдмреНрд╕реНрдЯреНрд░реНрдпрд╛рдХреНрд╕рдирд╣рд░реВ рд╣реЗрд░реЗрд░ рд╣рд╛рдореНрд░реЛ API рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд░реБ рдЧрд░реМрдВ: рд╡рд╛рддрд╛рд╡рд░рдг рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ, рдХреБрдЮреНрдЬреАрд╣рд░реВ рд░ рдорд╛рдирд╣рд░реВ, рд▓реЗрдирджреЗрдирд╣рд░реВ рд░ рдХрд░реНрд╕рд░рд╣рд░реВред

рдХреЛрдб рд╕реВрдЪреА рдмрд╛рд░реЗ рдПрдХ рдиреЛрдЯ

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ LMDB API рдорд╛ рд╕рдмреИ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рдордХреЛ рдкрд░рд┐рдгрд╛рдо рддреНрд░реБрдЯрд┐ рдХреЛрдбрдХреЛ рд░реВрдкрдорд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫрдиреН, рддрд░ рд╕рдмреИ рдкрдЫрд┐рд▓реНрд▓рд╛ рд╕реВрдЪреАрд╣рд░реВрдорд╛ рдпрд╕рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдХрд░рдг рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рдЯрд╛рдЗрдиреНрдЫред рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛, рд╣рд╛рдореАрд▓реЗ рднрдгреНрдбрд╛рд░рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдЖрдлреНрдиреИ рдкреНрд░рдпреЛрдЧ рдкрдирд┐ рдЧрд░реНрдпреМрдВред рдХрд╛рдБрдЯрд╛ C++ рд░реНрдпрд╛рдкрд░рд╣рд░реВ lmdbxx, рдЬрд╕рдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ C++ рдЕрдкрд╡рд╛рджрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рднреМрддрд┐рдХ рд░реВрдкрдорд╛ рдмрдирд╛рдЗрдиреНрдЫред

IOS рд╡рд╛ macOS рдХреЛ рд▓рд╛рдЧрд┐ LMDB рд▓рд╛рдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рдЫрд┐рдЯреЛ рддрд░рд┐рдХрд╛рдХреЛ рд░реВрдкрдорд╛, рдо рдореЗрд░реЛ CocoaPod рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ POSLMDB.

4.1. рдЖрдзрд╛рд░рднреВрдд рдЕрдореВрд░реНрддрд╣рд░реВ

рд╡рд╛рддрд╛рд╡рд░рдг

рд╕рдВрд░рдЪрдирд╛ MDB_env LMDB рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рдЕрд╡рд╕реНрдерд╛рдХреЛ рднрдгреНрдбрд╛рд░ рд╣реЛред рдЙрдкрд╕рд░реНрдЧ рд╕рдорд╛рд░реЛрд╣ рдкрд░рд┐рд╡рд╛рд░ mdb_env рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпрд╕рдХреЛ рдХреЗрд╣реА рдЧреБрдгрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╕рд░рд▓ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЗрдиреНрдЬрд┐рди рдкреНрд░рд╛рд░рдореНрднрд┐рдХрд░рдг рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред

mdb_env_create(env);тАЛ
mdb_env_set_map_size(*env, 1024 * 1024 * 512)тАЛ
mdb_env_open(*env, path.UTF8String, MDB_NOTLS, 0664);

Mail.ru рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛, рд╣рд╛рдореАрд▓реЗ рдХреЗрд╡рд▓ рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдпреМрдВред

рдкрд╣рд┐рд▓реЛ рднрд░реНрдЪреБрдЕрд▓ рдареЗрдЧрд╛рдирд╛ рдард╛рдЙрдБрдХреЛ рдЖрдХрд╛рд░ рд╣реЛ рдЬреБрди рднрдгреНрдбрд╛рд░рдг рдлрд╛рдЗрд▓ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдЫред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдПрдЙрдЯреИ рдпрдиреНрддреНрд░рдорд╛ рдкрдирд┐, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рд░рди рджреЗрдЦрд┐ рд░рдирдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░реВрдкрдорд╛ рднрд┐рдиреНрди рд╣реБрди рд╕рдХреНрдЫред рдЖрдИрдУрдПрд╕рдХреЛ рдпреЛ рд╕реБрд╡рд┐рдзрд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрди, рдЕрдзрд┐рдХрддрдо рднрдгреНрдбрд╛рд░рдг рдорд╛рддреНрд░рд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдирдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реЗрд░, рдпреЛ рдХреНрд░рдордмрджреНрдз рд░реВрдкрдорд╛ рдкреНрд░рдХрд╛рд░реНрдп рд╕рдореНрдо рдЖрдзрд╛ рд╣реБрдиреНрдЫ mdb_env_open рднрдиреНрджрд╛ рдлрд░рдХ рдкрд░рд┐рдгрд╛рдо рдлрд░реНрдХрд╛рдЙрдиреЗ рдЫреИрди ENOMEMред рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рддреНрдпрд╣рд╛рдБ рд╡рд┐рдкрд░рд┐рдд рддрд░рд┐рдХрд╛ рдкрдирд┐ рдЫ - рдкрд╣рд┐рд▓реЗ рдЗрдиреНрдЬрд┐рдирдорд╛ рдиреНрдпреВрдирддрдо рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рддреНрдпрд╕рдкрдЫрд┐, рддреНрд░реБрдЯрд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рднрдПрдкрдЫрд┐, MDB_MAP_FULL, рдмрдврд╛рдЙрдиреБрд╣реЛрд╕реНред рддрд░, рдпреЛ рдзреЗрд░реИ рдХрд╛рдБрдЯреЗрджрд╛рд░ рдЫред рдХрд╛рд░рдг рдпреЛ рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЗрдореЛрд░реА (рд░рд┐рдореНрдпрд╛рдк) рдкреБрди: рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛ mdb_env_set_map_size рдкрд╣рд┐рд▓реЗ рдЗрдиреНрдЬрд┐рдирдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рднрдПрдХрд╛ рд╕рдмреИ рдирд┐рдХрд╛рдпрд╣рд░реВ (рдХрд░реНрд╕рд░, рд▓реЗрдирджреЗрди, рдХреБрдЮреНрдЬреА рд░ рдорд╛рдирд╣рд░реВ) рдЕрдорд╛рдиреНрдп рдмрдирд╛рдЙрдБрдЫред рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдпрд╕ рдореЛрдбрд▓рд╛рдИ рдХреЛрдбрдорд╛ рдЦрд╛рддрд╛рдорд╛ рд▓рд┐рдБрджрд╛ рдпрд╕рдХреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрдЯрд┐рд▓рддрд╛ рдирд┐рдореНрддреНрдпрд╛рдЙрдиреЗрдЫред рдпрджрд┐, рддрдерд╛рдкрд┐, рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рднрдиреЗ, рдпреЛ рдзреЗрд░реИ рдЕрдЧрд╛рдбрд┐ рдЧрдПрдХреЛ рдлреЛрд░реНрдХрд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реНрдиреЗ рдХрд╛рд░рдг рд╣реБрди рд╕рдХреНрдЫред MDBX, рдЬрд╣рд╛рдБ рдШреЛрд╖рдгрд╛ рдЧрд░рд┐рдПрдХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдордзреНрдпреЗ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрди-рдж-рдлреНрд▓рд╛рдЗ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рд╛рдЗрдЬ рд╕рдорд╛рдпреЛрдЬрди" рдЫред

рджреЛрд╕реНрд░реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░, рдЬрд╕рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЙрдкрдпреБрдХреНрдд рдЧрд░реНрджреИрди, рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреЗ рдореЗрдХрд╛рдирд┐рдХреНрд╕рд▓рд╛рдИ рд╡рд┐рдирд┐рдпрдорд┐рдд рдЧрд░реНрджрдЫред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдХрдореНрддрд┐рдорд╛ iOS 10 рдорд╛ рдереНрд░реЗрдб рд╕реНрдерд╛рдиреАрдп рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердирдХреЛ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреНред рдпрд╕ рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рднрдгреНрдбрд╛рд░ рдЭрдгреНрдбрд╛рдХреЛ рд╕рд╛рде рдЦреЛрд▓рд┐рдПрдХреЛ рдЫ MDB_NOTLSред рдпрд╕рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдкрдирд┐ рдерд┐рдпреЛ рдХрд╛рдБрдЯрд╛ C++ рд░реНрдпрд╛рдкрд░ lmdbxxрдпреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд░ рдпрд╕рдорд╛ рдЪрд░рд╣рд░реВ рдХрд╛рдЯреНрдиред

рдбреЗрдЯрд╛рдмреЗрд╕

рдбрд╛рдЯрд╛рдмреЗрд╕ рдПрдХ рдЕрд▓рдЧ рдмреА-рдЯреНрд░реА рдЙрджрд╛рд╣рд░рдг рд╣реЛ, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдЫрд▓рдлрд▓ рдЧрд░реНрдпреМрдВред рдпрд╕рдХреЛ рдЙрджреНрдШрд╛рдЯрди рд▓реЗрдирджреЗрди рднрд┐рддреНрд░ рд╣реБрдиреНрдЫ, рдЬреБрди рд╕реБрд░реБрдорд╛ рдЕрд▓рд┐ рдЕрдиреМрдареЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫред

MDB_txn *txn;тАЛ
MDB_dbi dbi;тАЛ
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);тАЛ
mdb_dbi_open(txn, NULL, MDB_CREATE, &dbi);тАЛ
mdb_txn_abort(txn);

рд╡рд╛рд╕реНрддрд╡рдорд╛, LMDB рдорд╛ рдПрдХ рд▓реЗрдирджреЗрди рдПрдХ рднрдгреНрдбрд╛рд░рдг рд╕рдВрд╕реНрдерд╛ рд╣реЛ, рдХреБрдиреИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдХрд╛рдИ рд╣реЛрдЗрдиред рдпреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╕рдВрд╕реНрдерд╛рд╣рд░реВрдорд╛ рдкрд░рдорд╛рдгреБ рдЕрдкрд░реЗрд╢рдирд╣рд░реВ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рдпрд╕рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдореЛрдбреЗрд▓рд┐рдЩ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рдЦреЛрд▓реНрдЫ, рддрд░ рдПрдХ рдкрдЯрдХ рдореИрд▓реЗ рддрд▓рдХреЛ рд╡рд┐рд╡рд░рдгрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдлрд░рдХ рдмрд╛рдЯреЛ рд▓рд┐рдПрдХреЛ рдЫреБред

рдХреБрдЮреНрдЬреА рд░ рдорд╛рдирд╣рд░реВ

рд╕рдВрд░рдЪрдирд╛ MDB_val рдХреБрдЮреНрдЬреА рд░ рдореВрд▓реНрдп рджреБрд╡реИрдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рд▓рд╛рдИ рдореЛрдбреЗрд▓ рдЧрд░реНрджрдЫред рднрдгреНрдбрд╛рд░рд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╢рдмреНрджрд╛рд░реНрдердХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрдиреИ рдЬрд╛рдирдХрд╛рд░реА рдЫреИрдиред рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдЕрд░реВ рдХреЗрд╣рд┐ рджрд┐рдЗрдПрдХреЛ рд╕рд╛рдЗрдЬрдХреЛ рдмрд╛рдЗрдЯреНрд╕рдХреЛ рдПрд░реЗ рдорд╛рддреНрд░ рд╣реЛред рдЕрдзрд┐рдХрддрдо рдХреБрдЮреНрдЬреА рдЖрдХрд╛рд░ 512 рдмрд╛рдЗрдЯ рд╣реЛред

typedef struct MDB_val {тАЛ
    size_t mv_size;тАЛ
    void *mv_data;тАЛ
} MDB_val;тАЛтАЛ

рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╕реНрдЯреЛрд░рд▓реЗ рдХреБрдЮреНрдЬреАрд╣рд░реВрд▓рд╛рдИ рдмрдвреНрджреЛ рдХреНрд░рдордорд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рдЖрдлреНрдиреИ рд╕рдВрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреБрд╣реБрдиреНрди рднрдиреЗ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдПрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ, рдЬрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд▓реЗрдХреНрд╕реЛрдЧреНрд░рд╛рдлрд┐рдХ рдХреНрд░рдордорд╛ рдмрд╛рдЗрдЯ-рджреНрд╡рд╛рд░рд╛-рдмрд╛рдЗрдЯ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджрдЫред

рд▓реЗрдирджреЗрди

рд▓реЗрдирджреЗрди рд╕рдВрд░рдЪрдирд╛рдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ рдЕрдШрд┐рд▓реНрд▓реЛ рдЕрдзреНрдпрд╛рдп, рддреНрдпрд╕реИрд▓реЗ рдпрд╣рд╛рдБ рдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдореБрдЦреНрдп рдЧреБрдгрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреЗрдЫреБ:

  1. рд╕рдмреИ рдЖрдзрд╛рд░рднреВрдд рдЧреБрдгрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ рдПрд╕рд┐рдб: рдкрд░рдорд╛рдгреБ, рд╕реНрдерд┐рд░рддрд╛, рдЕрд▓рдЧрд╛рд╡ рд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ред рдо рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрджрд┐рди рддрд░ рдиреЛрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ macOS рд░ iOS рдорд╛ рд╕реНрдерд╛рдпрд┐рддреНрд╡рдХреЛ рд╕рд░реНрддрдорд╛ рдмрдЧ рдЫ рдЬреБрди MDBX рдорд╛ рдлрд┐рдХреНрд╕ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рддрдкрд╛рдИрдВ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдердк рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдкрдвреНрдиреБрд╣реЛрд╕реН.
  2. рдорд▓реНрдЯрд┐рдереНрд░реЗрдбрд┐рдЩрдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг "рдПрдХрд▓ рд▓реЗрдЦрдХ / рдмрд╣реБ рдкрд╛рдардХ" рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рд▓реЗрдЦрдХрд╣рд░реВрд▓реЗ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рд░реЛрдХреНрдЫрдиреН, рддрд░ рдкрд╛рдардХрд╣рд░реВрд▓рд╛рдИ рд░реЛрдХреНрджреИрдирдиреНред рдкрд╛рдардХрд╣рд░реВрд▓реЗ рд▓реЗрдЦрдХ рд╡рд╛ рдПрдХ рдЕрд░реНрдХрд╛рд▓рд╛рдИ рд░реЛрдХреНрджреИрдирдиреНред
  3. рдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдирджреЗрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
  4. Multiversion рд╕рдорд░реНрдердиред

LMDB рдорд╛ рдорд▓реНрдЯрд┐рднрд░реНрд╕рди рдпрддрд┐ рд░рд╛рдореНрд░реЛ рдЫ рдХрд┐ рдо рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрдорд╛ рджреЗрдЦрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБред рддрд▓рдХреЛ рдХреЛрдбрдмрд╛рдЯ рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрдирд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдареНрдпрд╛рдХреНрдХреИ рд╕рдВрд╕реНрдХрд░рдгрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрдЫ рдЬреБрди рдпреЛ рдЦреЛрд▓рд┐рдПрдХреЛ рд╕рдордпрдорд╛ рд╣рд╛рд▓рдХреЛ рдерд┐рдпреЛ, рдкрдЫрд┐рдХрд╛ рд╕рдмреИ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдмрд╛рдЯ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЕрд▓рдЧ рдЧрд░рд┐рдПрдХреЛред рднрдгреНрдбрд╛рд░рдг рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрдиреБ рд░ рдпрд╕рдорд╛ рдкрд░реАрдХреНрд╖рдг рд░реЗрдХрд░реНрдб рдердкреНрдиреБрд▓реЗ рдХреБрдиреИ рд░реЛрдЪрдХ рдХреБрд░рд╛рд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджреИрди, рддреНрдпрд╕реИрд▓реЗ рдпреА рдЕрдиреБрд╖реНрдард╛рдирд╣рд░реВ рдмрд┐рдЧрд╛рд░реНрдирдХрд░реНрддрд╛рдХреЛ рдореБрдирд┐ рдЫреЛрдбрд┐рдиреНрдЫрдиреНред

рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдердкреНрджреИ

MDB_env *env;
MDB_dbi dbi;
MDB_txn *txn;

mdb_env_create(&env);
mdb_env_open(env, "./testdb", MDB_NOTLS, 0664);

mdb_txn_begin(env, NULL, 0, &txn);
mdb_dbi_open(txn, NULL, 0, &dbi);
mdb_txn_abort(txn);

char k = 'k';
MDB_val key;
key.mv_size = sizeof(k);
key.mv_data = (void *)&k;

int v = 997;
MDB_val value;
value.mv_size = sizeof(v);
value.mv_data = (void *)&v;

mdb_txn_begin(env, NULL, 0, &txn);
mdb_put(txn, dbi, &key, &value, MDB_NOOVERWRITE);
mdb_txn_commit(txn);

MDB_txn *txn1, *txn2, *txn3;
MDB_val val;

// ╨Ю╤В╨║╤А╤Л╨▓╨░╨╡╨╝ 2 ╤В╤А╨░╨╜╨╖╨░╨║╤Ж╨╕╨╕, ╨║╨░╨╢╨┤╨░╤П ╨╕╨╖ ╨║╨╛╤В╨╛╤А╤Л╤Е ╤Б╨╝╨╛╤В╤А╨╕╤В
// ╨╜╨░ ╨▓╨╡╤А╤Б╨╕╤О ╨▒╨░╨╖╤Л ╨┤╨░╨╜╨╜╤Л╤Е ╤Б ╨╛╨┤╨╜╨╛╨╣ ╨╖╨░╨┐╨╕╤Б╤М╤О.
mdb_txn_begin(env, NULL, 0, &txn1); // read-write
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn2); // read-only

// ╨Т ╤А╨░╨╝╨║╨░╤Е ╨┐╨╡╤А╨▓╨╛╨╣ ╤В╤А╨░╨╜╨╖╨░╨║╤Ж╨╕╨╕ ╤Г╨┤╨░╨╗╤П╨╡╨╝ ╨╕╨╖ ╨▒╨░╨╖╤Л ╨┤╨░╨╜╨╜╤Л╤Е ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╤О╤Й╤Г╤О ╨▓ ╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╤М.
mdb_del(txn1, dbi, &key, NULL);
// ╨д╨╕╨║╤Б╨╕╤А╤Г╨╡╨╝ ╤Г╨┤╨░╨╗╨╡╨╜╨╕╨╡.
mdb_txn_commit(txn1);

// ╨Ю╤В╨║╤А╤Л╨▓╨░╨╡╨╝ ╤В╤А╨╡╤В╤М╤О ╤В╤А╨░╨╜╨╖╨░╨║╤Ж╨╕╤О, ╨║╨╛╤В╨╛╤А╨░╤П ╤Б╨╝╨╛╤В╤А╨╕╤В ╨╜╨░
// ╨░╨║╤В╤Г╨░╨╗╤М╨╜╤Г╤О ╨▓╨╡╤А╤Б╨╕╤О ╨▒╨░╨╖╤Л ╨┤╨░╨╜╨╜╤Л╤Е, ╨│╨┤╨╡ ╨╖╨░╨┐╨╕╤Б╨╕ ╤Г╨╢╨╡ ╨╜╨╡╤В.
mdb_txn_begin(env, NULL, MDB_RDONLY, &txn3);
// ╨г╨▒╨╡╨╢╨┤╨░╨╡╨╝╤Б╤П, ╤З╤В╨╛ ╨╖╨░╨┐╨╕╤Б╤М ╨┐╨╛ ╨╕╤Б╨║╨╛╨╝╨╛╨╝╤Г ╨║╨╗╤О╤З╤Г ╤Г╨╢╨╡ ╨╜╨╡ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╨╡╤В.
assert(mdb_get(txn3, dbi, &key, &val) == MDB_NOTFOUND);
// ╨Ч╨░╨▓╨╡╤А╤И╨░╨╡╨╝ ╤В╤А╨░╨╜╨╖╨░╨║╤Ж╨╕╤О.
mdb_txn_abort(txn3);

// ╨г╨▒╨╡╨╢╨┤╨░╨╡╨╝╤Б╤П, ╤З╤В╨╛ ╨▓ ╤А╨░╨╝╨║╨░╤Е ╨▓╤В╨╛╤А╨╛╨╣ ╤В╤А╨░╨╜╨╖╨░╨║╤Ж╨╕╨╕, ╨╛╤В╨║╤А╤Л╤В╨╛╨╣ ╨╜╨░ ╨╝╨╛╨╝╨╡╨╜╤В
// ╤Б╤Г╤Й╨╡╤Б╤В╨▓╨╛╨▓╨░╨╜╨╕╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╨▓ ╨▒╨░╨╖╨╡ ╨┤╨░╨╜╨╜╤Л╤Е, ╨╡╤С ╨▓╤Б╤С ╨╡╤Й╤С ╨╝╨╛╨╢╨╜╨╛ ╨╜╨░╨╣╤В╨╕ ╨┐╨╛ ╨║╨╗╤О╤З╤Г.
assert(mdb_get(txn2, dbi, &key, &val) == MDB_SUCCESS);
// ╨Я╤А╨╛╨▓╨╡╤А╤П╨╡╨╝, ╤З╤В╨╛ ╨┐╨╛ ╨║╨╗╤О╤З╤Г ╨┐╨╛╨╗╤Г╤З╨╡╨╜ ╨╜╨╡ ╨░╨▒╤Л ╨║╨░╨║╨╛╨╣ ╨╝╤Г╤Б╨╛╤А, ╨░ ╨▓╨░╨╗╨╕╨┤╨╜╤Л╨╡ ╨┤╨░╨╜╨╜╤Л╨╡.
assert(*(int *)val.mv_data == 997);
// ╨Ч╨░╨▓╨╡╤А╤И╨░╨╡╨╝ ╤В╤А╨░╨╜╨╖╨░╨║╤Ж╨╕╤О, ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╡╨╣ ╤Е╨╛╤В╤М ╨╕ ╤Б ╤Г╤Б╤В╨░╤А╨╡╨▓╤И╨╡╨╣, ╨╜╨╛ ╨║╨╛╨╜╤Б╨╕╤Б╤В╨╡╨╜╤В╨╜╨╛╨╣ ╨▒╨░╨╖╨╛╨╣ ╨┤╨░╨╜╨╜╤Л╤Е.
mdb_txn_abort(txn2);

рдо рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ рдХрд┐ рддрдкрд╛рдЗрдБ SQLite рдХреЛ рд╕рд╛рде рдЙрд╣реА рдЪрд╛рд▓ рдХреЛрд╕рд┐рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рдХреЗ рд╣реБрдиреНрдЫред

Multiversion рд▓реЗ iOS рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рдЬреАрд╡рдирдорд╛ рдзреЗрд░реИ рд░рд╛рдореНрд░рд╛ рд▓рд╛рднрд╣рд░реВ рд▓реНрдпрд╛рдЙрдБрдЫред рдпреЛ рдЧреБрдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╡рд┐рдЪрд╛рд░рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд, рд╕реНрдХреНрд░рд┐рди рдлрд╛рд░рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛ рд╕реНрд░реЛрддрдХреЛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рджрд░ рд╕рдЬрд┐рд▓реИ рд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░рдгрд╛рд▓реА рдорд┐рдбрд┐рдпрд╛ рдЧреНрдпрд╛рд▓реЗрд░реАрдмрд╛рдЯ рд╕рд╛рдордЧреНрд░реА рд╕реНрд╡рдд: рд▓реЛрдб рдЧрд░реНрдиреЗ рдЬрд╕реНрддрд╛ Mail.ru рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд╕реБрд╡рд┐рдзрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реНред рд░рд╛рдореНрд░реЛ рдЬрдбрд╛рдирдХреЛ рд╕рд╛рде, рдЧреНрд░рд╛рд╣рдХрд▓реЗ рд╕рд░реНрднрд░рдорд╛ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдзреЗрд░реИ рдлреЛрдЯреЛрд╣рд░реВ рдердкреНрди рд╕рдХреНрд╖рдо рдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЙрдирд▓реЛрдб рдкрдЫрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ UICollectionView рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдХреНрд▓рд╛рдЙрдбрдорд╛ рдорд┐рдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реАрдХреЛ рд╕рд╛рде, рддрдкрд╛рдЗрдБ рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдХреНрд░рдордорд╛ рд▓рдЧрднрдЧ 60 fps рд░ рд╕рд╣рдЬ рд╕реНрдХреНрд░реЛрд▓рд┐рдЩ рдмрд┐рд░реНрд╕рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдмрд╛рд░рдореНрдмрд╛рд░ рд╕реНрдХреНрд░рд┐рди рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд╣рд░реВ рд░реЛрдХреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рдбреЗрдЯрд╛ рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рддрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗ рджрд░рд▓рд╛рдИ рд╕реАрдорд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ UICollectionViewDataSource.

рдпрджрд┐ рдбрд╛рдЯрд╛рдмреЗрд╕рд▓реЗ рдорд▓реНрдЯрд┐рднрд░реНрд╕рдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджреИрди рд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╣рд╛рд▓рдХреЛ рд╣рд╛рд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛рд╕рдБрдЧ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБрд▓реЗ рдпрд╕рд▓рд╛рдИ рдХреЗрд╣рд┐ рдЗрди-рдореЗрдореЛрд░реА рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╡рд╛ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рдбрд╛рдЯрд╛рдХреЛ рд╕рдордп-рд╕реНрдерд┐рд░ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреА рдордзреНрдпреЗ рдХреБрдиреИ рдкрдирд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдЫред рдЗрди-рдореЗрдореЛрд░реА рднрдгреНрдбрд╛рд░рдгрдХреЛ рдорд╛рдорд▓рд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рдореЗрдореЛрд░реАрдорд╛ рд▓рд╛рдЧрддрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ, рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдПрдХрд╛ рд╡рд╕реНрддреБрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджрд╛ рд░ рд╕рдордпрдореИ, рдЕрдирд╛рд╡рд╢реНрдпрдХ ORM рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рддред рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рдЕрдЭ рдорд╣рдБрдЧреЛ рдЖрдирдиреНрдж рд╣реЛ, рдХреЗрд╡рд▓ рдЧреИрд░-рддреБрдЪреНрдЫ рдорд╛рдорд▓рд╛рд╣рд░реВрдорд╛ рдЕрд░реНрде рдмрдирд╛рдЙрдБрджреИред

LMDB рдХреЛ рдорд▓реНрдЯрд┐рднрд░реНрд╕рди рд╕рдорд╛рдзрд╛рдирд▓реЗ рд╕реНрдерд┐рд░ рдбрд╛рдЯрд╛ рд╕реНрд░реЛрддрд▓рд╛рдИ рдзреЗрд░реИ рд╕реБрдиреНрджрд░ рддрд░рд┐рдХрд╛рдорд╛ рдХрд╛рдпрдо рд░рд╛рдЦреНрдиреЗ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдЫред рдпреЛ рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдирджреЗрди рд░ рднреЛрдЗрд▓рд╛ рдЦреЛрд▓реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫ - рдЬрдмрд╕рдореНрдо рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреВрд░рд╛ рдЧрд░реНрджреИрдиреМрдВ, рдбреЗрдЯрд╛ рд╕реЗрдЯ рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЫред рдпрд╕рдХреЛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рддрд░реНрдХ рдЕрдм рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг рддрд╣рдХреЛ рд╣рд╛рддрдорд╛ рдЫ, рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдХреБрдиреИ рдУрднрд░рд╣реЗрдб рдмрд┐рдирд╛ред

рдХрд░реНрд╕рд░рд╣рд░реВ

рдХрд░реНрд╕рд░рд╣рд░реВрд▓реЗ B-tree traversal рдорд╛рд░реНрдлрдд рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВрдорд╛ рдХреНрд░рдордмрджреНрдз рд░реВрдкрдорд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рдВрдпрдиреНрддреНрд░ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рддрд┐рдиреАрд╣рд░реВ рдмрд┐рдирд╛, рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд░реВрдкрдорд╛ рдореЛрдбреЗрд▓ рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рд╣реБрдиреЗрдЫ, рдЬреБрди рд╣рд╛рдореА рдЕрдм рдлрд░реНрдХрдиреНрдЫреМрдВред

рек.реиред рддрд╛рд▓рд┐рдХрд╛ рдореЛрдбрд▓рд┐рдЩ

рдХреБрдЮреНрдЬреА рдЕрд░реНрдбрд░рд┐рдЩрдХреЛ рдЧреБрдгрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдзрд╛рд░рднреВрдд рдЕрдореВрд░реНрддрд╣рд░реВрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рдЬрд╕реНрддрд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдмреНрд╕реНрдЯреНрд░реНрдпрд╛рдХреНрд╢рди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдХреНрд▓рд╛рдЙрдб рдХреНрд▓рд╛рдЗрдиреНрдЯрдХреЛ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВ, рдЬрд╕рд▓реЗ рд╕рдмреИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдлреЛрд▓реНрдбрд░рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреНрдпрд╛рд╕ рдЧрд░реНрджрдЫред

рддрд╛рд▓рд┐рдХрд╛ рдпреЛрдЬрдирд╛

рдПрдЙрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдлреЛрд▓реНрдбрд░ рд░реВрдЦрдХреЛ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдврд╛рдБрдЪрд╛ рдЕрдиреБрд░реВрдк рд╣реБрдиреБрдкрд░реНрдЫ, рджрд┐рдЗрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рднрд┐рддреНрд░ рдЕрд╡рд╕реНрдерд┐рдд рд╕рдмреИ рддрддреНрд╡рд╣рд░реВрдХреЛ рдЪрдпрди рд╣реЛред рдпрд╕ рдкреНрд░рдХрд╛рд░рдХрд╛ рдХреБрд╢рд▓ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд░рд╛рдореНрд░реЛ рдбреЗрдЯрд╛ рд╕рдВрдЧрдарди рдореЛрдбреЗрд▓ рд╣реЛред Adjacency рд╕реВрдЪреАред рдХреБрдЮреНрдЬреА-рдорд╛рди рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрди, рдлрд╛рдЗрд▓ рд░ рдлреЛрд▓реНрдбрд░рд╣рд░реВрдХреЛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдЕрднрд┐рднрд╛рд╡рдХ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЙрдиреАрд╣рд░реВрдХреЛ рд╕рджрд╕реНрдпрддрд╛рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╕рдореВрд╣рдмрджреНрдз рд╣реБрдиреНрдЫрдиреНред рдердк рд░реВрдкрдорд╛, рд╡рд┐рдиреНрдбреЛрдЬ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ (рдкрд╣рд┐рд▓реЛ рдлреЛрд▓реНрдбрд░рд╣рд░реВ, рддреНрдпрд╕рдкрдЫрд┐ рдлрд╛рдЗрд▓рд╣рд░реВ, рджреБрд╡реИ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреНрд░рдордмрджреНрдз) рд▓рд╛рдИ рдкрд░рд┐рдЪрд┐рдд рдлрд╛рд░рдордорд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рдХреБрдЮреНрдЬреАрдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рддрд▓рдХреЛ рдЪрд┐рддреНрд░рд▓реЗ рд╣рд╛рддрдорд╛ рд░рд╣реЗрдХреЛ рдХрд╛рд░реНрдпрдХреЛ рдЖрдзрд╛рд░рдорд╛, рдмрд╛рдЗрдЯ рдПрд░реЗрдХреЛ рд░реВрдкрдорд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реНрддреЛ рджреЗрдЦрд┐рди рд╕рдХреНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред рдЕрднрд┐рднрд╛рд╡рдХ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА (рд░рд╛рддреЛ) рдХреЛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рдХреЛ рд╕рд╛рде рдмрд╛рдЗрдЯрд╣рд░реВ рдкрд╣рд┐рд▓реЗ рд░рд╛рдЦрд┐рдиреНрдЫрдиреН, рддреНрдпрд╕рдкрдЫрд┐ рдЯрд╛рдЗрдк (рд╣рд░рд┐рдпреЛ) рд░ рдкреБрдЪреНрдЫрд░рдорд╛ рдирд╛рдо (рдиреАрд▓реЛ) рд░рд╛рдЦрд┐рдПрдХреЛ рдЫред рд▓реЗрдХреНрд╕реЛрдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХреНрд░рдордорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд LMDB рддреБрд▓рдирд╛рдХрд░реНрддрд╛рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░рд┐рдПрдХреЛ рдЫ, рддрд┐рдиреАрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЫрдиреНред рдЖрд╡рд╢реНрдпрдХ рддрд░рд┐рдХрд╛ред рдПрдЙрдЯреИ рд░рд╛рддреЛ рдЙрдкрд╕рд░реНрдЧрдХреЛ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд░реВрдкрдорд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдорд╛рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рдЬреБрди рдХреНрд░рдордорд╛ рддрд┐рдиреАрд╣рд░реВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ (рджрд╛рдпрд╛рдБрдорд╛) рджреЗрдЦрд╛рдЗрдиреБрдкрд░реНрдЫ, рдХреБрдиреИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдЩрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд┐рдирд╛ред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдХреНрд░рдордмрджреНрдз рдХреБрдЮреНрдЬреА рд░ рдорд╛рдирд╣рд░реВ

рд╕рдВрд╕рд╛рд░рдорд╛ рд╡рд╕реНрддреБрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреЗ рдзреЗрд░реИ рд╡рд┐рдзрд┐рд╣рд░реВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рд╣рд╛рдореАрд╕рдБрдЧ рдЧрддрд┐ рдмрд╛рд╣реЗрдХ рдЕрд░реВ рдХреБрдиреИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирднрдПрдХреЛрд▓реЗ, рд╣рд╛рдореАрд▓реЗ рдЖрдлреНрдиреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рдЫрд┐рдЯреЛ рдЫрдиреЛрдЯ рдЧрд░реНрдпреМрдВ - C рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдУрдЧрдЯреЗрдХреЛ рдореЗрдореЛрд░реАрдХреЛ рдбрдореНрдкред рдпрд╕рд░реА, рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рддрддреНрд╡рдХреЛ рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛рд╕рдБрдЧ рдореЛрдбреЗрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред NodeKey.

typedef struct NodeKey {тАЛ
    EntityId parentId;тАЛ
    uint8_t type;тАЛ
    uint8_t nameBuffer[256];тАЛ
} NodeKey;

рдмрдЪрд╛рдЙрдиреБ NodeKey рд╡рд╕реНрддреБрдорд╛ рдЖрд╡рд╢реНрдпрдХ рднрдгреНрдбрд╛рд░рдгрдорд╛ MDB_val рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╢реБрд░реБрд╡рд╛рддрдХреЛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдбреЗрдЯрд╛ рд╕реВрдЪрдХрд▓рд╛рдИ рд╕реНрдерд╛рди рджрд┐рдиреБрд╣реЛрд╕реН, рд░ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕рд╛рде рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рд╛рдЗрдЬ рдЧрдгрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН sizeof.

MDB_val serialize(NodeKey * const key) {
    return MDB_val {
        .mv_size = sizeof(NodeKey),
        .mv_data = (void *)key
    };
}

рдбрд╛рдЯрд╛рдмреЗрд╕ рдЪрдпрди рдорд╛рдкрджрдгреНрдбрдХреЛ рдкрд╣рд┐рд▓реЛ рдЕрдзреНрдпрд╛рдпрдорд╛, рдореИрд▓реЗ CRUD рд╕рдЮреНрдЪрд╛рд▓рдирд╣рд░реВ рднрд┐рддреНрд░ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрдирд▓рд╛рдИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЪрдпрди рдХрд╛рд░рдХрдХреЛ рд░реВрдкрдорд╛ рдХрдо рдЧрд░реНрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗрдХреЛ рдЫреБред рдкреНрд░рдХрд╛рд░реНрдп рдХреЛрдб serialize рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдирдпрд╛рдБ рд░реЗрдХрд░реНрдбрд╣рд░реВ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрджрд╛ рдХрд╕рд░реА LMDB рдХреЛ рдорд╛рдорд▓рд╛рдорд╛ рддрд┐рдиреАрд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред рд╕рд░реНрднрд░рдмрд╛рдЯ рдЖрдЧрдорди рдмрд╛рдЗрдЯ рдПрд░реЗ рдкрд╣рд┐рд▓реЗ рд╕реНрдЯреНрдпрд╛рдХ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рд╣реБрдиреНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВ рд╕рд╛рдиреЛ рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░рдгрдорд╛ рдлреНрдпрд╛рдБрдХрд┐рдиреНрдЫрдиреНред LMDB рднрд┐рддреНрд░ рдХреБрдиреИ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрдирд╣рд░реВ рдкрдирд┐ рдЫреИрдирдиреН рднрдиреНрдиреЗ рдХреБрд░рд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ, рддрдкрд╛рдИрдВрд▓реЗ iOS рдорд╛рдкрджрдгреНрдбрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд╡рд╕реНрдерд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - рдиреЗрдЯрд╡рд░реНрдХрджреЗрдЦрд┐ рдбрд┐рд╕реНрдХрд╕рдореНрдордХреЛ рд╕рдореНрдкреВрд░реНрдг рдорд╛рд░реНрдЧрдорд╛ рдбрд╛рдЯрд╛рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕реНрдЯреНрдпрд╛рдХ рдореЗрдореЛрд░реА рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН!

рдмрд╛рдЗрдирд░реА рддреБрд▓рдирд╛рдХрд░реНрддрд╛рд╕рдБрдЧ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджреИ

рдХреБрдЮреНрдЬреА рдЕрд░реНрдбрд░ рд╕рдореНрдмрдиреНрдзрд▓рд╛рдИ рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рднрдирд┐рдиреЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░реНрдпрджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред рдЗрдиреНрдЬрд┐рдирд▓рд╛рдИ рдмрд╛рдЗрдЯреНрд╕рдХреЛ рд╕рд┐рдорд╛рдиреНрдЯрд┐рдХреНрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗрд╣реА рдерд╛рд╣рд╛ рдирднрдПрдХреЛ рдХрд╛рд░рдгрд▓реЗ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддреБрд▓рдирд╛рдХрд░реНрддрд╛рд╕рдБрдЧ рдмрд╛рдЗрдЯ-рдмрд╛рдЗрдЯ рддреБрд▓рдирд╛рдХреЛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдИ, рд▓реЗрдХреНрд╕рд┐рдХреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХреНрд░рдордорд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рдмрд╛рд╣реЗрдХ рдХреБрдиреИ рд╡рд┐рдХрд▓реНрдк рдЫреИрдиред рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рднрдиреЗрдХреЛ рдХрд╛рдЯреНрдиреЗ рдмрдЮреНрдЪрд░реЛрд▓реЗ рдЦреМрд░реНрдиреБ рдЬрд╕реНрддреИ рд╣реЛред рдпрджреНрдпрдкрд┐, рд╕рд╛рдзрд╛рд░рдг рдЕрд╡рд╕реНрдерд╛рдорд╛ рдорд▓рд╛рдИ рдпреЛ рд╡рд┐рдзрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд▓рд╛рдЧреНрдЫред рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд▓ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рддрд░ рдпрд╣рд╛рдБ рдо рдпрд╕ рдорд╛рд░реНрдЧрдорд╛ рдЫрд░рд┐рдПрдХрд╛ рдХреЗрд╣реА рд░реЗрдХрд╣рд░реВ рдиреЛрдЯ рдЧрд░реНрдиреЗрдЫреБред

рдпрд╛рдж рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдкрд╣рд┐рд▓реЛ рдХреБрд░рд╛ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдореЗрдореЛрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛред рдпрд╕рд░реА, рд╕рдмреИ рдПрдкреНрдкрд▓ рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛, рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░рд╣рд░реВ рдврд╛рдБрдЪрд╛рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫ рд╕рд╛рдиреЛ Endianред рдпрд╕рдХреЛ рдорддрд▓рдм рдХрдореНрддрд┐рдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдмрд╛рдЗрдЯ рдмрд╛рдпрд╛рдБрдорд╛ рд╣реБрдиреЗрдЫ, рд░ рдмрд╛рдЗрдЯ-рджреНрд╡рд╛рд░рд╛-рдмрд╛рдЗрдЯ рддреБрд▓рдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреВрд░реНрдгрд╛рдВрдХрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫреИрдиред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, 0 рджреЗрдЦрд┐ 511 рд╕рдореНрдо рд╕рдВрдЦреНрдпрд╛рд╣рд░реБ рдХреЛ рдПрдХ рд╕реЗрдЯ рд╕рдВрдЧ рдпреЛ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдорд╣рд░реБ рд▓рд╛рдИ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреЗрдЫред

// value (hex dump)
000 (0000)
256 (0001)
001 (0100)
257 (0101)
...
254 (fe00)
510 (fe01)
255 (ff00)
511 (ff01)

рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рдкреВрд░реНрдгрд╛рдВрдХрд╣рд░реВ рдмрд╛рдЗрдЯ-рдмрд╛рдЗрдЯ рддреБрд▓рдирд╛рдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдврд╛рдБрдЪрд╛рдорд╛ рдХреБрдЮреНрдЬреАрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдиреБрдкрд░реНрдЫред рдкрд░рд┐рд╡рд╛рд░рдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ hton* (рд╡рд┐рд╢реЗрд╖рдд htons рдЙрджрд╛рд╣рд░рдгрдмрд╛рдЯ рдбрдмрд▓-рдмрд╛рдЗрдЯ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐)ред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдорд╛ рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рдврд╛рдБрдЪрд╛, рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рд╕рдореНрдкреВрд░реНрдг рд╣реЛ рдЗрддрд┐рд╣рд╛рд╕ред рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рд╕рд┐рдорд╛рдиреНрдЯрд┐рдХреНрд╕, рд╕рд╛рдереИ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдореЗрдореЛрд░реАрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдПрдиреНрдХреЛрдбрд┐рдЩрд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫ рдХрд┐ рдкреНрд░рддрд┐ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░ рдПрдХ рднрдиреНрджрд╛ рдмрдвреА рдмрд╛рдЗрдЯ рд╣реБрди рд╕рдХреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рддреБрд░реБрдиреНрддреИ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░ рддреНрдпрд╛рдЧреНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред

рдордирдорд╛ рд░рд╛рдЦреНрдиреБ рдкрд░реНрдиреЗ рджреЛрд╕реНрд░реЛ рдХреБрд░рд╛ рд╣реЛ рдкрдЩреНрдХреНрддрд┐рдмрджреНрдз рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХрдореНрдкрд╛рдЗрд▓рд░ред рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рд░рдг, рдлреЛрд╣реЛрд░ рдорд╛рдирд╣рд░реВрд╕рдБрдЧ рдмрд╛рдЗрдЯрд╣рд░реВ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдмреАрдЪ рдореЗрдореЛрд░реАрдорд╛ рдЧрдарди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬреБрди, рдЕрд╡рд╢реНрдп рдкрдирд┐, рдмрд╛рдЗрдЯ-рдмрд╛рдЗрдЯ рдХреНрд░рдордмрджреНрдз рддреЛрдбреНрдЫред рдлреЛрд╣реЛрд░ рд╣рдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдпрд╛ рдд рдкрдЩреНрдХреНрддрд┐рдмрджреНрдз рдирд┐рдпрдорд╣рд░реВрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ рдХрдбрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдордорд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдШреЛрд╖рдгрд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд╡рд╛ рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛рдорд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред packed.

рдмрд╛рд╣реНрдп рддреБрд▓рдирд╛рдХрд░реНрддрд╛рд╕рдБрдЧ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдЕрд░реНрдбрд░ рдЧрд░реНрджреИ

рдореБрдЦреНрдп рддреБрд▓рдирд╛ рддрд░реНрдХ рдмрд╛рдЗрдирд░реА рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЛ рд▓рд╛рдЧреА рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рд╣реБрди рд╕рдХреНрдЫред рдзреЗрд░реИ рдХрд╛рд░рдгрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рднрд┐рддреНрд░ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛред рдо рдкрд╣рд┐рд▓реЗ рдиреИ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд░рд┐рдЪрд┐рдд рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рддрддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдЮреНрдЬреАрдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдШрдЯрдирд╛рд▓рд╛рдИ рдЪрд┐рддреНрд░рдг рдЧрд░реНрдиреЗрдЫреБред

typedef struct NodeKey {тАЛ
    EntityId parentId;тАЛ
    uint8_t type;тАЛ
    uint8_t nameBuffer[256];тАЛ
} NodeKey;

рдпрд╕рдХреЛ рд╕рд░рд▓рддрд╛рдХреЛ рдмрд╛рд╡рдЬреБрдж, рдзреЗрд░реИ рдЬрд╕реЛ рдХреЗрд╕рд╣рд░реВрдорд╛ рдпрд╕рд▓реЗ рдзреЗрд░реИ рдореЗрдореЛрд░реА рдЦрдкрдд рдЧрд░реНрджрдЫред рдирд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдмрдлрд░рд▓реЗ 256 рдмрд╛рдЗрдЯрд╣рд░реВ рд▓рд┐рдиреНрдЫ, рдпрджреНрдпрдкрд┐ рдФрд╕рдд рдлрд╛рдЗрд▓ рд░ рдлреЛрд▓реНрдбрд░ рдирд╛рдорд╣рд░реВ рд╡рд┐рд░рд▓реИ реиреж-рейреж рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВ рднрдиреНрджрд╛ рдмрдвреА рд╣реБрдиреНрдЫрдиреНред

рд░реЗрдХрд░реНрдбрдХреЛ рд╕рд╛рдЗрдЬ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреЗ рдПрдХ рдорд╛рдирдХ рдкреНрд░рд╡рд┐рдзрд┐ рднрдиреЗрдХреЛ рдпрд╕рд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдЗрдЬрдорд╛ "рдЯреНрд░рд┐рдо" рдЧрд░реНрдиреБ рд╣реЛред рдпрд╕рдХреЛ рд╕рд╛рд░ рдпреЛ рд╣реЛ рдХрд┐ рд╕рдмреИ рдЪрд░-рд▓рдореНрдмрд╛рдЗ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рд╕рдВрд░рдЪрдирд╛рдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рдмрдлрд░рдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд▓рдореНрдмрд╛рдЗрд╣рд░реВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рд╣рд░реВрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреБрд╕рд╛рд░, рдХреБрдЮреНрдЬреА NodeKey рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред

typedef struct NodeKey {тАЛ
    EntityId parentId;тАЛ
    uint8_t type;тАЛ
    uint8_t nameLength;тАЛ
    uint8_t nameBuffer[256];тАЛ
} NodeKey;

рдпрд╕рдмрд╛рд╣реЗрдХ, рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджрд╛, рдбрд╛рдЯрд╛ рд╕рд╛рдЗрдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди sizeof рд╕рдореНрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛, рд░ рд╕рдмреИ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдореНрдмрд╛рдЗ рд░ рдмрдлрд░рдХреЛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рднрд╛рдЧрдХреЛ рдЖрдХрд╛рд░ рд╣реЛред

MDB_val serialize(NodeKey * const key) {
    return MDB_val {
        .mv_size = offsetof(NodeKey, nameBuffer) + key->nameLength,
        .mv_data = (void *)key
    };
}

рд░рд┐рдлреНрдпрд╛рдХреНрдЯрд░рд┐рдЩрдХреЛ рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдХреБрдЮреНрдЬреАрд╣рд░реВрд▓реЗ рдУрдЧрдЯреЗрдХреЛ рдард╛рдЙрдБрдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдмрдЪрдд рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреМрдВред рддрд░, рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдХреНрд╖реЗрддреНрд░рдХрд╛ рдХрд╛рд░рдгрд▓реЗ nameLength, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмрд╛рдЗрдирд░реА рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдЕрдм рдХреБрдЮреНрдЬреА рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫреИрдиред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреИ рд╕рдВрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрджреИрдиреМрдВ рднрдиреЗ, рдирд╛рдордХреЛ рд▓рдореНрдмрд╛рдЗ рдирд╛рдо рднрдиреНрджрд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛рд░рдХ рд╣реБрдиреЗрдЫред

LMDB рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдЖрдлреНрдиреИ рдореБрдЦреНрдп рддреБрд▓рдирд╛ рдкреНрд░рдХрд╛рд░реНрдп рд╣реБрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпреЛ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░рд┐рдиреНрдЫ mdb_set_compare рдЦреЛрд▓реНрдиреБ рдЕрдШрд┐ рдХрдбрд╛рдИрдХрд╛ рд╕рд╛рдеред рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдпреЛ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдЬреАрд╡рдирднрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред рддреБрд▓рдирд╛рдХрд░реНрддрд╛рд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдмрд╛рдЗрдирд░реА рдврд╛рдБрдЪрд╛рдорд╛ рджреБрдИ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рд░ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдпрд╕рд▓реЗ рддреБрд▓рдирд╛ рдкрд░рд┐рдгрд╛рдо рдлрд░реНрдХрд╛рдЙрдБрдЫ: (-рез) рднрдиреНрджрд╛ рдХрдо, (рез) рднрдиреНрджрд╛ рдареВрд▓реЛ рд╡рд╛ (реж) рдмрд░рд╛рдмрд░ред рдХрд╛ рд▓рд╛рдЧрд┐ рд╕реНрдпреВрдбреЛрдХреЛрдб NodeKey рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред

int compare(MDB_val * const a, MDB_val * const b) {тАЛ
    NodeKey * const aKey = (NodeKey * const)a->mv_data;тАЛ
    NodeKey * const bKey = (NodeKey * const)b->mv_data;тАЛ
    return // ...
}тАЛ

рдЬрдмрд╕рдореНрдо рдбрд╛рдЯрд╛рдмреЗрд╕рдХрд╛ рд╕рдмреИ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдПрдЙрдЯреИ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╣реБрдиреНрдЫрдиреН, рдмрд┐рдирд╛ рд╢рд░реНрдд рддрд┐рдиреАрд╣рд░реВрдХреЛ рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд▓рд╛рдИ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХреБрдЮреНрдЬреА рд╕рдВрд░рдЪрдирд╛рдХреЛ рдкреНрд░рдХрд╛рд░рдорд╛ рдХрд╛рд╕реНрдЯ рдЧрд░реНрдиреБ рдХрд╛рдиреВрдиреА рд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рд╕реВрдХреНрд╖реНрдорддрд╛ рдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рддрд▓ "рд░реАрдбрд┐рдЩ рд░реЗрдХрд░реНрдбрд╣рд░реВ" рдЙрдкрдЦрдгреНрдбрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░рд┐рдиреЗрдЫред

рдХреНрд░рдордмрджреНрдз рдорд╛рдирд╣рд░реВ

LMDB рд▓реЗ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рд░реЗрдХрд░реНрдбрд╣рд░реВрдХреЛ рдХреБрдЮреНрдЬреАрд╣рд░реВрд╕рдБрдЧ рдЕрддреНрдпрдиреНрдд рдЧрд╣рди рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред рдПрдХрдЕрд░реНрдХрд╛рд╕рдБрдЧ рддрд┐рдиреАрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛ рдХреБрдиреИ рдкрдирд┐ рд▓рд╛рдЧреВ рдЕрдкрд░реЗрд╢рдирдХреЛ рдврд╛рдБрдЪрд╛ рднрд┐рддреНрд░ рд╣реБрдиреНрдЫ, рд░ рд╕рдореНрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рдирдХреЛ рдкреНрд░рджрд░реНрд╢рди рддреБрд▓рдирд╛рдХрд░реНрддрд╛рдХреЛ рдЧрддрд┐рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдПрдХ рдЖрджрд░реНрд╢ рд╕рдВрд╕рд╛рд░рдорд╛, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмрд╛рдЗрдирд░реА рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рддреБрд▓рдирд╛ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рд╣реБрдиреБрдкрд░реНрдЫ, рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛ рднрдиреЗ, рддреНрдпрд╕рдорд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВрд▓рд╛рдИ рдбрд┐рд╕реЗрд░рд┐рдпрд▓рд╛рдЗрдЬ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдХреЗрд╕рдореНрдо рдЫрд┐рдЯреЛ рд╣реБрдиреБрдкрд░реНрдЫред

рдбрд╛рдЯрд╛рдмреЗрд╕ рдЕрднрд┐рд▓реЗрдЦ (рдорд╛рди) рдХреЛ рдореВрд▓реНрдп рднрд╛рдЧ рдорд╛ рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдЫреИрдиред рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдмрд╛рдЯ рд╡рд╕реНрддреБрдорд╛ рдпрд╕рдХреЛ рд░реВрдкрд╛рдиреНрддрд░рдг рддрдм рд╣реБрдиреНрдЫ рдЬрдм рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕реНрдХреНрд░рд┐рдирдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиред рдпреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╡рд┐рд░рд▓реИ рд╣реБрдиреЗ рднрдПрдХреЛрд▓реЗ, рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЧрддрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рддреНрдпрддрд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫреИрдирдиреН, рд░ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рд╣рд╛рдореА рд╕реБрд╡рд┐рдзрд╛рдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрди рдзреЗрд░реИ рд╕реНрд╡рддрдиреНрддреНрд░ рдЫреМрдВред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рдбрд╛рдЙрдирд▓реЛрдб рдирдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди, рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред NSKeyedArchiver.

NSData *data = serialize(object);тАЛ
MDB_val value = {тАЛ
    .mv_size = data.length,тАЛ
    .mv_data = (void *)data.bytesтАЛ
};

рдпрджреНрдпрдкрд┐, рддреНрдпрд╣рд╛рдБ рд╕рдордпрд╣рд░реВ рдЫрдиреН рдЬрдм рдкреНрд░рджрд░реНрд╢рди рдЕрдЭреИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд╛рдЙрдбрдХреЛ рдлрд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдореЗрдЯреЗрдирдлрд░реНрдореЗрд╕рди рдмрдЪрдд рдЧрд░реНрджрд╛, рд╣рд╛рдореА рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд╕рдорд╛рди рдореЗрдореЛрд░реА рдбрдореНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХреНрд░рдордмрджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрдХреЛ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рднрдиреЗрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХрд╛ рддрддреНрд╡рд╣рд░реВ рд╡рд░реНрдЧрд╣рд░реВрдХреЛ рдкрджрд╛рдиреБрдХреНрд░рдорджреНрд╡рд╛рд░рд╛ рдореЛрдбреЗрд▓ рдЧрд░рд┐рдПрдХреЛ рддрдереНрдп рд╣реЛред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдпрд╕рд▓рд╛рдИ C рднрд╛рд╖рд╛рдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди, рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реАрд╣рд░реВрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВрдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫ, рд░ рдЖрдзрд╛рд░ рдПрдХрд╕рдБрдЧ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЬрдбрд╛рди рдкреНрд░рдХрд╛рд░ рд╕рдВрдШрдХреЛ рдХреНрд╖реЗрддреНрд░ рдорд╛рд░реНрдлрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред рд╕рдВрдШрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдорд╛рд░реНрдлрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред

typedef struct NodeValue {тАЛ
    EntityId localId;тАЛ
    EntityType type;тАЛ
    union {тАЛ
        FileInfo file;тАЛ
        DirectoryInfo directory;тАЛ
    } info;тАЛ
    uint8_t nameLength;тАЛ
    uint8_t nameBuffer[256];тАЛ
} NodeValue;тАЛ

рдЕрднрд┐рд▓реЗрдЦрд╣рд░реВ рдердкреНрджреИ рд░ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИ

рдХреНрд░рдордмрджреНрдз рдХреБрдЮреНрдЬреА рд░ рдореВрд▓реНрдп рд╕реНрдЯреЛрд░рдорд╛ рдердкреНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рдЧрд░реНрди, рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН mdb_put.

// key ╨╕ value ╨╕╨╝╨╡╤О╤В ╤В╨╕╨┐ MDB_valтАЛ
mdb_put(..., &key, &value, MDB_NOOVERWRITE);

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЪрд░рдгрдорд╛, рднрдгреНрдбрд╛рд░рдгрд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рди рд╕рдХрд┐рдиреНрдЫ рд╡рд╛ рдПрдЙрдЯреИ рдХреБрдЮреНрдЬреАрд╕рдБрдЧ рдзреЗрд░реИ рд░реЗрдХрд░реНрдбрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдирд┐рд╖реЗрдз рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрджрд┐ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдирдХреНрдХрд▓ рдирд┐рд╖реЗрдз рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ, рд░реЗрдХрд░реНрдб рдШреБрд╕рд╛рдЙрдБрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рдЕрд╡рд╕реНрдерд┐рдд рд░реЗрдХрд░реНрдб рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреЗ рдЕрдиреБрдорддрд┐ рдЫ рд╡рд╛ рдЫреИрди рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рдХреЛрдбрдорд╛ рддреНрд░реБрдЯрд┐рдХреЛ рдкрд░рд┐рдгрд╛рдордХреЛ рд░реВрдкрдорд╛ рдорд╛рддреНрд░ рдлреНрд░рд╛рдЗрдЩ рд╣реБрди рд╕рдХреНрдЫ, рддрдм рддрдкрд╛рдЗрдБ рдЭрдгреНрдбрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ рдЖрдлреИрд▓рд╛рдИ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред NOOVERWRITEред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рдкрдвреНрджреИ

LMDB рдорд╛ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдкрдвреНрди, рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН mdb_getред рдпрджрд┐ рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреА рдкрд╣рд┐рд▓реЗ рдбрдореНрдк рдЧрд░рд┐рдПрдХрд╛ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ, рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред

NodeValue * const readNode(..., NodeKey * const key) {тАЛ
    MDB_val rawKey = serialize(key);тАЛ
    MDB_val rawValue;тАЛ
    mdb_get(..., &rawKey, &rawValue);тАЛ
    return (NodeValue * const)rawValue.mv_data;тАЛ
}

рдкреНрд░рд╕реНрддреБрдд рд╕реВрдЪреАрд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ рдХрд╕рд░реА рд╕рдВрд░рдЪрдирд╛ рдбрдореНрдк рдорд╛рд░реНрдлрдд рдХреНрд░рдорд┐рдХрд░рдгрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд▓реЗрдЦреНрджрд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рдбрд╛рдЯрд╛ рдкрдвреНрджрд╛ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрдирдмрд╛рдЯ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдХрд╛рд░реНрдпрдмрд╛рдЯ рд╡реНрдпреБрддреНрдкрдиреНрди mdb_get рд╕реВрдЪрдХрд▓реЗ рдареНрдпрд╛рдХреНрдХреИ рднрд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдареЗрдЧрд╛рдирд╛рдорд╛ рджреЗрдЦрд┐рдиреНрдЫ рдЬрд╣рд╛рдБ рдбрд╛рдЯрд╛рдмреЗрд╕рд▓реЗ рд╡рд╕реНрддреБрдХреЛ рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫред рд╡рд╛рд╕реНрддрд╡рдорд╛, рд╣рд╛рдореАрд▓реЗ рдПрдХ рдкреНрд░рдХрд╛рд░рдХреЛ ORM рдкрд╛рдЙрдБрдЫреМрдВ рдЬрд╕рд▓реЗ рдзреЗрд░реИ рдЙрдЪреНрдЪ рдбрд╛рдЯрд╛ рдкрдвреНрдиреЗ рдЧрддрд┐ рд▓рдЧрднрдЧ рдирд┐рдГрд╢реБрд▓реНрдХ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдмреИ рд╕реБрдиреНрджрд░рддрд╛ рдХреЛ рдмрд╛рд╡рдЬреВрдж, рдпреЛ рд╕рдВрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рд╕рдореНрдЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЫред

  1. рдХреЗрд╡рд▓ рдкрдвреНрдиреЗ рд▓реЗрдирджреЗрдирдХреЛ рд▓рд╛рдЧрд┐, рдореВрд▓реНрдп рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕реВрдЪрдХ рд▓реЗрдирджреЗрди рдмрдиреНрдж рдирднрдПрд╕рдореНрдо рдорд╛рддреНрд░ рдорд╛рдиреНрдп рд░рд╣рдиреЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЧрд░рд┐рдиреНрдЫред рдкрд╣рд┐рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдЭреИрдВ, B-рдЯреНрд░реА рдкреГрд╖реНрдард╣рд░реВ рдЬрд╕рдорд╛ рд╡рд╕реНрддреБ рдЕрд╡рд╕реНрдерд┐рдд рдЫ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдЕрди-рд░рд╛рдЗрдЯ рд╕рд┐рджреНрдзрд╛рдиреНрддрдХреЛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, рдХрдореНрддрд┐рдорд╛ рдПрдЙрдЯрд╛ рд▓реЗрдирджреЗрдирджреНрд╡рд╛рд░рд╛ рд╕рдиреНрджрд░реНрднрд┐рдд рднрдПрд╕рдореНрдо рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рдиреНрдЫред рдПрдХреИ рд╕рдордпрдорд╛, рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЕрдиреНрддрд┐рдо рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реБрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, рдкреГрд╖реНрдард╣рд░реВ рдирдпрд╛рдБ рдбреЗрдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреБрди: рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрджрд┐ рд╡рд╕реНрддреБрд╣рд░реВ рд▓реЗрдирджреЗрди рдмрд╛рдБрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЙрддреНрдкрдиреНрди рдЧрд░реЗрдХреЛ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВ рдЕрдЭреИ рдкрдирд┐ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрдкрд░реНрдЫред
  2. рд░рд┐рдбрд░рд╛рдИрдЯ рд▓реЗрдирджреЗрдирдХреЛ рд▓рд╛рдЧрд┐, рдирддрд┐рдЬрд╛ рдорд╛рди рд╕рдВрд░рдЪрдирд╛рдорд╛ рд╕реВрдЪрдХ рдкрд╣рд┐рд▓реЛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдбреЗрдЯрд╛ рд▓реЗрдЦреНрдиреЗ рд╡рд╛ рдореЗрдЯрд╛рдЙрдиреЗ) рд╕рдореНрдо рдорд╛рддреНрд░ рдорд╛рдиреНрдп рд╣реБрдиреЗрдЫред
  3. рдпрджреНрдпрдкрд┐ рд╕рдВрд░рдЪрдирд╛ NodeValue рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╣реЛрдЗрди, рддрд░ рдЯреНрд░рд┐рдо рдЧрд░рд┐рдПрдХреЛ (рдЙрдкрдЦрдгреНрдб "рдмрд╛рд╣реНрдп рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдЕрд░реНрдбрд░ рдЧрд░реНрдиреЗ" рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН), рддрдкрд╛рдИрдВрд▓реЗ рд╕реВрдЪрдХ рдорд╛рд░реНрдлрдд рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдпрд╕рдХреЛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдореБрдЦреНрдп рдХреБрд░рд╛ рдпреЛ dereference рдЫреИрди!
  4. рдХреБрдиреИ рдкрдирд┐ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдорд╛ рдкреНрд░рд╛рдкреНрдд рд╕реВрдЪрдХ рдорд╛рд░реНрдлрдд рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрдиреБ рд╣реБрдБрджреИрдиред рд╕рдмреИ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рдзрд┐ рдорд╛рд░реНрдлрдд рдорд╛рддреНрд░ рдЧрд░реНрдиреБрдкрд░реНрдЫ mdb_putред рдпрджреНрдпрдкрд┐, рддрдкрд╛рдИрд▓реЗ рдпреЛ рдЧрд░реНрди рдЪрд╛рд╣реЗрдХреЛ рдЬрддрд┐рд╕реБрдХреИ рдХрдард┐рди рднрдПрддрд╛ рдкрдирд┐, рдпреЛ рд╕рдореНрднрд╡ рд╣реБрдиреЗ рдЫреИрди, рдХрд┐рдирдХрд┐ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдЬрд╣рд╛рдБ рдпреЛ рд╕рдВрд░рдЪрдирд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ рдкрдвреНрди рдорд╛рддреНрд░ рдореЛрдбрдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдПрдХреЛ рдЫред
  5. рдлрд╛рдЗрд▓рд▓рд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдареЗрдЧрд╛рдирд╛ рд╕реНрдкреЗрд╕рдорд╛ рдкреБрди: рдореНрдпрд╛рдк рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдзрд┐рдХрддрдо рднрдгреНрдбрд╛рд░рдг рдЖрдХрд╛рд░ рдмрдврд╛рдЙрдиреБрд╣реЛрд╕реН mdb_env_set_map_size рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рд╕рдмреИ рд▓реЗрдирджреЗрди рд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдирд┐рдХрд╛рдпрд╣рд░реВрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЕрдорд╛рдиреНрдп рдмрдирд╛рдЙрдБрдЫ рд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╕реНрддреБрд╣рд░реВрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред

рдЕрдиреНрддрдорд╛, рдЕрд░реНрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрддрд┐ рдХрдкрдЯреА рдЫ рдХрд┐ рдпрд╕рдХреЛ рд╕рд╛рд░ рдкреНрд░рдХрдЯ рдЧрд░реНрдиреБ рдЕрд░реНрдХреЛ рдЕрдиреБрдЪреНрдЫреЗрджрдорд╛ рдлрд┐рдЯ рд╣реБрдБрджреИрдиред рдмреА-рдЯреНрд░реАрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЕрдзреНрдпрд╛рдпрдорд╛, рдореИрд▓реЗ рдпрд╕рдХреЛ рдкреГрд╖реНрдард╣рд░реВ рдореЗрдореЛрд░реАрдорд╛ рдХрд╕рд░реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЫрдиреН рднрдиреЗрд░ рдЪрд┐рддреНрд░рдг рджрд┐рдПрдБред рдпреЛ рдХреНрд░рдордмрджреНрдз рдбрд╛рдЯрд╛ рд╕рдВрдЧ рдмрдлрд░ рдХреЛ рд╢реБрд░реБрд╡рд╛рдд рдХреЛ рдареЗрдЧрд╛рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдордирдорд╛рдирд╛ рд╣реБрди рд╕рдХреНрдЫ рдХрд┐ рдпрд╕рдмрд╛рдЯ рдкрдЫреНрдпрд╛рдЙрдБрдЫред рдпрд╕ рдХрд╛рд░рдг, рд╕рдВрд░рдЪрдирд╛рдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рднрдпреЛ MDB_val рд░ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реВрдЪрдХрдорд╛ рдШрдЯрд╛рдЗрдпреЛ, рдпреЛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЕрд╕рдВрд░реЗрдЦрд┐рдд рд╣реБрдиреНрдЫред рдПрдХреИ рд╕рдордпрдорд╛, рдХреЗрд╣рд┐ рдЪрд┐рдкреНрд╕ рдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЖрдИрдУрдПрд╕ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ рдпреЛ armv7 рд╣реЛ) рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫ рдХрд┐ рдХреБрдиреИ рдкрдирд┐ рдбрд╛рдЯрд╛ рдХреЛ рдареЗрдЧрд╛рдирд╛ рдореЗрд╕рд┐рди рд╢рдмреНрдж рдХреЛ рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рдЧреБрдгрди рд╣реЛ рд╡рд╛, рдЕрдиреНрдп рд╢рдмреНрджрд╣рд░реБрдорд╛, рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрд┐рдЯ рдЖрдХрд╛рд░ (ред armv7 рдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ 32 рдмрд┐рдЯ рд╣реЛ)ред рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдПрдХ рдЕрдкрд░реЗрд╢рди рдЬрд╕реНрддреИ *(int *foo)0x800002 рддрд┐рдиреАрд╣рд░реВрдорд╛ рднрд╛рдЧреНрди рдмрд░рд╛рдмрд░ рдЫ рд░ рдПрдХ рдирд┐рд░реНрдгрдп рд╕рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рд▓реИрдЬрд╛рдиреНрдЫ EXC_ARM_DA_ALIGNред рдпрд╕реНрддреЛ рджреБрдЦрдж рднрд╛рдЧреНрдп рдЬреЛрдЧрд┐рди рджреБрдИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреНред

рдкрд╣рд┐рд▓реЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкрдЩреНрдХреНрддрд┐рдмрджреНрдз рд╕рдВрд░рдЪрдирд╛рдорд╛ рдбреЗрдЯрд╛рдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рддрд▓ рдЙрдмрд▓рд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЕрдиреБрдХреВрд▓рди рддреБрд▓рдирд╛рдХрд░реНрддрд╛рдорд╛ рдпреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рд╣реБрдиреЗрдЫред

int compare(MDB_val * const a, MDB_val * const b) {
    NodeKey aKey, bKey;
    memcpy(&aKey, a->mv_data, a->mv_size);
    memcpy(&bKey, b->mv_data, b->mv_size);
    return // ...
}

рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ рдХрдореНрдкрд╛рдЗрд▓рд░рд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реВрдЪрд┐рдд рдЧрд░реНрдиреБ рд╣реЛ рдХрд┐ рдХреБрдЮреНрдЬреА-рдорд╛рди рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рд╡рд┐рд╢реЗрд╖рддрд╛-рдкрдЩреНрдХреНрддрд┐рдмрджреНрдз рдирд╣реБрди рд╕рдХреНрдЫред aligned(1)ред ARM рдорд╛ рддрдкрд╛рдЗрдБрд▓реЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрдиреЗ рд░ рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред рдпрд╕рд▓реЗ рд╕рдВрд░рдЪрдирд╛рд▓реЗ рдУрдЧрдЯреЗрдХреЛ рдард╛рдЙрдБрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рдкрдирд┐ рдорджреНрджрдд рдЧрд░реНрджрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ, рдпреЛ рд╡рд┐рдзрд┐ рдорд▓рд╛рдИ рдЙрдкрдпреБрдХреНрдд рджреЗрдЦрд┐рдиреНрдЫ, рдпрджреНрдпрдкрд┐ ╨┐╤А╨╕╨▓╨╛╨┤╨╕╤В рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд▓рд╛рдЧрддрдорд╛ рд╡реГрджреНрдзрд┐ рдЧрд░реНрдиред

typedef struct __attribute__((packed)) NodeKey {
    uint8_t parentId;
    uint8_t type;
    uint8_t nameLength;
    uint8_t nameBuffer[256];
} NodeKey;

рджрд╛рдпрд░рд╛ рдкреНрд░рд╢реНрдирд╣рд░реВ

рд░реЗрдХрд░реНрдбрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдорд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЧрд░реНрди, LMDB рд▓реЗ рдХрд░реНрд╕рд░ рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрд░рд┐рдЪрд┐рдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд╛рдЙрдб рдореЗрдЯрд╛рдбрд╛рдЯрд╛рдХреЛ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рдХреЛ рд╕рд╛рде рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╣реЗрд░реМрдВред

рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рдпрд╕рдХреЛ рдЪрд╛рдЗрд▓реНрдб рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдлреЛрд▓реНрдбрд░рд╣рд░реВ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдмреИ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрдкрдЦрдгреНрдбрд╣рд░реВрдорд╛ рд╣рд╛рдореАрд▓реЗ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдпреМрдВ NodeKey рдЬрд╕реНрддреИ рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдореБрдЦреНрдп рд░реВрдкрдорд╛ рдЕрднрд┐рднрд╛рд╡рдХ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ ID рджреНрд╡рд╛рд░рд╛ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдпрд╕рд░реА, рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд░реВрдкрдорд╛, рдлреЛрд▓реНрдбрд░рдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдп рджрд┐рдЗрдПрдХреЛ рдЙрдкрд╕рд░реНрдЧрдХреЛ рд╕рд╛рде рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдХреЛ рдорд╛рдерд┐рд▓реНрд▓реЛ рд╕рд┐рдорд╛рдирд╛рдорд╛ рдХрд░реНрд╕рд░ рд░рд╛рдЦреНрдиреЗ рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд▓реНрд▓реЛ рд╕реАрдорд╛рдорд╛ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрди рддрд▓ рдЖрдЙрдБрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдорд╛рдерд┐рд▓реНрд▓реЛ рд╕реАрдорд╛ рд╕реАрдзрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЦреЛрдЬ рджреНрд╡рд╛рд░рд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдХрд░реНрд╕рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕реВрдЪреАрдХреЛ рд╕реБрд░реБрдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫ рд░ рдпрд╕рдХреЛ рддрд▓ рдореВрд▓ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рдХреЛ рд╕рд╛рде рдХреБрдЮреНрдЬреА рдирджреЗрдЦреНрджрд╛рд╕рдореНрдо рдердк рд╡реГрджреНрдзрд┐ рд╣реБрдиреНрдЫред рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдорд╛ 2 рд╕реНрдкрд╖реНрдЯ рд╣рд╛рдирд┐рд╣рд░реВ рдЫрдиреН:

  1. рд░реИрдЦрд┐рдХ рдЦреЛрдЬ рдЬрдЯрд┐рд▓рддрд╛, рдпрджреНрдпрдкрд┐, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рд░реВрдЦрд╣рд░реВрдорд╛ рд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ B-рдЯреНрд░реАрдорд╛ рдпреЛ рд▓рдЧрд░рд┐рджрдорд┐рдХ рд╕рдордпрдорд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
  2. рд╡реНрдпрд░реНрдердорд╛, рдЦреЛрдЬрд┐рдПрдХреЛ рднрдиреНрджрд╛ рдЕрдШрд┐рдХрд╛ рд╕рдмреИ рдкреГрд╖реНрдард╣рд░реВ рдлрд╛рдЗрд▓рдмрд╛рдЯ рдореБрдЦреНрдп рдореЗрдореЛрд░реАрдорд╛ рдЙрдард╛рдЗрдиреНрдЫ, рдЬреБрди рдЕрддреНрдпрдиреНрдд рдорд╣рдБрдЧреЛ рдЫред

рд╕реМрднрд╛рдЧреНрдпрд╡рд╢, LMDB API рд▓реЗ рдХрд░реНрд╕рд░рд▓рд╛рдИ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд░реВрдкрдорд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рддрд░рд┐рдХрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдПрдЙрдЯрд╛ рдХреБрдЮреНрдЬреА рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рдХреЛ рдорд╛рди рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдЕрдиреНрддрд░рд╛рд▓рдХреЛ рдорд╛рдерд┐рд▓реНрд▓реЛ рд╕реАрдорд╛рдорд╛ рд░рд╣реЗрдХреЛ рдХреБрдЮреНрдЬреАрднрдиреНрджрд╛ рдХрдо рд╡рд╛ рдмрд░рд╛рдмрд░ рдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдорд╛рдерд┐рдХреЛ рдЪрд┐рддреНрд░рдорд╛ рд╕реВрдЪреАрдХреЛ рд╕рдореНрдмрдиреНрдзрдорд╛, рд╣рд╛рдореА рдХреБрдЮреНрдЬреА рдмрдирд╛рдЙрди рд╕рдХреНрдЫреМрдВ рдЬрд╕рдорд╛ рдлрд┐рд▓реНрдб parentId 2 рдмрд░рд╛рдмрд░ рд╣реБрдиреЗрдЫ, рд░ рдмрд╛рдБрдХреА рд╕рдмреИ рд╢реВрдиреНрдпрд▓реЗ рднрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдпрд╕реНрддреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдкрдорд╛ рднрд░рд┐рдПрдХреЛ рдХреБрдЮреНрдЬреА рдкреНрд░рдХрд╛рд░реНрдп рдЗрдирдкреБрдЯрдорд╛ рдЖрдкреВрд░реНрддрд┐ рдЧрд░рд┐рдиреНрдЫ mdb_cursor_get рд╕рдЮреНрдЪрд╛рд▓рди рд╕рдВрдХреЗрдд рдЧрд░реНрджреИ MDB_SET_RANGEред

NodeKey upperBoundSearchKey = {тАЛ
    .parentId = 2,тАЛ
    .type = 0,тАЛ
    .nameLength = 0тАЛ
};тАЛ
MDB_val value, key = serialize(upperBoundSearchKey);тАЛ
MDB_cursor *cursor;тАЛ
mdb_cursor_open(..., &cursor);тАЛ
mdb_cursor_get(cursor, &key, &value, MDB_SET_RANGE);

рдпрджрд┐ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдХреЛ рдорд╛рдерд┐рд▓реНрд▓реЛ рд╕рд┐рдорд╛рдирд╛ рдлреЗрд▓рд╛ рдкрд░реНрдпреЛ рднрдиреЗ, рд╣рд╛рдореА рддреНрдпрд╕рд▓рд╛рдИ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрджрдЫреМрдВ рдЬрдмрд╕рдореНрдо рдХрд┐ рд╣рд╛рдореА рднреЗрдЯреНрджреИрдиреМрдВ рд╡рд╛ рдХреБрдЮреНрдЬреАрд▓реЗ рдЕрд░реНрдХреЛрд▓рд╛рдИ рднреЗрдЯреНрджреИрдиреМрдВред parentId, рд╡рд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рд╕рдмреИ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫреИрдиред

do {тАЛ
    rc = mdb_cursor_get(cursor, &key, &value, MDB_NEXT);тАЛ
    // processing...тАЛ
} while (MDB_NOTFOUND != rc && // check end of tableтАЛ
         IsTargetKey(key));    // check end of keys groupтАЛтАЛ

рдХреЗ рд░рд╛рдореНрд░реЛ рдЫ рдХрд┐ mdb_cursor_get рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдХреБрдЮреНрдЬреА рдорд╛рддреНрд░ рд╣реЛрдЗрди, рдорд╛рди рдкрдирд┐ рдкрд╛рдЙрдБрдЫреМрдВред рдпрджрд┐, рдирдореВрдирд╛ рд╕рд░реНрддрд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЕрдиреНрдп рдЪреАрдЬрд╣рд░реВ рдмреАрдЪ, рд░реЗрдХрд░реНрдбрдХреЛ рдорд╛рди рднрд╛рдЧрдмрд╛рдЯ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╢рд╛рд░рд╛рд╣рд░реВ рдмрд┐рдирд╛ рдиреИ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдЫрдиреНред

рек.рейред рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ рдореЛрдбрд▓рд┐рдЩ рд╕рдореНрдмрдиреНрдз

рдЕрд╣рд┐рд▓реЗ рд╕рдореНрдо, рд╣рд╛рдореАрд▓реЗ рдПрдХрд▓-рдЯреЗрдмрд▓ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рд░ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдмреИ рдкрдХреНрд╖рд╣рд░реВрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред рд╣рд╛рдореА рднрдиреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдПрдЙрдЯреИ рдкреНрд░рдХрд╛рд░рдХреЛ рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реА рдХреНрд░рдордмрджреНрдз рд░реЗрдХрд░реНрдбрд╣рд░реВрдХреЛ рд╕реЗрдЯ рд╣реЛред рдпрджрд┐ рддрдкрд╛рдИрдБрд▓реЗ рдПрдЙрдЯрд╛ рдЖрдпрддрд╛рдХрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдХреБрдЮреНрдЬреА рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░рдХреЛ рд░реВрдкрдорд╛ рд╕рдореНрдмрджреНрдз рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдБрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рднрд┐рдЬреБрдЕрд▓ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫред

тАЛ

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдпрджреНрдпрдкрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирдорд╛ рдпреЛ рдереЛрд░реИ рд░рдХреНрддрдкрд╛рдд рд╕рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╡рд┐рд░рд▓реИ рд╕рдореНрднрд╡ рдЫред рдкреНрд░рд╛рдп: рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдпреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫ, рдкрд╣рд┐рд▓реЛ, рдзреЗрд░реИ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд╣реБрдиреБ рдкрд░реНрдЫ, рд░ рджреЛрд╕реНрд░реЛ, рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреА рднрдиреНрджрд╛ рдлрд░рдХ рдХреНрд░рдордорд╛ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдЪрдпрди рдЧрд░реНрдиред рдпреЛ рдЕрдиреНрддрд┐рдо рдЦрдгреНрдб рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдЕрдиреНрддрд░рд╕рдореНрдмрдиреНрдзрдХрд╛ рдореБрджреНрджрд╛рд╣рд░реВрдорд╛ рд╕рдорд░реНрдкрд┐рдд рдЫред

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ

рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ "рдЧреНрдпрд╛рд▓реЗрд░реА" рдЦрдгреНрдб рдЫред рдпрд╕рд▓реЗ рдорд┐рддрд┐ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдЧрд░реА рд╕рдореНрдкреВрд░реНрдг рдХреНрд▓рд╛рдЙрдбрдмрд╛рдЯ рдорд┐рдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫред рдпрд╕реНрддреЛ рдЪрдпрдирд▓рд╛рдИ рдЗрд╖реНрдЯрддрдо рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди, рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдЫреЗрдЙрдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рдирдпрд╛рдБ рдкреНрд░рдХрд╛рд░рдХреЛ рдХреБрдЮреНрдЬреАрд╣рд░реВрд╕рдБрдЧ рдЕрд░реНрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд┐рдиреАрд╣рд░реВрдорд╛ рдлрд╛рдИрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рднрдПрдХреЛ рдорд┐рддрд┐ рднрдПрдХреЛ рдлрд┐рд▓реНрдб рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫ, рдЬрд╕рд▓реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреНрд░рдордмрджреНрдз рдорд╛рдкрджрдгреНрдбрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрдиреЗрдЫред рдирдпрд╛рдБ рдХреБрдЮреНрдЬреАрд╣рд░реВрд▓реЗ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдорд╛ рднрдПрдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдЬрд╕реНрддреИ рдбреЗрдЯрд╛рд▓рд╛рдИ рд╕рдиреНрджрд░реНрдн рдЧрд░реНрдиреЗ рд╣реБрдирд╛рд▓реЗ, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рднрдирд┐рдиреНрдЫред рддрд▓ рдЪрд┐рддреНрд░рдорд╛ рддрд┐рдиреАрд╣рд░реВ рд╕реБрдиреНрддрд▓рд╛рдорд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдПрдЙрдЯреИ рдбрд╛рдЯрд╛рдмреЗрд╕ рднрд┐рддреНрд░ рдлрд░рдХ-рдлрд░рдХ рддрд╛рд▓рд┐рдХрд╛рдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рдмрд╛рдЯ рдЕрд▓рдЧ рдЧрд░реНрди, рддрд┐рдиреАрд╣рд░реВ рд╕рдмреИрдорд╛ рдердк рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдлрд┐рд▓реНрдб tableId рдердкрд┐рдпреЛред рдпрд╕рд▓рд╛рдИ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджрд┐рдПрд░, рд╣рд╛рдореА рд╣рд╛рдореНрд░рд╛ рдЖрдлреНрдиреИ рдирд┐рдпрдорд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛, рд░ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рднрд┐рддреНрд░ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдмрджреНрдзрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрдиреЗрдЫреМрдВред

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреБрдЮреНрдЬреАрд▓реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреАрдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рдбреЗрдЯрд╛рд▓рд╛рдИ рд╕рдиреНрджрд░реНрдн рдЧрд░реНрджрдЫред рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреАрдХреЛ рдорд╛рди рдЕрдВрд╢рдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рд╕рдБрдЧ рд╕рдореНрдмрджреНрдз рдЧрд░реЗрд░ рдпрд╕ рдЧреБрдгрдХреЛ рд╕реАрдзрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдзреЗрд░реИ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдЗрд╖реНрдЯрддрдо рдЫреИрди:

  1. рд▓рд┐рдЗрдПрдХреЛ рдард╛рдЙрдБрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдзреЗрд░реИ рдзрдиреА рд╣реБрди рд╕рдХреНрдЫред
  2. рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ, рдиреЛрдбрдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рджреБрдИ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рдкреБрди: рд▓реЗрдЦреНрдиреБрдкрд░реНрдиреЗрдЫред
  3. рдХреЛрдб рд╕рдорд░реНрдердирдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдХреБрдЮреНрдЬреАрдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рдЧрд░реНрди рдмрд┐рд░реНрд╕реНрдпреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рднрдгреНрдбрд╛рд░рдгрдорд╛ рдбрд╛рдЯрд╛ рдЕрд╕рдВрдЧрддрддрд╛рдХреЛ рдорд╛рдпрд╛рд▓реБ рдмрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВред

рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдпреА рдХрдордЬреЛрд░реАрд╣рд░реВрд▓рд╛рдИ рдХрд╕рд░реА рд╣рдЯрд╛рдЙрдиреЗ рднрдиреЗрд░ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред

рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдмреАрдЪ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрджреИ

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрд╛рд▓рд┐рдХрд╛рд▓рд╛рдИ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рд╕рдБрдЧ рдЬреЛрдбреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдврд╛рдБрдЪрд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдЙрдкрдпреБрдХреНрдд рдЫ "рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рдХреБрдЮреНрдЬреА"ред рдпрд╕рдХреЛ рдирд╛рдорд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫ, рд╕реВрдЪрдХрд╛рдВрдХ рд░реЗрдХрд░реНрдбрдХреЛ рдорд╛рди рднрд╛рдЧ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреА рдорд╛рдирдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реЛред рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рдкреНрд░рд╛рдердорд┐рдХ рд░реЗрдХрд░реНрдбрдХреЛ рдорд╛рди рдЕрдВрд╢рдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рднрдгреНрдбрд╛рд░рдгрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдмреИ рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣рд╛рдирд┐рд╣рд░реВрд▓рд╛рдИ рд╣рдЯрд╛рдЙрдБрдЫред рдХреЗрд╡рд▓ рд▓рд╛рдЧрдд рдпреЛ рд╣реЛ рдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреБрдЮреНрдЬреА рджреНрд╡рд╛рд░рд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рддрдкрд╛рдИрд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕рдорд╛ рдПрдЙрдЯрд╛рдХреЛ рд╕рдЯреНрдЯрд╛ 2 рдкреНрд░рд╢реНрдирд╣рд░реВ рдмрдирд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдкрдорд╛, рдирддрд┐рдЬрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдмреАрдЪ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рдЕрд░реНрдХреЛ рдврд╛рдБрдЪрд╛ рд╣реЛ "рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреБрдЮреНрдЬреА"ред рдпрд╕рдХреЛ рд╕рд╛рд░ рдХреБрдЮреНрдЬреАрдорд╛ рдердк рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ рдердкреНрдиреБ рд╣реЛ, рдЬреБрди рдХреНрд░рдордмрджреНрдз рдЧрд░реНрди рд╣реЛрдЗрди, рддрд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреБрдЮреНрдЬреА рдкреБрди: рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред Mail.ru рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреН, рддрдерд╛рдкрд┐, рдЧрд╣рд┐рд░реЛ рдбреБрдмреНрдирдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ред рд╡рд┐рд╢рд┐рд╖реНрдЯ iOS рдлреНрд░реЗрдорд╡рд░реНрдХрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, рдо рдПрдЙрдЯрд╛ рдХрд╛рд▓реНрдкрдирд┐рдХ, рддрд░ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджрд┐рдиреЗрдЫреБ

рдХреНрд▓рд╛рдЙрдб рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВрд╕рдБрдЧ рдПрдХ рдкреГрд╖реНрда рдЫ рдЬрд╕рд▓реЗ рд╕рдмреИ рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдлреЛрд▓реНрдбрд░рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫ рдЬреБрди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд╕рдБрдЧ рд╕рд╛рдЭреЗрджрд╛рд░реА рдЧрд░реЗрдХреЛ рдЫред рддреНрдпрд╕реНрддрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдкрдорд╛ рдереЛрд░реИ рднрдПрдХрд╛рд▓реЗ, рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреНрд░рдЪрд╛рд░рдХреЛ рдмрд╛рд░реЗрдорд╛ рдзреЗрд░реИ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реАрд╣рд░реВ рдЫрдиреН (рдХрд╕рд▓рд╛рдИ рдкрд╣реБрдБрдЪ рджрд┐рдЗрдПрдХреЛ рдЫ, рдХреБрди рдЕрдзрд┐рдХрд╛рд░рд╣рд░реВ, рдЖрджрд┐) рдХреЛ рдореВрд▓реНрдп рдЕрдВрд╢ рдмреЛрдЭ рдЧрд░реНрдиреБ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реБрдиреЗрдЫреИрдиред рдпрд╕рдХреЛ рд╕рд╛рде рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд░реЗрдХрд░реНрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджреНрдпрдкрд┐, рдпрджрд┐ рддрдкрд╛рдЗрдБ рддреНрдпрд╕реНрддрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдЕрдлрд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдЕрдЭреИ рдкрдирд┐ рдпрд╕рд▓рд╛рдИ рдХрддреИ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдорд╛рдзрд╛рди рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдЙрдиреБ рд╣реЛред рддрд▓рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рдорд╛, рдпрд╕рдХреЛ рдХреБрдЮреНрдЬреА "P" рд╕рдБрдЧ рдЙрдкрд╕рд░реНрдЧ рд▓рдЧрд╛рдЗрдПрдХреЛ рдЫ, рд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ "рдкреНрд░реЛрдкрдиреЗрдо" рд▓рд╛рдИ рдердк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЬрд╛рдирдХрд╛рд░реА" рд╕рдВрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рд╕рдмреИ рдЕрджреНрд╡рд┐рддреАрдп рдореЗрдЯрд╛рдбреЗрдЯрд╛, рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЬреБрди рдирдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рд░реЗрдХрд░реНрдбрдХреЛ рдорд╛рди рднрд╛рдЧрдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫред рдПрдХреИ рд╕рдордпрдорд╛, рддрдкрд╛рдИрдВ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдлреЛрд▓реНрдбрд░рд╣рд░реВ рдмрд╛рд░реЗ рдбрд╛рдЯрд╛ рдирдХреНрдХрд▓ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдиред рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ "P" рдХреБрдЮреНрдЬреАрдорд╛ "рдиреЛрдб ID" рд░ "рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк" рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдердкрд┐рдПрдХреЛ рдЫред рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рдж, рддрдкрд╛рдИрдВрд▓реЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреБрдЮреНрдЬреА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рдмрд╛рдЯ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рдмрд╛рдЯ, рдЕрдиреНрддрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдиреЛрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдирд┐рд╖реНрдХрд░реНрд╖

рд╣рд╛рдореА LMDB рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдирддрд┐рдЬрд╛рд▓рд╛рдИ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдкрдорд╛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрдЫреМрдВред рдпрд╕рдХреЛ рдкрдЫрд┐, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдлреНрд░рд┐рдЬрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ 30% рд▓реЗ рдШрдЯреНрдпреЛред

рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдореБрдЦреНрдп-рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕ LMDB рдХреЛ рдЪрдордХ рд░ рдЧрд░реАрдмреА

рдЧрд░реЗрдХреЛ рдХрд╛рдордХреЛ рдирддрд┐рдЬрд╛ рдЖрдИрдУрдПрд╕ рдЯреЛрд▓реА рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рднрдпреЛред рд╣рд╛рд▓, рдПрдиреНрдбреНрд░реЛрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдореБрдЦреНрдп "рдлрд╛рдЗрд▓" рдЦрдгреНрдбрд╣рд░реВ рдордзреНрдпреЗ рдПрдХрд▓реЗ рдкрдирд┐ LMDB рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реНрд╡рд┐рдЪ рдЧрд░реЗрдХреЛ рдЫ, рд░ рдЕрдиреНрдп рднрд╛рдЧрд╣рд░реВ рдмрд╛рдЯреЛрдорд╛ рдЫрдиреНред C рднрд╛рд╖рд╛, рдЬрд╕рдорд╛ рдХреБрдЮреНрдЬреА-рдорд╛рди рднрдгреНрдбрд╛рд░ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд╕реБрд░реБрдорд╛ C++ рдорд╛ рдХреНрд░рд╕-рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╡рд░рд┐рдкрд░рд┐ рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рдорджреНрджрдд рдерд┐рдпреЛред рдПрдЙрдЯрд╛ рдХреЛрдб рдЬреЗрдиреЗрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реАрдПрдХреЛ C++ рд▓рд╛рдИрдмреНрд░реЗрд░реАрд▓рд╛рдИ рдЙрджреНрджреЗрд╢реНрдп-C рд░ рдХреЛрдЯрд▓рд┐рдирдорд╛ рдкреНрд▓реЗрдЯрдлрд░реНрдо рдХреЛрдбрд╕рдБрдЧ рд╕рд╣рдЬ рд░реВрдкрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдЬрд┐рдиреНрдиреА Dropbox рдмрд╛рдЯ, рддрд░ рддреНрдпреЛ рдПрдХрджрдо рдлрд░рдХ рдХрдерд╛ рд╣реЛред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди