рдЯрд╛рд░рдирдЯреВрд▓ DBMS рдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреА

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

рдЯрд╛рд░рдирдЯреВрд▓ DBMS рдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреА
рд╢рдХреНрддреА рдЕрдиреБрднрд╡рд╛! (тАжрдЙрд░реНрдл рдХрд╛рдордЧрд┐рд░реАрдЪрд╛ рдЖрдирдВрдж рдШреНрдпрд╛)

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

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

рдЯрд╛рд░рдирдЯреВрд▓ DBMS рдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреА
рддрд╛рдВрджреВрд│. 1. рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреА

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

1. рд░рд╣рджрд╛рд░реА рдмрдЪрдд:

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

2. HTTP рдПрдХреНрд╕рдЪреЗрдВрдЬ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдд рдХреЛрдгрддреАрд╣реА рдЕрдбрдЪрдг рдирд╛рд╣реА, рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд┐рдореЛрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

рдЯрд╛рд░рдирдЯреВрд▓ DBMS рдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреА
рддрд╛рдВрджреВрд│. 2. HTTP рд╡рд░ рдкреНрд░рддрд┐рдХреГрддреА

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

рдЯрд╛рд░рдирдЯреВрд▓ DBMS рдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреА
рддрд╛рдВрджреВрд│. 3. рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓реАрдВрдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреА

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

рдЬрд░ рддреБрдордЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд╡рд░реАрд▓ рдлрд╛рдпрджреЗ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЖрд╣реЗрдд (рдХрд┐рдВрд╡рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрдЯ рдЖрд╣реЗрдд), рддрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдд рдЕрд░реНрде рдЖрд╣реЗ. Tarantool DBMS рдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдиреЗрдХ рдорд╛рд░реНрдЧ рдкрд╛рд╣реВ.

рд░рд╣рджрд╛рд░реА рдХрдореА рдХрд░рдгреЗ

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

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

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

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

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

рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддреАрдЪреНрдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреЗ рдкреНрд░рдорд╛рдг рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреА рд╢реЗрд╡рдЯрдЪреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрджреНрдзрдд рдорд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдЗрд╖реНрдЯрддрдо рдЖрдгрд┐ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рд╡рд╛рдЯрддреЗ. рдЪрд▓рд╛ рддреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдкрд╛рд╣реВ.

рдкрдВрдХреНрддреА рдЖрд╡реГрддреНрддреА рдХрд╛рдЙрдВрдЯрд░ рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдгреЗ

рд╕рд░реНрд╡реНрд╣рд░/рдорд╛рд╕реНрдЯрд░ рднрд╛рдЧрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА

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

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

рдЯрд╛рд░рдВрдЯреВрд▓рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧреЗрд▓:

box.cfg{}

рдкрд░рд┐рдгрд╛рдореА, Tarantool рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдиреЕрдкрд╢реЙрдЯ рдЖрдгрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд▓реЙрдЧ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реЗрд▓.

рдЪрд▓рд╛ рдПрдХ рдХреНрд░рдо рддрдпрд╛рд░ рдХрд░реВрдпрд╛ row_version:

box.schema.sequence.create('row_version',
    { if_not_exists = true })

рдкрд░реНрдпрд╛рдп if_not_exists рдирд┐рд░реНрдорд┐рддреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реНрдпрд╛рд╕, Tarantool рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рд╣рд╛ рдкрд░реНрдпрд╛рдп рдкреБрдвреАрд▓ рд╕рд░реНрд╡ DDL рдХрдорд╛рдВрдбрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓.

рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рдПрдХ рдЬрд╛рдЧрд╛ рддрдпрд╛рд░ рдХрд░реВ.

box.schema.space.create('goods', {
    format = {
        {
            name = 'id',
            type = 'unsigned'

        },
        {
            name = 'name',
            type = 'string'

        },
        {
            name = 'code',
            type = 'unsigned'

        },
        {
            name = 'row_ver',
            type = 'unsigned'

        }
    },
    if_not_exists = true
})

рдпреЗрдереЗ рдЖрдореНрд╣реА рд╕реНрдкреЗрд╕рдЪреЗ рдирд╛рд╡ рд╕реЗрдЯ рдХрд░рддреЛ (goods), рдлреАрд▓реНрдб рдирд╛рд╡реЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдкреНрд░рдХрд╛рд░.

рдЯрд╛рд░рдВрдЯреВрд▓рдордзреАрд▓ рд╕реНрд╡рдпрдВ-рд╡рд╛рдвреАрд╡ рдлреАрд▓реНрдб рджреЗрдЦреАрд▓ рдЕрдиреБрдХреНрд░рдо рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдлреАрд▓реНрдбрдиреБрд╕рд╛рд░ рд╕реНрд╡рдпрдВ-рд╡рд╛рдврдгрд╛рд░реА рдкреНрд░рд╛рдердорд┐рдХ рдХреА рддрдпрд╛рд░ рдХрд░реВ id:

box.schema.sequence.create('goods_id',
    { if_not_exists = true })
box.space.goods:create_index('primary', {
    parts = { 'id' },
    sequence = 'goods_id',
    unique = true,
    type = 'HASH',
    if_not_exists = true
})

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

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

box.space.goods:before_replace(function(old, new)
    return box.tuple.new({new[1], new[2], new[3],
        box.sequence.row_version:next()})
end)

рдЦрд╛рд▓реАрд▓ рдЯреНрд░рд┐рдЧрд░ рдлреАрд▓реНрдб рдореВрд▓реНрдп рдмрджрд▓рддреЗ row_ver рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рдкреБрдвреАрд▓ рдореВрд▓реНрдпрд╛рдкрд░реНрдпрдВрдд рдЯрдкрд▓ рд╕рдВрдЪрдпрд┐рдд рдХреЗрд▓реЗ row_version.

рдЕрдВрддрд░рд╛рд│рд╛рддреВрди рдбреЗрдЯрд╛ рдХрд╛рдврдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА goods рд╕реНрддрдВрднрд╛рдиреБрд╕рд╛рд░ row_ver, рдЪрд▓рд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

box.space.goods:create_index('row_ver', {
    parts = { 'row_ver' },
    unique = true,
    type = 'TREE',
    if_not_exists = true
})

рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдХрд╛рд░ - рдЭрд╛рдб (TREE), рдХрд╛рд░рдг рд╕реНрддрдВрднрд╛рддреАрд▓ рдореВрд▓реНрдпрд╛рдВрдЪреНрдпрд╛ рдЪрдврддреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдбреЗрдЯрд╛ рдХрд╛рдврд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ row_ver.

рд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдХрд╛рд╣реА рдбреЗрдЯрд╛ рдЬреЛрдбреВрдпрд╛:

box.space.goods:insert{nil, 'pen', 123}
box.space.goods:insert{nil, 'pencil', 321}
box.space.goods:insert{nil, 'brush', 100}
box.space.goods:insert{nil, 'watercolour', 456}
box.space.goods:insert{nil, 'album', 101}
box.space.goods:insert{nil, 'notebook', 800}
box.space.goods:insert{nil, 'rubber', 531}
box.space.goods:insert{nil, 'ruler', 135}

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

рдЪрд▓рд╛ рдЕрдВрддрд░реНрднреВрдд рдкрд░рд┐рдгрд╛рдо рддрдкрд╛рд╕реВ:

tarantool> box.space.goods:select()
---
- - [1, 'pen', 123, 1]
  - [2, 'pencil', 321, 2]
  - [3, 'brush', 100, 3]
  - [4, 'watercolour', 456, 4]
  - [5, 'album', 101, 5]
  - [6, 'notebook', 800, 6]
  - [7, 'rubber', 531, 7]
  - [8, 'ruler', 135, 8]
...

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

local page_size = 5
local function get_goods(row_ver)
    local index = box.space.goods.index.row_ver
    local goods = {}
    local counter = 0
    for _, tuple in index:pairs(row_ver, {
        iterator = 'GT' }) do
        local obj = tuple:tomap({ names_only = true })
        table.insert(goods, obj)
        counter = counter + 1
        if counter >= page_size then
            break
        end
    end
    return goods
end

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

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

рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгрд╛рд░рд╛ рдЯреНрдпреВрдкрд▓реНрд╕ рдкрд░рдд рдХрд░рддреЛ. рддреНрдпрд╛рдирдВрддрд░ HTTP рджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдЯреНрдпреБрдкрд▓реНрд╕рд▓рд╛ рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХрд░рдгрд╛рд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рд╕рдВрд░рдЪрдиреЗрдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдг рдпрд╛рд╕рд╛рдареА рдорд╛рдирдХ рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рддреЗ tomap. рд╡рд╛рдкрд░рдгреНрдпрд╛рдРрд╡рдЬреА tomap рддреБрдореНрд╣реА рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдХрд╛рд░реНрдп рд▓рд┐рд╣реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣рд╛рд▓рд╛ рдлреАрд▓реНрдбрдЪреЗ рдирд╛рд╡ рдмрджрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ name, рдлреАрд▓реНрдб рдкрд╛рд╕ рдХрд░реВ рдирдХрд╛ code рдЖрдгрд┐ рдлреАрд▓реНрдб рдЬреЛрдбрд╛ comment:

local function unflatten_goods(tuple)
    local obj = {}
    obj.id = tuple.id
    obj.goods_name = tuple.name
    obj.comment = 'some comment'
    obj.row_ver = tuple.row_ver
    return obj
end

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

рдлрдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ get_goods:

tarantool> get_goods(0)

---
- - row_ver: 1
    code: 123
    name: pen
    id: 1
  - row_ver: 2
    code: 321
    name: pencil
    id: 2
  - row_ver: 3
    code: 100
    name: brush
    id: 3
  - row_ver: 4
    code: 456
    name: watercolour
    id: 4
  - row_ver: 5
    code: 101
    name: album
    id: 5
...

рдлреАрд▓реНрдб рд╡реНрд╣реЕрд▓реНрдпреВ рдШреЗрдК row_ver рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдУрд│реАрддреВрди рдЖрдгрд┐ рдлрдВрдХреНрд╢рдирд▓рд╛ рдкреБрдиреНрд╣рд╛ рдХреЙрд▓ рдХрд░рд╛:

tarantool> get_goods(5)

---
- - row_ver: 6
    code: 800
    name: notebook
    id: 6
  - row_ver: 7
    code: 531
    name: rubber
    id: 7
  - row_ver: 8
    code: 135
    name: ruler
    id: 8
...

рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛:

tarantool> get_goods(8)
---
- []
...

рдЬрд╕реЗ рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╕, рдлрдВрдХреНрд╢рди рд╕рд░реНрд╡ рд╕реНрдкреЗрд╕ рд░реЗрдХреЙрд░реНрдб рдкреГрд╖реНрдард╛рдиреБрд╕рд╛рд░ рдкреГрд╖реНрда рдкрд░рдд рдХрд░рддреЗ goods. рд╢реЗрд╡рдЯрдЪреЗ рдкрд╛рди рд░рд┐рдХрд╛рдореНрдпрд╛ рдирд┐рд╡рдбреАрдирдВрддрд░ рдпреЗрддреЗ.

рд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдмрджрд▓ рдХрд░реВрдпрд╛:

box.space.goods:update(4, {{'=', 6, 'copybook'}})
box.space.goods:insert{nil, 'clip', 234}
box.space.goods:insert{nil, 'folder', 432}

рдЖрдореНрд╣реА рдлреАрд▓реНрдб рдореВрд▓реНрдп рдмрджрд▓рд▓реЗ рдЖрд╣реЗ name рдПрдХрд╛ рдиреЛрдВрджреАрд╕рд╛рдареА рдЖрдгрд┐ рджреЛрди рдирд╡реАрди рдиреЛрдВрджреА рдЬреЛрдбрд▓реНрдпрд╛.

рдЪрд▓рд╛ рд╢реЗрд╡рдЯрдЪрд╛ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдкреБрдиреНрд╣рд╛ рдХрд░реВ:

tarantool> get_goods(8)
---



- - row_ver: 9
    code: 800
    name: copybook
    id: 6
  - row_ver: 10
    code: 234
    name: clip
    id: 9
  - row_ver: 11
    code: 432
    name: folder
    id: 10
...

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

рдЖрдореНрд╣реА HTTP рджреНрд╡рд╛рд░реЗ рдкрд░рд┐рдгрд╛рдо рдЬрд╛рд░реА рдХрд░рдгреЗ JSON рд╕реНрд╡рд░реВрдкрд╛рдд рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдХрдХреНрд╖реЗрдмрд╛рд╣реЗрд░ рдареЗрд╡реВ. рдЖрдкрдг рдпрд╛рдмрджреНрджрд▓ рдпреЗрдереЗ рд╡рд╛рдЪреВ рд╢рдХрддрд╛: https://habr.com/ru/company/mailru/blog/272141/

рдХреНрд▓рд╛рдпрдВрдЯ/рдЧреБрд▓рд╛рдо рднрд╛рдЧрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА

рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдмрд╛рдЬреВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд╢реА рджрд┐рд╕рддреЗ рддреЗ рдкрд╛рд╣реВрдпрд╛. рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╛рдкреНрддреАрдЪреНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛ рдПрдХ рдЬрд╛рдЧрд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

box.schema.space.create('goods', {
    format = {
        {
            name = 'id',
            type = 'unsigned'

        },
        {
            name = 'name',
            type = 'string'

        },
        {
            name = 'code',
            type = 'unsigned'

        }
    },
    if_not_exists = true
})

box.space.goods:create_index('primary', {
    parts = { 'id' },
    sequence = 'goods_id',
    unique = true,
    type = 'HASH',
    if_not_exists = true
})

рдЬрд╛рдЧреЗрдЪреА рд░рдЪрдирд╛ рд╕реНрддреНрд░реЛрддрд╛рддреАрд▓ рдЬрд╛рдЧреЗрдЪреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрд╕рд╛рд░рдЦреА рдЕрд╕рддреЗ. рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдЗрддрд░ рдХреЛрдареЗрд╣реА рдкрд╛рд╕ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдХреЙрд▓рдо row_ver рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдЧреЗрдд рдирд╛рд╣реА. рд╢реЗрддрд╛рдд id рд╕реНрддреНрд░реЛрдд рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ рд░реЗрдХреЙрд░реНрдб рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓. рдореНрд╣рдгреВрди, рд░рд┐рд╕реАрд╡реНрд╣рд░рдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рддреЗ рд╕реНрд╡рдпрдВ-рд╡рд╛рдвреАрд╡ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдореВрд▓реНрдпреЗ рдЬрддрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрд╛рдЧрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ row_ver:

box.schema.space.create('row_ver', {
    format = {
        {
            name = 'space_name',
            type = 'string'

        },
        {
            name = 'value',
            type = 'string'

        }
    },
    if_not_exists = true
})

box.space.row_ver:create_index('primary', {
    parts = { 'space_name' },
    unique = true,
    type = 'HASH',
    if_not_exists = true
})

рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЬрд╛рдЧреЗрд╕рд╛рдареА (рдлреАрд▓реНрдб space_name) рдЖрдкрдг рдпреЗрдереЗ рд╢реЗрд╡рдЯрдЪреЗ рд▓реЛрдб рдХреЗрд▓реЗрд▓реЗ рдореВрд▓реНрдп рдЬрддрди рдХрд░реВ row_ver (рдлреАрд▓реНрдб value). рд╕реНрддрдВрдн рдкреНрд░рд╛рдердорд┐рдХ рдХреА рдореНрд╣рдгреВрди рдХрд╛рд░реНрдп рдХрд░рддреЛ space_name.

рд╕реНрдкреЗрд╕ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░реВ goods HTTP рджреНрд╡рд╛рд░реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ HTTP рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдЧреВ рдХрд░рдгрд╛рд░реА рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ рдУрд│ рд▓рд╛рдпрдмреНрд░рд░реА рд▓реЛрдб рдХрд░рддреЗ рдЖрдгрд┐ HTTP рдХреНрд▓рд╛рдпрдВрдЯ рдЗрдиреНрд╕реНрдЯрдВрдЯ рдХрд░рддреЗ:

local http_client = require('http.client').new()

рдЖрдореНрд╣рд╛рд▓рд╛ json deserialization рд╕рд╛рдареА рд▓рд╛рдпрдмреНрд░рд░реА рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

local json = require('json')

рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ:

local function load_data(url, row_ver)
    local url = ('%s?rowVer=%s'):format(url,
        tostring(row_ver))
    local body = nil
    local data = http_client:request('GET', url, body, {
        keepalive_idle =  1,
        keepalive_interval = 1
    })
    return json.decode(data.body)
end

рдлрдВрдХреНрд╢рди url рдкрддреНрддреНрдпрд╛рд╡рд░ HTTP рд╡рд┐рдирдВрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рдкрд╛рдард╡рддреЗ row_ver рдкреЕрд░рд╛рдореАрдЯрд░ рдореНрд╣рдгреВрди рдЖрдгрд┐ рд╡рд┐рдирдВрддреАрдЪрд╛ рдбреАрд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдкрд░рд┐рдгрд╛рдо рдкрд░рдд рдХрд░рддреЗ.

рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЬрддрди рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

local function save_goods(goods)
    local n = #goods
    box.atomic(function()
        for i = 1, n do
            local obj = goods[i]
            box.space.goods:put(
                obj.id, obj.name, obj.code)
        end
    end)
end

рдЕрдВрддрд░рд╛рд│рд╛рдд рдбреЗрдЯрд╛ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рдЪреЗ рдЪрдХреНрд░ goods рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдареЗрд╡рд▓реЗ (рдпрд╛рд╕рд╛рдареА рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ box.atomic) рдбрд┐рд╕реНрдХ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.

рд╢реЗрд╡рдЯреА, рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдкреЗрд╕ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдлрдВрдХреНрд╢рди goods рд╕реНрддреНрд░реЛрддрд╛рд╕рд╣ рдЖрдкрдг рддреЗ рдпрд╛рдкреНрд░рдорд╛рдгреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгреВ рд╢рдХрддрд╛:

local function sync_goods()
    local tuple = box.space.row_ver:get('goods')
    local row_ver = tuple and tuple.value or 0

    тАФтАФ set your url here:
    local url = 'http://127.0.0.1:81/test/goods/list'

    while true do
        local goods = load_goods(url, row_ver)

        local count = #goods
        if count == 0 then
            return
        end

        save_goods(goods)

        row_ver = goods[count].rowVer
        box.space.row_ver:put({'goods', row_ver})
    end
end

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

рдЕрдкрдШрд╛рддреА рд▓реВрдкрд┐рдВрдЧрдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА (рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рддреНрд░реБрдЯреА рдЕрд╕рд▓реНрдпрд╛рд╕), рд▓реВрдк while рджреНрд╡рд╛рд░реЗ рдмрджрд▓рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ for:

for _ = 1, max_req do ...

рдлрдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА sync_goods рдЬрд╛рдЧрд╛ goods рд░рд┐рд╕реАрд╡реНрд╣рд░рдордзреНрдпреЗ рд╕рд░реНрд╡ рд╕реНрдкреЗрд╕ рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреНрдпрд╛ рдЕрд╕рддреАрд▓ goods рд╕реНрд░реЛрдд рдордзреНрдпреЗ.

рд╕рд╛рд╣рдЬрд┐рдХрдЪ, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдбреЗрдЯрд╛ рд╣рдЯрд╡рдгреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рдЕрд╢реА рдЧрд░рдЬ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдбрд┐рд▓реАрд╢рди рдорд╛рд░реНрдХ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рдЬрд╛рдЧреЗрдд рдЬреЛрдбрд╛ goods рдмреБрд▓рд┐рдпрди рдлреАрд▓реНрдб is_deleted рдЖрдгрд┐ рд░реЗрдХреЙрд░реНрдб рднреМрддрд┐рдХрд░рд┐рддреНрдпрд╛ рд╣рдЯрд╡рдгреНрдпрд╛рдРрд╡рдЬреА, рдЖрдореНрд╣реА рддрд╛рд░реНрдХрд┐рдХ рд╣рдЯрд╡рдгреЗ рд╡рд╛рдкрд░рддреЛ - рдЖрдореНрд╣реА рдлреАрд▓реНрдб рдореВрд▓реНрдп рд╕реЗрдЯ рдХрд░рддреЛ is_deleted рдЕрд░реНрде рдордзреНрдпреЗ true. рдХрдзреАрдХрдзреА рдмреБрд▓рд┐рдпрди рдлреАрд▓реНрдбрдРрд╡рдЬреА is_deleted рдлреАрд▓реНрдб рд╡рд╛рдкрд░рдгреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ deleted, рдЬреЗ рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рд╣рдЯрд╡рд┐рдгреНрдпрд╛рдЪреА рддрд╛рд░реАрдЦ-рд╡реЗрд│ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ. рддрд╛рд░реНрдХрд┐рдХ рд╣рдЯрд╡рд┐рд▓реНрдпрд╛рдирдВрддрд░, рд╣рдЯрд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХреЗрд▓реЗрд▓реЗ рд░реЗрдХреЙрд░реНрдб рд╕реНрддреНрд░реЛрддрд╛рдкрд╛рд╕реВрди рдЧрдВрддрд╡реНрдпрд╕реНрдерд╛рдирд╛рд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ (рд╡рд░ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рддрд░реНрдХрд╛рдиреБрд╕рд╛рд░).

рдХреНрд░рдо row_ver рдЗрддрд░ рд╕реНрдкреЗрд╕рдордзреВрди рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ: рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЬрд╛рдЧреЗрд╕рд╛рдареА рд╡реЗрдЧрд│рд╛ рдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА.

рдЖрдореНрд╣реА Tarantool DBMS рд╡рд╛рдкрд░реВрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдордзреНрдпреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддреАрдЪрд╛ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдорд╛рд░реНрдЧ рдкрд╛рд╣рд┐рд▓рд╛.

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

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

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

DDoS рд╕рдВрд░рдХреНрд╖рдг, VPS VDS рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯрд╕рд╛рдареА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реЗрджреА рдХрд░рд╛ ЁЯФе рдбреАрдбреЙрд╕ рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ, рд╡реНрд╣реАрдкреАрдПрд╕ (VPS) рд╡реНрд╣реАрдбреАрдПрд╕ (VDS) рд╕рд░реНрд╡реНрд╣рд░реНрд╕ рдЦрд░реЗрджреА рдХрд░рд╛ | ProHoster