Tarantool DBMS рдорд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рдкреНрд░рддрд┐рдХреГрддрд┐

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

Tarantool DBMS рдорд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рдкреНрд░рддрд┐рдХреГрддрд┐
рд╢рдХреНрддрд┐ рдорд╣рд╕реБрд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН! (...рдЙрд░реНрдл рдкреНрд░рджрд░реНрд╢рдирдХреЛ рдЖрдирдиреНрдж рд▓рд┐рдиреБрд╣реЛрд╕реН)

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

рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдЭреИрдВ, Tarantool рд╕рдБрдЧ рдирд┐рд░реНрдорд┐рдд рдбрд╛рдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЫред рдпрд╕рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрдд рдорд╛рд╕реНрдЯрд░ рд▓рдЧ (WAL) рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рд╕рдмреИ рд▓реЗрдирджреЗрдирд╣рд░реВ рдкреНрд░рддрд┐рдХреГрддрд┐рд╣рд░реВрдорд╛ рдХреНрд░рдорд┐рдХ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБ рд╣реЛред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпрд╕реНрддреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ (рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдердк рдХрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ рддрд▓реНрд▓реЛ рддрд╣) рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЧрд▓реНрддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд░/рд╡рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбрд╣рд░реВ рдмреАрдЪ рдкрдвреНрдиреЗ рд▓реЛрдб рд╡рд┐рддрд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

Tarantool DBMS рдорд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рдкреНрд░рддрд┐рдХреГрддрд┐
рдЪрд╛рдорд▓ред 1. рдХреНрд▓рд╕реНрдЯрд░ рднрд┐рддреНрд░ рдкреНрд░рддрд┐рдХреГрддрд┐

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

1. рдЯреНрд░рд╛рдлрд┐рдХ рдмрдЪрдд:

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

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

Tarantool DBMS рдорд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рдкреНрд░рддрд┐рдХреГрддрд┐
рдЪрд╛рдорд▓ред 2. HTTP рдорд╛ рдкреНрд░рддрд┐рдХреГрддрд┐

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

Tarantool 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 рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫ рд░ "рдбреЗрд▓реНрдЯрд╛" рдбреЗрдЯрд╛ (рдбреЗрдЯрд╛ рдЕрдШрд┐рд▓реНрд▓реЛ рдПрдХреНрд╕рдЪреЗрдиреНрдЬ рд╕рддреНрд░рдХреЛ рдЕрдиреНрддреНрдпрдмрд╛рдЯ рдердкрд┐рдПрдХреЛ/рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХреЛ) рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдорд╛рддреНрд░ рдирднрдИ рдпрд╕рд▓рд╛рдИ рд╕рд░рд▓ рд░ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд░реВрдкрдорд╛ рдкреГрд╖реНрдард╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

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

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

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

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

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

Tarantool рдорд╛ рдХреБрдиреИ рдкрдирд┐ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдиреБ рдЕрдШрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

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), рдХреНрд╖реЗрддреНрд░ рдирд╛рдо рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВред

Tarantool рдорд╛ рд╕реНрд╡рддрдГ рд╡реГрджреНрдзрд┐ рдЧрд░реНрдиреЗ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдкрдирд┐ рдЕрдиреБрдХреНрд░рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫред рдлрд┐рд▓реНрдбрджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рддрдГ рд╡реГрджреНрдзрд┐ рдЧрд░реНрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ 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
})

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

рд╕реНрддрдореНрдн рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди row_ver рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕ рд╕реНрддрдореНрднрдХреЛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдорд╛ рдЕрдиреБрдХреНрд░рдо рдорд╛рдирд╣рд░реВ рдмрд╛рдБрдзреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ row_verред рддрд░ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреАрдХреЛ рд╡рд┐рдкрд░реАрдд, рд╕реНрддрдореНрдн рдХреНрд╖реЗрддреНрд░ рдорд╛рди row_ver рдирдпрд╛рдБ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдердкреНрджрд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рдЕрд╡рд╕реНрдерд┐рддрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджрд╛ рдкрдирд┐ рдПрдХрд▓реЗ рд╡реГрджреНрдзрд┐ рдЧрд░реНрдиреБрдкрд░реНрдЫред рддрдкрд╛рдИрдВ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЯреНрд░рд┐рдЧрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред Tarantool рд╕рдБрдЧ рджреБрдИ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╕реНрдкреЗрд╕ рдЯреНрд░рд┐рдЧрд░рд╣рд░реВ рдЫрдиреН: 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}

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

Tarantool рдорд╛ рдбрд╛рдЯрд╛ рдирдореВрдирд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдорд╛рд░реНрдлрдд рдЧрд░рд┐рдиреНрдЫред рд╕рдорд╛рд░реЛрд╣ 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 рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдмрд╛рдЯ рд▓реЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╕рд╛рд░рд┐рдд рдард╛рдЙрдБрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБ рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдорд╛рди рд╕реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджреНрдпрдкрд┐, рдзреЗрд░реИрдЬрд╕реЛ рдард╛рдЙрдБрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, резрежреж) рдЙрдкрдпреБрдХреНрдд рд╣реБрди рд╕рдХреНрдЫред

рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реМрдВ 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 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 рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд░реВрдкрдорд╛ рд░ рдЕрдиреБрд░реЛрдзрдХреЛ deserialized рдкрд░рд┐рдгрд╛рдо рдлрд░реНрдХрд╛рдЙрдБрдЫред

рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рдмрдЪрдд рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдкреНрд░рдХрд╛рд░реНрдп рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

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

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

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