iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

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

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

1. рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдкреНрд░реЗрд░рдгрд╛

2015 рдордзреНрдпреЗ рдПрдХ рд╡рд░реНрд╖, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд┐рддреА рд╡реЗрд│рд╛ рдорд╛рдЧреЗ рдкрдбрддреЛ рд╣реЗ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рддреНрд░рд╛рд╕ рдШреЗрддрд▓рд╛. рдЖрдореНрд╣реА рд╣реЗ рдПрдХрд╛ рдХрд╛рд░рдгрд╛рд╕рд╛рдареА рдХреЗрд▓реЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рд░рдВрд╡рд╛рд░ рддрдХреНрд░рд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛ рдЖрд╣реЗрдд рдХреА рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдВрдирд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдгреЗ рдерд╛рдВрдмрд╡рддреЛ: рдмрдЯрдгреЗ рджрд╛рдмрд▓реА рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реАрдд, рд╕реВрдЪреА рд╕реНрдХреНрд░реЛрд▓ рдХрд░рдд рдирд╛рд╣реАрдд рдЗ. рдореЛрдЬрдорд╛рдкрд╛рдВрдЪреНрдпрд╛ рдпрд╛рдВрддреНрд░рд┐рдХреАрдмрджреНрджрд▓ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ AvitoTech рд╡рд░, рдореНрд╣рдгреВрди рдореА рдпреЗрдереЗ рдлрдХреНрдд рд╕рдВрдЦреНрдпрд╛рдВрдЪрд╛ рдХреНрд░рдо рджреЗрддреЛ.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдорд╛рдкрди рдкрд░рд┐рдгрд╛рдо рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдердВрдб рд╢реЙрд╡рд░ рдмрдирд▓реЗ. рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдлреНрд░реАрдЭрдореБрд│реЗ рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдорд╕реНрдпрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗрдд. рдЬрд░ рд╣реА рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЧреБрдгрд╡рддреНрддреЗрдЪреЗ рдореБрдЦреНрдп рддрд╛рдВрддреНрд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢рдХ рдХреНрд░реЕрд╢ рдореБрдХреНрдд рд╣реЛрддреЗ, рдирдВрддрд░ рдлреЛрдХрд╕ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдлреНрд░реАрдЬ рдлреНрд░реА рд╡рд░.

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

рд╕рд┐рд╕реНрдЯрдо рдСрд░реНрдЧрдирд╛рдпрдЭреЗрд╢рдирдЪреЗ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбреЗрд▓ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЗ рдХреА рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рддреНрдпрд╛рдЪреЗ рджреБрд╕рд░реЗ рд╕рд╛рд░ рдмрдирддреЗ. рддреНрдпрд╛рддреАрд▓ рдореЙрдбреЗрд▓ рд╡рд╕реНрддреВрдВрдирд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдЪреНрдпрд╛ рд╕реАрдорд╛ рдУрд▓рд╛рдВрдбрдгреЗ рдЖрд╡рдбрддреЗ. рдЖрдгрд┐ рддреЗ рд╣реЗ рдХрдзреА-рдХрдзреА рдЖрдгрд┐ рдЗрдХрдбреЗ-рддрд┐рдХрдбреЗ рдХрд░рдд рдирд╛рд╣реАрдд, рддрд░ рдЬрд╡рд│рдЬрд╡рд│ рд╕рддрдд рдЖрдгрд┐ рд╕рдЧрд│реАрдХрдбреЗ рдХрд░рддрд╛рдд

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреАрдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рдирд┐рд╡рдбреАрд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рдгрд╛рд░рд╛ рджреБрд╕рд░рд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдШрдЯрдХ рдореНрд╣рдгрдЬреЗ рдЖрдордЪрд╛ рдХреНрд▓рд╛рдЙрдб API. рд╣реЗ рдЧрд┐рдЯрдиреЗ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗрд▓реНрдпрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдпрдЭреЗрд╢рдирдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рдкреНрд░реЗрд░рд┐рдд рд╣реЛрддреЗ. рддреНрдпрд╛рдЪреНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдореНрд╣реА рд▓рдХреНрд╖реНрдп рдХреЗрд▓реЗ рдСрдлрд▓рд╛рдЗрди-рдкреНрд░рдердо API, рдЬреЗ рдХреНрд▓рд╛рдЙрдб рдХреНрд▓рд╛рдпрдВрдЯрд╕рд╛рдареА рдпреЛрдЧреНрдп рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рджрд┐рд╕рддреЗ. рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ рдХреА рддреЗ рдлрдХреНрдд рдПрдХрджрд╛рдЪ рдХреНрд▓рд╛рдЙрдбрдЪреА рд╕рдВрдкреВрд░реНрдг рд╕реНрдерд┐рддреА рдкрдВрдк рдХрд░рддреАрд▓ рдЖрдгрд┐ рдирдВрддрд░ рдмрд╣реБрд╕рдВрдЦреНрдп рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рд░реЛрд▓ рдЖрдЙрдЯ рдмрджрд▓рд╛рдВрджреНрд╡рд╛рд░реЗ рд╣реЛрдИрд▓. рдЕрд░реЗрд░реЗ, рд╣реА рд╕рдВрдзреА рдЕрджреНрдпрд╛рдк рдХреЗрд╡рд│ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЭреЛрдирдордзреНрдпреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯрдиреЗ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдкреЕрдЪрд╕рд╣ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рд╡реЗ рд╣реЗ рд╢рд┐рдХрд▓реЗрд▓реЗ рдирд╛рд╣реА. рдпрд╛рдЪреА рдЕрдиреЗрдХ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдХрд╛рд░рдгреЗ рдЖрд╣реЗрдд, рдЬреА рдкрд░рд┐рдЪрдпрд╛рд╕ рдЙрд╢реАрд░ рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдХрдВрд╕ рдорд╛рдЧреЗ рдареЗрд╡реВ. рдЖрддрд╛, рдПрдкреАрдЖрдп рдЬреЗрд╡реНрд╣рд╛ тАЬAтАЭ рдореНрд╣рдгрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдЧреНрд░рд╛рд╣рдХ тАЬBтАЭ рдореНрд╣рдгрдд рдирд╛рд╣реА рддреЗрд╡реНрд╣рд╛ рдХрд╛рдп рд╣реЛрддреЗ рдпрд╛рдмрджреНрджрд▓ рдзрдбреНрдпрд╛рдЪреЗ рдмреЛрдзрдкреНрд░рдж рдирд┐рд╖реНрдХрд░реНрд╖ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рд░рд╕реНрдпрдкреВрд░реНрдг рдЖрд╣реЗрдд.

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

рдЗрддрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдзрд┐рдХ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╕рдВрдкреВрд░реНрдг рдпрд╛рджреА рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ.

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

2. LMDB рдкреЛрдЭрд┐рд╢рдирд┐рдВрдЧ

LMDB рд╣реА рдПрдХ рдЕрддрд┐рд╢рдп рд▓рд╣рд╛рди рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╣реЗ (рдлрдХреНрдд 10K рдкрдВрдХреНрддреА) рдЬреА рдбреЗрдЯрд╛рдмреЗрд╕рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдХрдореА рдореВрд▓рднреВрдд рд╕реНрддрд░ - рд╕реНрдЯреЛрд░реЗрдЬ рд▓рд╛рдЧреВ рдХрд░рддреЗ.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рд╡рд░реАрд▓ рдЖрдХреГрддреА рджрд░реНрд╢рд╡рд┐рддреЗ рдХреА SQLite рд╕рд╣ LMDB рдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреЗ, рдЬреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рджреЗрдЦреАрд▓ рд▓рд╛рдЧреВ рдХрд░рддреЗ, рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХреЛрд░ рдбреЗрдЯрд╛рд╕рд╣ SQLite рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдирд╛рд╣реА. рд╕рдорд╛рди рд╕реНрдкрд░реНрдзрдХ - BerkeleyDB, LevelDB, Sophia, RocksDB, рдЗ. рд╕рд╛рд░рдЦреНрдпрд╛рдЪ рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЬрд┐рдирд╛рдВрдирд╛ рдЙрджреНрдзреГрдд рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдард░реЗрд▓. LMDB рд╣реЗ SQLite рд╕рд╛рдареА рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЬрд┐рди рдШрдЯрдХ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░рддреЗ рдЕрд╢рд╛рд╣реА рдХрд╛рд╣реА рдШрдбрд╛рдореЛрдбреА рдЖрд╣реЗрдд. рдЕрд╕рд╛ рдкрд╣рд┐рд▓рд╛ рдкреНрд░рдпреЛрдЧ 2012 рдордзреНрдпреЗ рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛ рдЦрд░реНрдЪ рдХреЗрд▓рд╛ LMDB рджреНрд╡рд╛рд░реЗ рд╣реЙрд╡рд░реНрдб рдЪреВ. рдирд┐рдХрд╛рд▓ рддреЛ рдЗрддрдХрд╛ рд╡реЗрдзрдХ рдард░рд▓рд╛ рдХреА рддреНрдпрд╛рдЪрд╛ рдЙрдкрдХреНрд░рдо OSS рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдХрд╛рдВрдиреА рдЙрдЪрд▓реВрди рдзрд░рд▓рд╛ рдЖрдгрд┐ рддреНрдпрд╛ рд╡реНрдпрдХреНрддреАрдордзреНрдпреЗ рддреНрдпрд╛рдЪреЗ рд╕рд╛рддрддреНрдп рджрд┐рд╕реВрди рдЖрд▓реЗ LumoSQL. рдЬрд╛рдиреЗрд╡рд╛рд░реА 2020 рдордзреНрдпреЗ, рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд▓реЗрдЦрдХ рдбреЗрди рд╢рд┐рдЕрд░рд░ рд╣реЛрддреЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗ LinuxConfAu рд╡рд░.

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

LMDB рдЕрдиреЗрдХрджрд╛ рдЬрд╕рд╛ рдЖрд╣реЗ рддрд╕рд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, Mozilla Firefox рдмреНрд░рд╛рдЙрдЭрд░ рдирд┐рд╡рдбрд▓реЗ рддреЗ рдЕрдиреЗрдХ рдЧрд░рдЬрд╛рдВрд╕рд╛рдареА рдЖрдгрд┐, рдЖрд╡реГрддреНрддреА 9, Xcode рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрддреЗ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджрд┐рд▓реЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪреЗ SQLite.

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

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

3. LMDB рдЪреЗ рддреАрди рдЦрд╛рдВрдм

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

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

рей.рез. рд╡реНрд╣реЗрд▓ #3.1. рдореЗрдорд░реА-рдореЕрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА

рдореЗрдорд░реА-рдореЕрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА рд╣реЗ рдЗрддрдХреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдШрдЯрдХ рдЖрд╣реЗрдд рдХреА рддреЗ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░ рджреЗрдЦреАрд▓ рджрд┐рд╕рддрд╛рдд. рд╕рдВрдЪрдпрд┐рдд рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдкреНрд░рд╡реЗрд╢рд╛рдЪреНрдпрд╛ рдХреЕрд╢рд┐рдВрдЧ рдЖрдгрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рдирдЪреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдкреВрд░реНрдгрдкрдгреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рд╕реЛрдбрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. LMDB рдордзреНрдпреЗ рд╕реНрд╡рддрдГрдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдХреЕрд╢реЗ рдирд╕рддрд╛рдд. рд╣рд╛ рд▓реЗрдЦрдХрд╛рдЪрд╛ рдЬрд╛рдгреАрд╡рдкреВрд░реНрд╡рдХ рдирд┐рд░реНрдгрдп рдЖрд╣реЗ, рдХрд╛рд░рдг рдереЗрдЯ рдореЕрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реАрдВрдордзреВрди рдбреЗрдЯрд╛ рд╡рд╛рдЪрдгреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЗрдВрдЬрд┐рди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдордзреНрдпреЗ рдмрд░реЗрдЪ рдХреЛрдкрд░реЗ рдХрд╛рдкрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдЦрд╛рд▓реА рддреНрдпрд╛рдкреИрдХреА рдХрд╛рд╣реАрдВрдЪреА рд╕рдВрдкреВрд░реНрдг рдпрд╛рджреА рдирд╛рд╣реА.

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

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

рдореЗрдорд░реА-рдореЕрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рдмрджреНрджрд▓ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд╣рд┐рддреА

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

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

рдкрд╣рд┐рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд░реНрд╡ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ. рдЪреБрдХреАрдЪреНрдпрд╛ рдХреЛрдбрджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕рд▓рд╛ рдЕрдирд╛рд╡рдзрд╛рдирд╛рдиреЗ рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдиреБрдХрд╕рд╛рдирд╛рдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдЬреЛрдбрдгреЗ рд╣реЗ рддреНрдпрд╛рдЪреЗ рд╕рд╛рд░ рдЖрд╣реЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗрдЪ рдХреА, рдПрдЦрд╛рджреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рд╕реВрдЪрдирд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕рдордзреАрд▓ рдХреЛрдареВрдирд╣реА рдбреЗрдЯрд╛ рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗрдд. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдЖрдореНтАНрд╣рд╛рд▓рд╛ рдЖрддреНрддрд╛рдЪ рдЖрдард╡рд▓реНтАНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рд░реАрдб-рд░рд╛рдЗрдЯ рдореЛрдбрдордзреНтАНрдпреЗ рдлрд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНтАНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдХреЛрдгрддреАрд╣реА рд╕реВрдЪрдирд╛ рддреНрдпрд╛рдд рдмрджрд▓ рдХрд░реВ рд╢рдХрддреЗ. рдЬрд░ рддрд┐рдиреЗ рдЪреБрдХреВрди рдЕрд╕реЗ рдХреЗрд▓реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рд╡рд░ рдЕреЕрд░реЗ рдШрдЯрдХ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рддрд░ рддреА рдЪреБрдХреВрди рдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ рдореЕрдк рдХреЗрд▓реЗрд▓реА рдлрд╛рдЗрд▓ рдмрджрд▓реВ рд╢рдХрддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЦрд░рд╛рдм рд╣реЛрдИрд▓. рдЬрд░ рдлрд╛рдЗрд▓ рдХреЗрд╡рд│-рд╡рд╛рдЪрдиреАрдп рдореЛрдбрдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реА рдЧреЗрд▓реА рдЕрд╕реЗрд▓, рддрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкрддреНрддреНрдпрд╛рдЪреА рдЬрд╛рдЧрд╛ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рд╕ рд╕рд┐рдЧреНрдирд▓рд╕рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдкрддреНрдХрд╛рд▓реАрди рд╕рдорд╛рдкреНрдд рд╣реЛрдИрд▓. SIGSEGV, рдЖрдгрд┐ рдлрд╛рдЗрд▓ рдЕрдЦрдВрдб рд░рд╛рд╣реАрд▓.

рджреБрд╕рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдЖрдзреАрдЪ iOS рд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╣реЗ. рд▓реЗрдЦрдХ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрддреНрд░реЛрддрд╛рдВрдиреА рдпрд╛рдЪрд╛ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓реЗрд▓рд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп LMDB рдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЪрд╛рд▓рдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА. рдкреБрдвреАрд▓ рднрд╛рдЧ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рдЪрд╛рд░рд╛рд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдЖрд╣реЗ.

iOS рдордзреАрд▓ рдореЗрдорд░реА-рдореЕрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рдЪреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

рдХреНрд▓рд╛рдЙрдбрдордзреАрд▓ рдкреНрд░рдпреЛрдЧрд╛рдВрдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдЖрдореНрд╣реА LMDB рджреНрд╡рд╛рд░реЗ рд╡рд╛рдЯрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдореЗрдорд░реАрд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рддрдбрдЬреЛрдб рдореВрд▓реНрдпрд╛рдВрд╡рд░ рдЖрд▓реЛ: 384-рдмрд┐рдЯ рдЙрдкрдХрд░рдгрд╛рдВрд╕рд╛рдареА 32 рдореЗрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдЖрдгрд┐ 768-рдмрд┐рдЯ рдЙрдкрдХрд░рдгрд╛рдВрд╕рд╛рдареА 64. рд╣рд╛ рд╡реНрд╣реЙрд▓реНрдпреВрдо рд╡рд╛рдкрд░рд▓реНрдпрд╛рдирдВрддрд░, рдХреЛрдгрддреЗрд╣реА рд╕реБрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрд╢рдиреНрд╕ рдХреЛрдбрд╕рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдК рд▓рд╛рдЧрддрд╛рдд MDB_MAP_FULL. рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдирд┐рд░реАрдХреНрд╖рдгрд╛рдордзреНрдпреЗ рдЕрд╢рд╛ рддреНрд░реБрдЯреА рдкрд╛рд╣рддреЛ, рдкрд░рдВрддреБ рддреНрдпрд╛ рдЗрддрдХреНрдпрд╛ рд▓рд╣рд╛рди рдЖрд╣реЗрдд рдХреА рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

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

рей.реи. рд╡реНрд╣реЗрд▓ #3.2. B+-рд╡реГрдХреНрд╖

рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЦрд╛рд▓реАрд▓ рдСрдкрд░реЗрд╢рдиреНрд╕ рддреНрдпрд╛рдЪреНрдпрд╛ API рдордзреНрдпреЗ рдЙрдкрд╕реНрдерд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  1. рдирд╡реАрди рдШрдЯрдХ рдШрд╛рд▓рдд рдЖрд╣реЗ.
  2. рджрд┐рд▓реЗрд▓реНрдпрд╛ рдХреА рд╕рд╣ рдШрдЯрдХ рд╢реЛрдзрд╛.
  3. рдПрдХ рдШрдЯрдХ рдХрд╛рдвреВрди рдЯрд╛рдХрдд рдЖрд╣реЗ.
  4. рдХрд│рд╛ рдЬреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдХреНрд░рдорд╛рдиреЗ рд▓рд╛рд╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рддреНрдпрд╛ рдордзреНрдпрд╛рдВрддрд░рд╛рдВрд╡рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рд╛.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреАрд╕рд░реНрд╡ рдЪрд╛рд░ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕рд╣рдЬрдкрдгреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгреВ рд╢рдХрдгрд╛рд░реА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреА рдбреЗрдЯрд╛ рд░рдЪрдирд╛ рдореНрд╣рдгрдЬреЗ рдмрд╛рдпрдирд░реА рд╢реЛрдз рд╡реГрдХреНрд╖. рддреНрдпрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдПрдХ рдХреА рджрд░реНрд╢рд╡рддреЗ рдЬреА рдЪрд╛рдЗрд▓реНрдб рдХреАрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЙрдкрд╕рдВрдЪрд╛рд▓рд╛ рджреЛрди рдЙрдкрд╡реГрдХреНрд╖рд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ. рдбрд╛рд╡реАрдХрдбреЗ рдкрд╛рд▓рдХрд╛рдВрдкреЗрдХреНрд╖рд╛ рд▓рд╣рд╛рди рдЕрд╕рд▓реЗрд▓реЗ рдЖрдгрд┐ рдЙрдЬрд╡реНрдпрд╛рдордзреНрдпреЗ рдореЛрдареЗ рдЕрд╕рд▓реЗрд▓реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд. рдХреАрдЬрдЪрд╛ рдСрд░реНрдбрд░ рдХреЗрд▓реЗрд▓рд╛ рд╕рдВрдЪ рдорд┐рд│рд╡рдгреЗ рд╣реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреНрд░реА рдЯреНрд░реЕрд╡реНрд╣рд░реНрд╕рд▓рдкреИрдХреА рдПрдХрд╛рджреНрд╡рд╛рд░реЗ рд╕рд╛рдзреНрдп рдХреЗрд▓реЗ рдЬрд╛рддреЗ

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреАрдмреА-рдЯреНрд░реАрдЬ, рдмрд╛рдпрдирд░реА рдЭрд╛рдбрд╛рдВрдЪреА рдЙрддреНрдХреНрд░рд╛рдВрддреА рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдорд╛рдЧреАрд▓ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рдордзреНрдпреЗ рдУрд│рдЦрд▓реНрдпрд╛ рдЧреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рддрд╛рдд. рдкреНрд░рдердо, рддреЗ рдЖрддреНрдо-рд╕рдВрддреБрд▓рд┐рдд рдЖрд╣реЗрдд. рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рддреНрдпрд╛рдВрдЪреЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЪрд╛рдЗрд▓реНрдб рдХреАрдЪрд╛ рд╕рдВрдЪ 2 рдордзреНрдпреЗ рдирд╛рд╣реА рддрд░ M рдСрд░реНрдбрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЙрдкрд╕рдВрдЪрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ M рд╕рдВрдЦреНрдпрд╛ рдмрд░реАрдЪ рдореЛрдареА рдЕрд╕реВ рд╢рдХрддреЗ, рдЕрдиреЗрдХ рд╢рдВрднрд░ рдХрд┐рдВрд╡рд╛ рд╣рдЬрд╛рд░реЛрдЪреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ.

рддреНрдпрд╛рджреНрд╡рд╛рд░реЗ:

  1. рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрдордзреНрдпреЗ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рдЖрдзреАрдЪ рдСрд░реНрдбрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреА рдЕрд╕рддрд╛рдд рдЖрдгрд┐ рдЭрд╛рдбреЗ рдЦреВрдкрдЪ рд▓рд╣рд╛рди рдЕрд╕рддрд╛рдд.
  2. рдЯреНрд░реА рд╕реНрдореГрддреАрдордзреНрдпреЗ рд╕реНрдерд╛рдирд┐рдХрддреЗрдЪреА рдорд╛рд▓рдорддреНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ, рдХрд╛рд░рдг рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рдЬрд╡рд│ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд│рд╛ рдиреИрд╕рд░реНрдЧрд┐рдХрд░рд┐рддреНрдпрд╛ рд╕рдорд╛рди рдХрд┐рдВрд╡рд╛ рд╢реЗрдЬрд╛рд░рдЪреНрдпрд╛ рдиреЛрдбреНрд╕рд╡рд░ рдПрдХрдореЗрдХрд╛рдВрдЪреНрдпрд╛ рдкреБрдвреЗ рдЕрд╕рддрд╛рдд.
  3. рд╢реЛрдз рдореЛрд╣рд┐рдореЗрджрд░рдореНрдпрд╛рди рдЭрд╛рдбрд╛рд╡рд░ рдЙрддрд░рддрд╛рдирд╛ рдЯреНрд░рд╛рдиреНрдЭрд┐рдЯ рдиреЛрдбреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рд╣реЛрддреЗ.
  4. рд╢реНрд░реЗрдгреА рдХреНрд╡реЗрд░реА рджрд░рдореНрдпрд╛рди рд╡рд╛рдЪрд▓реЗрд▓реНрдпрд╛ рд▓рдХреНрд╖реНрдп рдиреЛрдбреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХреЗрд▓реА рдЬрд╛рддреЗ, рдХрд╛рд░рдг рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рдЖрдзреАрдкрд╛рд╕реВрди рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рдСрд░реНрдбрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреА рдЕрд╕рддрд╛рдд.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

LMDB рдбреЗрдЯрд╛ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА B+ рдЯреНрд░реА рдирд╛рд╡рд╛рдЪреНрдпрд╛ B-рд╡реГрдХреНрд╖рд╛рддреАрд▓ рднрд┐рдиреНрдирддрд╛ рд╡рд╛рдкрд░рддреЗ. рд╡рд░реАрд▓ рдЖрдХреГрддреА рддреНрдпрд╛рдд рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓реЗ рддреАрди рдкреНрд░рдХрд╛рд░рдЪреЗ рдиреЛрдб рджрд░реНрд╢рд╡рддреЗ:

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдкреГрд╖реНтАНрда рдиреЛрдбрд╕реНрдЪреНтАНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдЖрд╢рдпрд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХреЗрд▓реНтАНрдпрд╛рдирдВрддрд░, рдЖрдореНтАНрд╣реА рдкреБрдвреАрд▓ рдлреЙрд░реНрдордордзреНтАНрдпреЗ LMDB B-рдЯреНрд░реАрдЪреЗ рд╕рд░рд▓реАрдХреГрдд рд░реАрддреАрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реВ.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдиреЛрдбреНрд╕ рдЕрд╕рд▓реЗрд▓реА рдкреГрд╖реНрдареЗ рдбрд┐рд╕реНрдХрд╡рд░ рдЕрдиреБрдХреНрд░рдореЗ рд╕реНрдерд┐рдд рдЖрд╣реЗрдд. рдЙрдЪреНрдЪ рдХреНрд░рдорд╛рдВрдХрд╛рдЪреА рдкреГрд╖реНрдареЗ рдлрд╛рдИрд▓рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рд╕реНрдерд┐рдд рдЖрд╣реЗрдд. рддрдерд╛рдХрдерд┐рдд рдореЗрдЯрд╛ рдкреГрд╖реНрдард╛рдордзреНрдпреЗ рдСрдлрд╕реЗрдЯрдЪреА рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡ рдЭрд╛рдбрд╛рдВрдЪреА рдореБрд│реЗ рд╢реЛрдзрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдлрд╛рдЗрд▓ рдЙрдШрдбрддрд╛рдирд╛, рд╡реИрдз рдореЗрдЯрд╛ рдкреГрд╖реНрда рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА LMDB рдлрд╛рдЗрд▓ рдкреГрд╖реНрдард╛рд╕ рдкреГрд╖реНрдард╛рдиреБрд╕рд╛рд░ рд╕реНрдХреЕрди рдХрд░рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рд╡рд┐рджреНрдпрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╢реЛрдзрддреЗ.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдЖрддрд╛, рдбреЗрдЯрд╛ рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рдЖрдгрд┐ рднреМрддрд┐рдХ рд░рдЪрдиреЗрдЪреА рдХрд▓реНрдкрдирд╛ рдЖрд▓реНрдпрд╛рд╡рд░, рдЖрдкрдг LMDB рдЪреНрдпрд╛ рддрд┐рд╕рд▒реНрдпрд╛ рд╕реНрддрдВрднрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рддреНрдпрд╛рдЪреНрдпрд╛ рдорджрддреАрдиреЗ рд╕рд░реНрд╡ рд╕реНрдЯреЛрд░реЗрдЬ рдлреЗрд░рдмрджрд▓ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдЖрдгрд┐ рдПрдХрдореЗрдХрд╛рдВрдкрд╛рд╕реВрди рдЕрд▓рд┐рдкреНрддрдкрдгреЗ рд╣реЛрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рдбреЗрдЯрд╛рдмреЗрд╕рд▓рд╛ рд╕рдВрдкреВрд░реНрдгрдкрдгреЗ рдорд▓реНрдЯреАрд╡реНрд╣рд░реНрд╢рдирдЪреА рдорд╛рд▓рдорддреНрддрд╛ рдорд┐рд│рддреЗ.

рей.рей. рд╡реНрд╣реЗрд▓ #3.3. рдХреЙрдкреА-рдСрди-рд░рд╛рдЗрдЯ

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

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

LMDB рдиреЗ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░рдиреНрд╕ рдореЗрдХреЕрдирд┐рдЭрдо рдореНрд╣рдгреВрди рд╡реЗрдЧрд│реА рдкрджреНрдзрдд рдирд┐рд╡рдбрд▓реА рдЖрд╣реЗ, рдЬреНрдпрд╛рд▓рд╛ рдХреЙрдкреА-рдСрди-рд░рд╛рдИрдЯ рдореНрд╣рдгрддрд╛рдд. рддреНрдпрд╛рдЪреЗ рд╕рд╛рд░ рд╣реЗ рдЖрд╣реЗ рдХреА рд╡рд┐рджреНрдпрдорд╛рди рдкреГрд╖реНрдард╛рд╡рд░реАрд▓ рдбреЗрдЯрд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА, рддреЗ рдкреНрд░рдердо рддреНрдпрд╛рдЪреА рд╕рдВрдкреВрд░реНрдг рдХреЙрдкреА рдХрд░рддреЗ рдЖрдгрд┐ рдХреЙрдкреАрдордзреНрдпреЗ рд╕рд░реНрд╡ рдмрджрд▓ рдХрд░рддреЗ.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдкреБрдвреЗ, рдЕрджреНрдпрдпрд╛рд╡рдд рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рдиреЛрдбрдордзреНрдпреЗ рдЪрд╛рд▓реВ рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдиреЛрдбрдЪреА рд▓рд┐рдВрдХ рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рддрд╣реА рдмрджрд▓ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрдгрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддреНрдпрд╛рдЪреАрд╣реА рдирдХреНрдХрд▓ рдЕрдЧреЛрджрд░рдЪ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореБрд│рд╛рдкрд░реНрдпрдВрдд рд╡рд╛рд░рдВрд╡рд╛рд░ рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЗ. рдмрджрд▓рдгреНрдпрд╛рдЪреА рд╢реЗрд╡рдЯрдЪреА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдореЗрдЯрд╛ рдкреГрд╖реНрдард╛рд╡рд░реАрд▓ рдбреЗрдЯрд╛

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

4. рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ API рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдбреЗрдЯрд╛ рд╕реНрдХреАрдорд╛ рдбрд┐рдЭрд╛рдЗрди рдХрд░рдгреЗ

LMDB рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдореВрд▓рднреВрдд рдЕтАНреЕрдмрд╕реНрдЯреНрд░реЕрдХреНрд╢рдиреНрд╕: рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕, рдХреА рдЖрдгрд┐ рдореВрд▓реНрдпреЗ, рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдгрд┐ рдХрд░реНрд╕рд░ рдкрд╛рд╣реВрди рдЖрдордЪреЗ API рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд░реВ рдХрд░реВрдпрд╛.

рдХреЛрдб рд╕реВрдЪреАрдмрджреНрджрд▓ рдПрдХ рдЯреАрдк

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ LMDB API рдордзреАрд▓ рд╕рд░реНрд╡ рдлрдВрдХреНрд╢рдиреНрд╕ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдПрд░рд░ рдХреЛрдбрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рджреЗрддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рд╕рд░реНрд╡ рд╕реВрдЪреАрдВрдордзреНрдпреЗ рддреНрдпрд╛рдЪреЗ рд╕рддреНрдпрд╛рдкрди рд╕рдВрдХреНрд╖рд┐рдкреНрддрддреЗрд╕рд╛рдареА рд╡рдЧрд│рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрд╣реЗ. рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд, рдЖрдореНрд╣реА рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдХрд╛рдЯрд╛ C++ рд░реЕрдкрд░реНрд╕ lmdbxx, рдЬреНрдпрд╛рдордзреНрдпреЗ C++ рдЕрдкрд╡рд╛рдж рдореНрд╣рдгреВрди рддреНрд░реБрдЯреА рд╕рд╛рдХрд╛рд░рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.

IOS рдХрд┐рдВрд╡рд╛ macOS рд╕рд╛рдареА LMDB рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдорд╛рд░реНрдЧ рдореНрд╣рдгреВрди, рдореА рдорд╛рдЭрд╛ CocoaPod рд╕реБрдЪрд╡рддреЛ POSLMDB.

рек.рез. рдореВрд▓рднреВрдд рдЕрдореВрд░реНрддрддрд╛

рдкрд░реНрдпрд╛рд╡рд░рдг

рд░рдЪрдирд╛ 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 рдХреНрд▓рд╛рдЙрдб рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ, рдЖрдореНрд╣реА рдлрдХреНрдд рджреЛрди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдпреЗ рдмрджрд▓рд▓реА рдЖрд╣реЗрдд.

рдкрд╣рд┐рд▓реЗ рдореНрд╣рдгрдЬреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕рдЪрд╛ рдЖрдХрд╛рд░ рдЬреНрдпрд╛рд╡рд░ рд╕реНрдЯреЛрд░реЗрдЬ рдлрд╛рдЗрд▓ рдореЕрдк рдХреЗрд▓реА рдЖрд╣реЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдЕрдЧрджреА рддреНрдпрд╛рдЪ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рд░рди рддреЗ рд░рди рдкрд░реНрдпрдВрдд рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдмрджрд▓реВ рд╢рдХрддреЗ. iOS рдЪреЗ рд╣реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рд▓ рд╕реНрдЯреЛрд░реЗрдЬ рд╡реНрд╣реЙрд▓реНрдпреВрдо рдбрд╛рдпрдиреЕрдорд┐рдХрдкрдгреЗ рдирд┐рд╡рдбрд▓реЗ рдЖрд╣реЗ. рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди, рддреЗ рдлрдВрдХреНрд╢рдирдкрд░реНрдпрдВрдд рдХреНрд░рдорд╢рдГ рдЕрд░реНрдзрд╡рдЯ рдХреЗрд▓реЗ рдЬрд╛рддреЗ 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. рд╕рд░реНрд╡ рдореВрд▓рднреВрдд рдЧреБрдгрдзрд░реНрдорд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ рдЖрдореНрд▓: рдЕрдгреБ, рд╕реБрд╕рдВрдЧрддрддрд╛, рдЕрд▓рдЧрд╛рд╡ рдЖрдгрд┐ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣рддрд╛. рдореА рдорджрдд рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА рдкрд░рдВрддреБ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рдореЕрдХрдУрдПрд╕ рдЖрдгрд┐ iOS рд╡рд░ рдЯрд┐рдХрд╛рдКрдкрдгрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдПрдХ рдмрдЧ рдЖрд╣реЗ рдЬреЛ MDBX рдордзреНрдпреЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓рд╛ рд╣реЛрддрд╛. рдЖрдкрдг рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдорд▓рд╛ рд╡рд╛рдЪрд╛.
  2. рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧрдЪрд╛ рджреГрд╖реНрдЯреАрдХреЛрди "рдПрдХрд▓ рд▓реЗрдЦрдХ / рдПрдХрд╛рдзрд┐рдХ рд╡рд╛рдЪрдХ" рдпреЛрдЬрдиреЗрджреНрд╡рд╛рд░реЗ рд╡рд░реНрдгрди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд▓реЗрдЦрдХ рдПрдХрдореЗрдХрд╛рдВрдирд╛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛рдд, рдкрдг рд╡рд╛рдЪрдХрд╛рдВрдирд╛ рдмреНрд▓реЙрдХ рдХрд░рдд рдирд╛рд╣реАрдд. рд╡рд╛рдЪрдХ рд▓реЗрдЦрдХрд╛рдВрдирд╛ рдХрд┐рдВрд╡рд╛ рдПрдХрдореЗрдХрд╛рдВрдирд╛ рдмреНрд▓реЙрдХ рдХрд░рдд рдирд╛рд╣реАрдд.
  3. рдиреЗрд╕реНрдЯреЗрдб рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди.
  4. рдорд▓реНрдЯреАрд╡реНрд╣рд░реНрд╢рди рд╕рдорд░реНрдерди.

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 рд╕рд╣ рддреАрдЪ рдпреБрдХреНрддреА рд╡рд╛рдкрд░реВрди рдкрд╣рд╛ рдЖрдгрд┐ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдкрд╣рд╛.

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

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

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

рдХрд░реНрд╕рд░

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

рек.реи. рдЯреЗрдмрд▓ рдореЙрдбреЗрд▓рд┐рдВрдЧ

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

рдЯреЗрдмрд▓ рд╕реНрдХреАрдорд╛

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдХреА рдЖрдгрд┐ рдореВрд▓реНрдпреЗ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ

рд╡рд╕реНрддреВрдВрдЪреЗ рдХреНрд░рдорд┐рдХреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рдкрджреНрдзрддреА рдЬрдЧрд╛рдд рд╢реЛрдзрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдЖрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд╛рд╢рд┐рд╡рд╛рдп рдЗрддрд░ рдХреЛрдгрддреАрд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣реА рд╕реНрд╡рддрдГрд╕рд╛рдареА рд╢рдХреНрдп рддрд┐рддрдХреЗ рдЬрд▓рдж рдирд┐рд╡рдбрд▓реЗ - рд╕реА рднрд╛рд╖реЗрдЪреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдиреЗ рд╡реНрдпрд╛рдкрд▓реЗрд▓рд╛ рдореЗрдорд░реАрдЪрд╛ рдбрдВрдк. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪреНрдпрд╛ рдШрдЯрдХрд╛рдЪреА рдХреА рдЦрд╛рд▓реАрд▓ рд╕рдВрд░рдЪрдиреЗрд╕рд╣ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. 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 рдорд╛рдирдХрд╛рдВрдиреБрд╕рд╛рд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╡рд┐рд▓рдХреНрд╖рдг рдкрд░рд┐рд╕реНрдерд┐рддреА рдорд┐рд│реВ рд╢рдХрддреЗ - рдиреЗрдЯрд╡рд░реНрдХрдкрд╛рд╕реВрди рдбрд┐рд╕реНрдХрдкрд░реНрдпрдВрддрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдорд╛рд░реНрдЧрд╛рд╡рд░ рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рд╕реНрдЯреЕрдХ рдореЗрдорд░реА рд╡рд╛рдкрд░рд╛!

рдмрд╛рдпрдирд░реА рдХрдВрдкреЕрд░реЗрдЯрд░рд╕рд╣ рдХреА рдСрд░реНрдбрд░ рдХрд░рдгреЗ

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

рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рдЪреА рдкрд╣рд┐рд▓реА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рдореЗрдорд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рд╕рд░реНрд╡ рдНрдкрд▓ рдЙрдкрдХрд░рдгрд╛рдВрд╡рд░, рдкреВрд░реНрдгрд╛рдВрдХ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рд▓рд╣рд╛рди рдПрдВрдбрд┐рдпрди. рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╕рд░реНрд╡рд╛рдд рдХрдореА рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдмрд╛рдЗрдЯ рдбрд╛рд╡реАрдХрдбреЗ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдмрд╛рдЗрдЯ-рдмрд╛рдп-рдмрд╛рдЗрдЯ рддреБрд▓рдирд╛ рд╡рд╛рдкрд░реВрди рдкреВрд░реНрдгрд╛рдВрдХрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ рд╢рдХреНрдп рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 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 рдмрд╛рдЗрдЯреНрд╕ рдШреЗрддреЗ, рдЬрд░реА рд╕рд░рд╛рд╕рд░реА рдлрд╛рдЗрд▓ рдЖрдгрд┐ рдлреЛрд▓реНрдбрд░рдЪреА рдирд╛рд╡реЗ рдХреНрд╡рдЪрд┐рддрдЪ 20-30 рд╡рд░реНрдгрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рддрд╛рдд.

рд░реЗрдХреЙрд░реНрдбрдЪрд╛ рдЖрдХрд╛рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рдирдХ рддрдВрддреНрд░рд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ рддреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░рд╛рдд "рдЯреНрд░рд┐рдо" рдХрд░рдгреЗ. рддреНрдпрд╛рдЪреЗ рд╕рд╛рд░ рдЕрд╕реЗ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓-рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдлреАрд▓реНрдбрдЪреА рд╕рд╛рдордЧреНрд░реА рд╕рдВрд░рдЪрдиреЗрдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдПрдХрд╛ рдмрдлрд░рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд▓рд╛рдВрдмреА рд╕реНрд╡рддрдВрддреНрд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдиреБрд╕рд╛рд░, рдХреА 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 рдЙрдШрдбрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ. рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ, рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЖрдпреБрд╖реНрдпрд╛рдд рддреЗ рдмрджрд▓рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рддреБрд▓рдирд╛рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдмрд╛рдпрдирд░реА рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рджреЛрди рдХреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛рдд рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рддреЛ рддреБрд▓рдирд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рдд рдХрд░рддреЛ: (-1) рдкреЗрдХреНрд╖рд╛ рдХрдореА, (1) рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд┐рдВрд╡рд╛ (0) рдЪреНрдпрд╛ рд╕рдорд╛рди. рд╕рд╛рдареА рд╕реНрдпреВрдбреЛрдХреЛрдб 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тАЛ
};

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

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. рдХреЗрд╡рд│ рд╡рд╛рдЪрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░рд╛рд╕рд╛рдареА, рдореВрд▓реНрдп рд╕рдВрд░рдЪрдиреЗрдЪреЗ рдкреЙрдЗрдВрдЯрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдВрдж рд╣реЛрдИрдкрд░реНрдпрдВрдд рд╡реИрдз рд░рд╛рд╣рдгреНрдпрд╛рдЪреА рд╣рдореА рджрд┐рд▓реА рдЬрд╛рддреЗ. рдЖрдзреА рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдмреА-рдЯреНрд░реА рдкреГрд╖реНрдареЗ рдЬреНрдпрд╛рд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд┐рдд рдЖрд╣реЗ, рдХреЙрдкреА-рдСрди-рд░рд╛рдЗрдЯ рддрддреНрддреНрд╡рд╛рдореБрд│реЗ рдзрдиреНрдпрд╡рд╛рдж, рдЬреЛрдкрд░реНрдпрдВрдд рддреЗ рдХрдореАрддрдХрдореА рдПрдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рджреНрд╡рд╛рд░реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рддреЛрдкрд░реНрдпрдВрдд рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╛рд╣рддрд╛рдд. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╢реЗрд╡рдЯрдЪрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреВрд░реНрдг рд╣реЛрддрд╛рдЪ, рдкреГрд╖реНрдареЗ рдирд╡реАрди рдбреЗрдЯрд╛рд╕рд╛рдареА рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд. рд╡рд╕реНрддреВрдВрдиреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдЯрд┐рдХреВрди рд░рд╛рд╣рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреНрдпрд╛рдВрдирд╛ рдЕрджреНрдпрд╛рдк рдХреЙрдкреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
  2. рд░реАрдбрд░рд╛рдИрдЯ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рд╕рд╛рдареА, рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рд╕рдВрд░рдЪрдиреЗрдЪрд╛ рдкреЙрдЗрдВрдЯрд░ рдХреЗрд╡рд│ рдкреНрд░рдердо рд╕реБрдзрд╛рд░рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреЗ рдХрд┐рдВрд╡рд╛ рд╣рдЯрд╡рдгреЗ) рд╣реЛрдИрдкрд░реНрдпрдВрдд рд╡реИрдз рдЕрд╕реЗрд▓.
  3. рд░рдЪрдирд╛ рдЕрд╕рд▓реА рддрд░реА NodeValue рдкреВрд░реНрдг рд╡рд╛рдврд▓реЗрд▓реЗ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЯреНрд░рд┐рдо рдХреЗрд▓реЗрд▓реЗ ("рдмрд╛рд╣реНрдп рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рд╡рд╛рдкрд░реВрди рдХреА рдСрд░реНрдбрд░ рдХрд░рдгреЗ" рдЙрдкрд╡рд┐рднрд╛рдЧ рдкрд╣рд╛), рддреБрдореНрд╣реА рдкреЙрдЗрдВрдЯрд░рджреНрд╡рд╛рд░реЗ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддрд╛. рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪрд╛ рдЖрджрд░ рдХрд░рдгреЗ рдирд╛рд╣реА!
  4. рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдкреЙрдЗрдВрдЯрд░рджреНрд╡рд╛рд░реЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд░рдЪрдирд╛ рдмрджрд▓реВ рдирдпреЗ. рд╕рд░реНрд╡ рдмрджрд▓ рдкрджреНрдзрддреАрджреНрд╡рд╛рд░реЗрдЪ рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд mdb_put. рддрдерд╛рдкрд┐, рдЖрдкрдг рд╣реЗ рдХрд┐рддреАрд╣реА рдХрдареАрдг рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реЗ рддрд░реА, рд╣реЗ рд╢рдХреНрдп рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рдореЗрдорд░реА рдХреНрд╖реЗрддреНрд░ рдЬреЗрдереЗ рд╣реА рд░рдЪрдирд╛ рд╕реНрдерд┐рдд рдЖрд╣реЗ рддреЗ рдХреЗрд╡рд│ рд╡рд╛рдЪрдиреАрдп рдореЛрдбрдордзреНрдпреЗ рдореЕрдк рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ.
  5. рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдХрд╛рд░ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рдлрд╛рдЗрд▓рд▓рд╛ рдкреНрд░реЛрд╕реЗрд╕ рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕рд╡рд░ рд░реАрдореЕрдк рдХрд░рд╛ mdb_env_set_map_size рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╕рд░реНрд╡ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕реНрдерд╛ рдкреВрд░реНрдгрдкрдгреЗ рдЕрд╡реИрдз рдХрд░рддреЗ рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреВрдВрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ.

рд╢реЗрд╡рдЯреА, рдЖрдгрдЦреА рдПрдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЗрддрдХреЗ рдХрдкрдЯреА рдЖрд╣реЗ рдХреА рддреНрдпрд╛рдЪреЗ рд╕рд╛рд░ рдкреНрд░рдХрдЯ рдХрд░рдгреЗ рдХреЗрд╡рд│ рджреБрд╕рд░реНрдпрд╛ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рдд рдмрд╕рдд рдирд╛рд╣реА. рдмреА-рдЯреНрд░реА рдмрджреНрджрд▓рдЪреНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдореА рддреНрдпрд╛рдЪреА рдкреГрд╖реНрдареЗ рд╕реНрдореГрддреАрдордзреНрдпреЗ рдХрд╢реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреЗрд▓реА рдЖрд╣реЗрдд рдпрд╛рдЪрд╛ рдПрдХ рдЖрдХреГрддреА рджрд┐рд▓рд╛ рдЖрд╣реЗ. рдпрд╛рд╡рд░реВрди рдЕрд╕реЗ рджрд┐рд╕реВрди рдпреЗрддреЗ рдХреА рдЕрдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛рд╕рд╣ рдмрдлрд░рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдЪрд╛ рдкрддреНрддрд╛ рдкреВрд░реНрдгрдкрдгреЗ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрд╕реВ рд╢рдХрддреЛ. рдпрд╛рдореБрд│реЗ, рд╕рдВрд░рдЪрдиреЗрдд рддреНрдпрд╛рдВрдирд╛ рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓рд╛ MDB_val рдЖрдгрд┐ рд╕рдВрд░рдЪрдиреЗрдЪреНрдпрд╛ рдкреЙрдИрдВрдЯрд░рд╡рд░ рдХрдореА рдХреЗрд▓реЗ, рддреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд░рдгрд╛рдд рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдпреЗрддреЗ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдХрд╛рд╣реА рдЪрд┐рдкреНрд╕рдЪреНрдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА (iOS рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рд╣реЗ 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). рдПрдЖрд░рдПрдорд╡рд░ рддреБрдордЪрд╛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рд╣реЛрдК рд╢рдХрддреЛ рд╕рд╛рдзреНрдп рдХрд░рдгреЗ рдЖрдгрд┐ рдкреЕрдХ рдХреЗрд▓реЗрд▓реЗ рдЧреБрдгрдзрд░реНрдо рд╡рд╛рдкрд░рдгреЗ. рд╕рдВрд░рдЪрдиреЗрдиреЗ рд╡реНрдпрд╛рдкрд▓реЗрд▓реА рдЬрд╛рдЧрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рд╕ рджреЗрдЦреАрд▓ рдорджрдд рдХрд░рддреЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛, рд╣реА рдкрджреНрдзрдд рдорд▓рд╛ рд╢реНрд░реЗрдпрд╕реНрдХрд░ рд╡рд╛рдЯрддреЗ, рдЬрд░реА рдХреГрддреА рдбреЗрдЯрд╛ рдНрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдЦрд░реНрдЪрд╛рдд рд╡рд╛рдв.

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

рд╢реНрд░реЗрдгреА рдХреНрд╡реЗрд░реА

рд░реЗрдХреЙрд░реНрдбреНрд╕рдЪреНрдпрд╛ рд╕рдореВрд╣рд╛рд╡рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, LMDB рдХрд░реНрд╕рд░ рдЕреЕрдмреНрд╕реНрдЯреНрд░реЕрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рдкрд░рд┐рдЪрд┐рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд▓рд╛рдЙрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛рд╕рд╣ рдЯреЗрдмрд▓рдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рд╕рд╣ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ рдпрд╛.

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╢реЛрдзрд╛рджреНрд╡рд╛рд░реЗ рдереЗрдЯ рд╡рд░рдЪреА рд╕реАрдорд╛ рд╢реЛрдзрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрд░реНрд╕рд░ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдХреАрдЬрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рд╕реВрдЪреАрдЪреНрдпрд╛ рд╕реБрд░реВрд╡рд╛рддреАрд╕ рдареЗрд╡рд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдЦрд╛рд▓реА рдкреЕрд░реЗрдВрдЯ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдЪреНрдпрд╛ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░рд╕рд╣ рдПрдХ рдХреА рджрд┐рд╕реЗрдкрд░реНрдпрдВрдд рддреЛ рд╡рд╛рдврд╡рд┐рд▓рд╛ рдЬрд╛рддреЛ. рдпрд╛ рдкрджреНрдзрддреАрдЪреЗ 2 рд╕реНрдкрд╖реНрдЯ рддреЛрдЯреЗ рдЖрд╣реЗрдд:

  1. рд░реЗрдЦреАрдп рд╢реЛрдз рдЬрдЯрд┐рд▓рддрд╛, рдЬрд░реА рдЬреНрдЮрд╛рдд рдЖрд╣реЗ, рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдЭрд╛рдбрд╛рдВрдордзреНрдпреЗ рдЖрдгрд┐ рд╡рд┐рд╢реЗрд╖рддрдГ рдмреА-рдЯреНрд░реАрдордзреНрдпреЗ рддреЗ рд▓реЙрдЧрд░рд┐рджрдорд┐рдХ рд╡реЗрд│реЗрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
  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 рд╡рд╛рдкрд░реВрди рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди, рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЗрд╡рд│ рдХреА рдирд╛рд╣реА рддрд░ рдореВрд▓реНрдп рджреЗрдЦреАрд▓ рдорд┐рд│рддреЗ. рдЬрд░, рд╕реЕрдореНрдкрд▓рд┐рдВрдЧ рдЕрдЯреА рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрддрд░ рдЧреЛрд╖реНрдЯреАрдВрдмрд░реЛрдмрд░рдЪ, рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рднрд╛рдЧрд╛рддреАрд▓ рдлреАрд▓реНрдб рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рддрд░ рддреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЗрд╢реНрдЪрд░рд╢рд┐рд╡рд╛рдп рдЕрдЧрджреА рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рдЖрд╣реЗрдд.

рек.рей. рдЯреЗрдмрд▓ рджрд░рдореНрдпрд╛рди рдореЙрдбреЗрд▓рд┐рдВрдЧ рд╕рдВрдмрдВрдз

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

тАЛ

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рддрдерд╛рдкрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирд╛рдд рдЗрддрдХреЗ рдХрдореА рд░рдХреНрддрдкрд╛рдд рдХрд░рдгреЗ рдХреНрд╡рдЪрд┐рддрдЪ рд╢рдХреНрдп рдЖрд╣реЗ. рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ, рдкреНрд░рдердо, рдЕрдиреЗрдХ рдЯреЗрдмрд▓реНрд╕ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ рдЖрдгрд┐ рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рдкреНрд░рд╛рдердорд┐рдХ рдХреАрдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдирд┐рд╡рдб рдХрд░рдгреЗ. рд╣рд╛ рд╢реЗрд╡рдЯрдЪрд╛ рд╡рд┐рднрд╛рдЧ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд┐рд░реНрдорд┐рддреА рдЖрдгрд┐ рдкрд░рд╕реНрдкрд░рд╕рдВрдмрдВрдзрд╛рдВрдЪреНрдпрд╛ рдореБрджреНрджреНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдЖрд╣реЗ.

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рд╛рд░рдгреНрдпрд╛

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдПрдХрд╛рдЪ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЯреЗрдмрд▓реНрд╕рдЪреНрдпрд╛ рдХрд│рд╛ рдПрдХрдореЗрдХрд╛рдВрдкрд╛рд╕реВрди рд╡рд┐рднрдХреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛ рд╕рд░реНрд╡рд╛рдВрдордзреНрдпреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╛рдВрддреНрд░рд┐рдХ рдлреАрд▓реНрдб рдЯреЗрдмрд▓ рдЖрдпрдбреА рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛. рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреЗрдКрди, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдирд┐рдпрдорд╛рдВрдиреБрд╕рд╛рд░ - рдкреНрд░рдердо рд╕рд╛рд░рдгреНрдпрд╛рдВрдиреБрд╕рд╛рд░ рдЖрдгрд┐ рд╕рд╛рд░рдгреНрдпрд╛рдВрдордзреНрдпреЗ рдХреАрдЪреЗ рдЧрдЯрдмрджреНрдзреАрдХрд░рдг рд╕рд╛рдзреНрдп рдХрд░реВ.

рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреА рд╕рд╛рд░рдЦреНрдпрд╛рдЪ рдбреЗрдЯрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ. рдпрд╛ рдорд╛рд▓рдорддреНрддреЗрдЪреА рдкреНрд░рд╛рдердорд┐рдХ рдХреАрдЪреНрдпрд╛ рдореВрд▓реНрдп рднрд╛рдЧрд╛рдЪреА рдкреНрд░рдд рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрд▓рдЧреНрди рдХрд░реВрди рддреНрдпрд╛рдЪреА рд╕рд░рд│ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЕрдиреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рдЗрд╖реНрдЯрддрдо рдирд╛рд╣реА:

  1. рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рдЬрд╛рдЧреЗрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЦреВрдк рд╕рдореГрджреНрдз рдЕрд╕реВ рд╢рдХрддреЛ.
  2. рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рдиреЛрдбрдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рджреЛрди рдХреА рд╡рд╛рдкрд░реВрди рддреЗ рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.
  3. рдХреЛрдб рд╕рдкреЛрд░реНрдЯрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рдЖрдореНрд╣реА рдПрдХрд╛ рдХреАрд╕рд╛рдареА рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░рд▓реЛ рддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рд╕реНрдЯреЛрд░реЗрдЬрдордзреНрдпреЗ рдбреЗрдЯрд╛ рд╡рд┐рд╕рдВрдЧрддреАрдЪрд╛ рдПрдХ рдорд╛рдпрд╛рд╡реА рдмрдЧ рдорд┐рд│реЗрд▓.

рдкреБрдвреЗ, рдЖрдкрдг рдпрд╛ рдХрдорддрд░рддрд╛ рдХрд╢рд╛ рджреВрд░ рдХрд░рд╛рдпрдЪреНрдпрд╛ рдпрд╛рд╡рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.

рдЯреЗрдмрд▓ рджрд░рдореНрдпрд╛рди рд╕рдВрдмрдВрдз рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

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

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

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рд╕рд░реНрд╡ рдЕрджреНрд╡рд┐рддреАрдп рдореЗрдЯрд╛рдбреЗрдЯрд╛, рдирд╡реАрди рд╕рд╛рд░рдгреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рднрд╛рдЧрд╛рдордзреНрдпреЗ рдареЗрд╡рд▓реА рдЬрд╛рддреЗ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдЖрдкрдг рдореБрдЦреНрдп рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рдЖрдзреАрдкрд╛рд╕реВрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА рдЖрдгрд┐ рдлреЛрд▓реНрдбрд░реНрд╕рдмрджреНрджрд▓рдЪрд╛ рдбреЗрдЯрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА. рддреНрдпрд╛рдРрд╡рдЬреА, рд░рд┐рдбрдВрдбрдВрдЯ рдбреЗрдЯрд╛ тАЬPтАЭ рдХреА рдордзреНрдпреЗ тАЬрдиреЛрдб рдЖрдпрдбреАтАЭ рдЖрдгрд┐ тАЬрдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдктАЭ рдлреАрд▓реНрдбрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдЬреЛрдбрд▓рд╛ рдЬрд╛рддреЛ. рддреНрдпрд╛рдВрдирд╛ рдзрдиреНрдпрд╡рд╛рдж, рддреБрдореНрд╣реА рдЗрдВрдбреЗрдХреНрд╕ рдХреА рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛, рдЬреНрдпрд╛рдордзреВрди рддреБрдореНрд╣реА рдкреНрд░рд╛рдердорд┐рдХ рдХреА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛, рдЬреНрдпрд╛рдордзреВрди, рд╢реЗрд╡рдЯреА, рддреБрдореНрд╣реА рдиреЛрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛.

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

рдЖрдореНрд╣реА LMDB рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЛ. рддреНрдпрд╛рдирдВрддрд░, рдЕрд░реНрдЬ рдЧреЛрдард╡рд┐рдгреНрдпрд╛рдЪреА рд╕рдВрдЦреНрдпрд╛ 30% рдХрдореА рдЭрд╛рд▓реА.

iOS рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреАрд▓ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдбреЗрдЯрд╛рдмреЗрд╕ LMDB рдЪреА рдЪрдордХ рдЖрдгрд┐ рдЧрд░рд┐рдмреА

рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд╛рдорд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо iOS рд╕рдВрдШрд╛рдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдЭрд╛рд▓реЗ. рд╕рдзреНрдпрд╛, Android рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреАрд▓ рдореБрдЦреНрдп "рдлрд╛рдИрд▓реНрд╕" рд╡рд┐рднрд╛рдЧрд╛рдВрдкреИрдХреА рдПрдХрд╛рдиреЗ LMDB рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реНрд╡рд┐рдЪ рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЗрддрд░ рднрд╛рдЧ рдорд╛рд░реНрдЧрд╛рд╡рд░ рдЖрд╣реЗрдд. C рднрд╛рд╖рд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рд╕реНрдЯреЛрдЕрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ C++ рдордзреНрдпреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорднреЛрд╡рддреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЪрд╛рдВрдЧрд▓реА рдорджрдд рд╣реЛрддреА. рдкрд░рд┐рдгрд╛рдореА C++ рд▓рд╛рдпрдмреНрд░рд░реАрд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡реНрд╣-рд╕реА рдЖрдгрд┐ рдХреЛрдЯрд▓рд┐рди рдордзреАрд▓ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдХреЛрдбрд╕рд╣ рдЕрдЦрдВрдбрдкрдгреЗ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд╡рд╛рдкрд░рд▓рд╛ рдЧреЗрд▓рд╛. рдЬрд┐рдиреНрдиреА рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╡рд░реВрди, рдкрдг рддреА рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│реА рдХрдерд╛ рдЖрд╣реЗ.

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

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