рдЯрд╛рд░рдирдЯреВрд▓ рдбреАрдмреАрдПрдордПрд╕ рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддрд┐

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

рдЯрд╛рд░рдирдЯреВрд▓ рдбреАрдмреАрдПрдордПрд╕ рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддрд┐
рд╢рдХреНрддрд┐ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ! (...рдЙрд░реНрдл рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ)

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

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

рдЯрд╛рд░рдирдЯреВрд▓ рдбреАрдмреАрдПрдордПрд╕ рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддрд┐
рдЪрд╛рд╡рд▓ред 1. рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рдкреНрд░рддрд┐рдХреГрддрд┐

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

1. рдпрд╛рддрд╛рдпрд╛рдд рдмрдЪрдд:

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

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

рдЯрд╛рд░рдирдЯреВрд▓ рдбреАрдмреАрдПрдордПрд╕ рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддрд┐
рдЪрд╛рд╡рд▓ред 2. HTTP рдкрд░ рдкреНрд░рддрд┐рдХреГрддрд┐

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

рдЯрд╛рд░рдирдЯреВрд▓ рдбреАрдмреАрдПрдордПрд╕ рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдХреГрддрд┐
рдЪрд╛рд╡рд▓ред 3. рд╡рд┐рд╖рдорд╛рдВрдЧреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐

рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐, рдФрд╕рддрди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди/рдорд╣рдВрдЧреА рд╣реИ, рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

рдпрд╛рддрд╛рдпрд╛рдд рдиреНрдпреВрдиреАрдХрд░рдг

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

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

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

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

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

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

рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛

рд╕рд░реНрд╡рд░/рдорд╛рд╕реНрдЯрд░ рднрд╛рдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереЛрдбрд╝реА рд╢рдмреНрджрд╛рд╡рд▓реА: рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЯреБрдкрд▓реНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ рдЖрдк рдЕрдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрдХреНрд░рдо рдХреНрд░рдордмрджреНрдз рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЗ рдирд╛рдорд┐рдд рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдПред рдиреАрдЪреЗ рд╣рдо рдРрд╕рд╛ рдХреНрд░рдо рдмрдирд╛рдПрдВрдЧреЗред

рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ рдХреЛрдИ рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

box.cfg{}

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЯрд╛рд░рдирдЯреВрд▓ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдиреИрдкрд╢реЙрдЯ рдФрд░ рд▓реЗрдирджреЗрди рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рдЪрд▓рд┐рдП рдПрдХ рдХреНрд░рдо рдмрдирд╛рддреЗ рд╣реИрдВ row_version:

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

рд╡рд┐рдХрд▓реНрдк if_not_exists рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЯрд╛рд░рдирдЯреВрд▓ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдХреЗ рд╕рднреА 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 рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП. рдЗрдЯрд░реЗрдЯрд░ рдкреНрд░рдХрд╛рд░ рдЬреАрдЯреА (рдЧреНрд░реЗрдЯрд░ рджреИрди, рдЧреНрд░реЗрдЯрд░ рджреИрди) рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рдХреБрдВрдЬреА (рдлрд╝реАрд▓реНрдб рдорд╛рди) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░реЗрдЧрд╛ 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 рдЖрдкрдХреЛ рд╡рд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреА рдЕрдВрддрд┐рдо рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдкреНрд░рддрд┐рдХреГрддрд┐ рдкрджреНрдзрддрд┐ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред

рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ JSON рдХреЗ рд░реВрдк рдореЗрдВ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдЬрд╛рд░реА рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: 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 рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

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

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

рд╣рдордиреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдбреАрдмреАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдПрдХ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рджреЗрдЦрд╛ред

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ