αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool DBMS

αžŸαž½αžŸαŸ’αžαžΈ αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ DBMS αžαžΆαžšαŸ‰αžΆαž“αŸ‹αž’αžΌαž›αŸ” αž‚αžΊαž‡αžΆαžœαŸαž‘αž·αž€αžΆαž˜αž½αž™αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™ Mail.ru Group αžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœ DBMS αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž–αžŸαŸ‹ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆ Lua αŸ” αž›αŸ’αž”αžΏαž“αžαŸ’αž–αžŸαŸ‹αž“αŸƒαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ Tarantool αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž… αž‡αžΆαž–αž·αžŸαŸαžŸαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αŸ€αž”αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαž”αžŸαŸ‹ DBMS αž“αž·αž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžαŸ‚αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž€αžΆαžšαž”αž“αŸ’αžαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš ACID (αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» WAL αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž›αžΎαžαžΆαžŸ)αŸ” Tarantool αž˜αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž“αžΌαžœαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αž˜αŸ’αž›αž„ αž“αž·αž„αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αŸ” αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž€αŸ†αžŽαŸ‚ 2.1 αžŸαŸ†αžŽαž½αžšαž‡αžΆαž—αžΆαžŸαžΆ SQL αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαŸ” Tarantool αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽαž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αžŽαŸ’αžŽ BSD αžŸαžΆαž˜αž‰αŸ’αž‰αŸ” αžœαžΆαž€αŸαž˜αžΆαž“αž€αŸ†αžŽαŸ‚αžŸαž αž‚αŸ’αžšαžΆαžŸαž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž•αž„αžŠαŸ‚αžšαŸ”

αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool DBMS
αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαžΆαž˜αžΆαž“αžαžΆαž˜αž–αž›! (…aka αžŸαžΌαž˜αžšαžΈαž€αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž€αžΆαžšαžŸαž˜αŸ’αžαŸ‚αž„)

αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαžΆαž„αž›αžΎαž’αŸ’αžœαžΎαž±αŸ’αž™ Tarantool αž€αŸ’αž›αžΆαž™αž‡αžΆαžœαŸαž‘αž·αž€αžΆαžŠαŸαž‚αž½αžšαž±αŸ’αž™αž‘αžΆαž€αŸ‹αž‘αžΆαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ‚αž”αž“αŸαŸ‡ αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž˜αžΆαž“αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αžαžΆαž„αž›αžΎ Tarantool αž˜αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž“αžΌαžœαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž›αžΎαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ master log (WAL) αŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž”αŸ‚αž”αž“αŸαŸ‡ (αž™αžΎαž„αž“αžΉαž„αž αŸ…αžœαžΆαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž αž€αŸ†αžšαž·αžβ€‹αž‘αžΆαž”) αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αžΆαž“αžΆβ€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αž’αžαŸ‹αž±αž“β€‹αž€αŸ†αž αž»αžŸβ€‹αžšαž”αžŸαŸ‹β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„/αž¬β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž…αŸ‚αž€αž…αžΆαž™β€‹αž€αžΆαžšβ€‹αž’αžΆαž“β€‹αžšαžœαžΆαž„β€‹αžαŸ’αž“αžΆαŸ†αž„β€‹αž…αž„αŸ’αž€αŸ„αž˜αŸ”

αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool DBMS
αž’αž„αŸ’αž€αžšαŸ” 1. αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž˜αž½αž™αŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž‡αŸ†αž“αž½αžŸαž˜αž½αž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž½αž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš/αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž„αž“αŸαŸ‡αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹ αž€αžΆαžšαž…αž˜αŸ’αž›αž„ - αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αž˜αŸ’αžšαž·αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αŸ” αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ DBMS αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž…αž˜αŸ’αž›αž„αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αž„αŸ’αž€αžΎαžαŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž˜αžΆαž“αž‘αžΆαŸ†αž„αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž· αž“αž·αž„αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αŸ” αž…αžΌαžšαžšαžΆαž™αž”αž‰αŸ’αž‡αžΈαž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αŸ”

1. αž€αžΆαžšαžŸαž“αŸ’αžŸαŸ†αž…αžšαžΆαž…αžšαžŽαŸαŸ–

  • αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž•αŸ’αž‘αŸαžšβ€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹β€‹αž”αžΆαž“β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž˜αžΆαž“β€‹αžαŸ‚β€‹αž˜αž½αž™β€‹αž•αŸ’αž“αŸ‚αž€β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ (αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž•αŸ’αž‘αŸαžšβ€‹αž”αžΆαž“β€‹αžαŸ‚β€‹αžαžΆαžšαžΆαž„β€‹αžαŸ’αž›αŸ‡ αž‡αž½αžšβ€‹αžˆαžšβ€‹αžαŸ’αž›αŸ‡ αž¬β€‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆβ€‹αžšαž”αžŸαŸ‹β€‹αžœαžΆβ€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž“αžΉαž„β€‹αž›αž€αŸ’αžαžŽαŸˆβ€‹αžœαž·αž“αž·αž…αŸ’αž†αŸαž™β€‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹β€‹αž˜αž½αž™);
  • αž˜αž·αž“αžŠαžΌαž…αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž’αžŸαž˜αž€αžΆαž› (αž’αž“αž»αžœαžαŸ’αžαž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒ Tarantool - 1.10) αž¬αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ (αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸƒ Tarantool) αžšαž”αŸ€αž” αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αžœαž‚αŸ’αž‚ (αž§αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ†αž”αžΌαž„αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™ - αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸαž™αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž’αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αžœαž‚αŸ’αž‚αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž€αžΎαžαž‘αžΎαž„αŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αŸ’αžšαžΎαž“αžŠαž„ αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž‘αŸαžšαž”αžΆαž“αžαŸ‚αž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹αžœαžΆ (αž˜αž·αž“αžŠαžΌαž…αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αžŠαŸ‚αž›αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž“αŸ…αž›αžΎαž˜αŸαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž€αŸ‹αž‘αžΎαž„αžœαž·αž‰αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸ…αž›αžΎαž€αžΆαžšαž…αž˜αŸ’αž›αž„)αŸ”

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 αž˜αŸ‰αŸ„αž„αž…αžΆαž”αŸ‹αž–αžΈαž–αŸαž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“)αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸ† αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž‚αžΊαž˜αž·αž“αž”αŸ’αžšαžΎαžŠαžŠαŸ‚αž›αŸ—αž…αŸ’αžšαžΎαž“ αž αžΎαž™αž’αžΆαž…αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαžŸαž“αŸ’αžŸαŸ†αž…αžšαžΆαž…αžšαžŽαŸαžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαžŸαŸ„αŸ‡αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž•αŸ’αž‘αŸαžšαž’αžΆαž…αž˜αž·αž“αž˜αžΆαž“αžœαžΆαž›αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž½αž™αž‘αŸ€αžαžŠαŸ‚αž›αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž‡αžΆαž„αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αžΊαž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž€αžΆαžšαž‘αž‘αž½αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸƒαžœαž‚αŸ’αž‚αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αžΈαž˜αž½αž™αŸ— αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“ αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŠαŸ„αž™αž’αŸ’αž“αž€αž‘αž‘αž½αž›αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžœαžΆ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžš Boolean αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž”αŸ’αžšαž—αž– (αž§αž‘αžΆαž αžšαžŽαŸ is_transferred) αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‘αž‘αž½αž›αž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž€αžΆαžšαž‘αž‘αž½αž›αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ αžœαžΆαž›αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž™αž€αžαž˜αŸ’αž›αŸƒ trueαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž’αžΆαžαž»αž…αžΌαž›αž›αŸ‚αž„αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸαŸ‡αž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αž‡αžΆαžŠαŸ†αž”αžΌαž„ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸαžšαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž“αžΈαž˜αž½αž™αŸ— αž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž•αŸ’αž‰αžΎαŸ” αž“αž·αž™αžΆαž™αž±αŸ’αž™αž…αŸ†αž‘αŸ… αž“αŸαŸ‡αž’αžΆαž…αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž‘αŸ’αžœαŸαžŠαž„αž“αŸƒαž…αŸ†αž“αž½αž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αŸαžš αž“αž·αž„αž“αžΆαŸ†αž±αŸ’αž™αž€αžΎαž“αž‘αžΎαž„αž‘αŸ’αžœαŸαžŠαž„αž“αŸƒαž…αŸ†αž“αž½αž“αž€αžΆαžšαž’αŸ’αžœαžΎαžŠαŸ†αžŽαžΎαžšαž‘αŸ…αž˜αž€αŸ” αž‘αžΈαž–αžΈαžš αž‚αŸ’αž˜αžΆαž“αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž•αŸ’αž‰αžΎαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸ (αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž‘αžΈαž˜αž½αž™αžŠαŸ‚αž›αž‘αž‘αž½αž›αž“αžΉαž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αžΆαžšαž‘αž‘αž½αž›αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž“αž·αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹)αŸ”

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžαžΆαž„αž›αžΎαž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž˜αž½αž™αž‘αŸ…αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αŸαžšαžŠαžΎαž˜αŸ’αž”αžΈαžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžšαžŠαŸαž€αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž‡αž½αžšαžˆαžšαž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘ αž αžΎαž™αžαŸ’αžšαžΌαžœαžαŸ‚αž€αŸ†αžŽαžαŸ‹/αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŠαŸ„αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ…αž–αŸαž›αžœαŸαž›αžΆαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜/αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš (αž’αžΆαžαžΌαž˜αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜/αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš)αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŸαžΌαž˜αž αŸ…αž‡αž½αžšαžˆαžš update_time. αžŠαŸ„αž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαž˜αŸ’αž›αŸƒαžœαžΆαž›αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαž‡αž½αžšαžˆαžšαž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αŸαžš αž™αžΎαž„αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαž‚αŸ’αž‚αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαž˜αŸ’αž›αŸƒαž“αŸαŸ‡ (αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαž˜αŸ’αž›αŸƒαžœαžΆαž› update_timeαž›αžΎαžŸαž–αžΈαžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αžΈαž˜αž»αž“)αŸ” αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαžαžΆαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž”αžΆαž…αŸ‹αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαžαž˜αŸ’αž›αŸƒαžœαžΆαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžšαžˆαžš update_time αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž”αŸ’αž›αŸ‚αž€αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‡αž½αžšβ€‹αžˆαžšβ€‹αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž‡αžΆβ€‹αž•αŸ’αž“αŸ‚αž€ (αž˜αž½αž™β€‹αž‘αŸ†αž–αŸαžšβ€‹αžŠαŸ„αž™β€‹αž‘αŸ†αž–αŸαžš) αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž˜αž‘αŸ†αž–αŸαžš αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž™αž“αŸ’αžαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜ αžŠαŸ‚αž›αž‘αŸ†αž“αž„αž‡αžΆαž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‘αžΆαž”αž”αŸ†αž•αž»αž (αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžšαžΆαž›αŸ‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαž˜αŸ’αž›αŸƒ update_time αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ αž“αž·αž„αž•αž›αž·αžαž…αŸ†αž“αž½αž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ αžŠαŸ„αž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž’αž»αž αŸ’αžœαžŸαž·αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž…αžΆαž”αŸ‹αž–αžΈαžŠαžΎαž˜αž‚αŸ†αžšαžΌ)αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž”αž“αŸ’αžαž·αž…αž“αžΌαžœαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž–αžΈαž˜αž»αž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αŸαž‘αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ (αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžœαŸ‚αž„) αž‡αžΆαžαž˜αŸ’αž›αŸƒαžœαžΆαž›αž‡αž½αžšαžˆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž…αžΌαžšαž™αžΎαž„αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž‡αž½αžšαžˆαžš row_ver. αžαž˜αŸ’αž›αŸƒαžœαžΆαž›αž“αŸƒαž‡αž½αžšαžˆαžšαž“αŸαŸ‡αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹/αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž/αž€αŸ‚αž”αŸ’αžšαŸ‚αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αžœαžΆαž›αž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘-αž–αŸαž›αžœαŸαž›αžΆαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αžΆαžšαžšαžΆαž”αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž€αžΎαž“αž‘αžΎαž„αžŠαŸ„αž™αž˜αž½αž™αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž‡αž½αžšαžˆαžš row_ver αž“αžΉαž„αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹ αž αžΎαž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™ "αžŠαžΈαžŸαžŽαŸ’αž" (αž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž“αŸ’αžαŸ‚αž˜/αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαžœαž‚αŸ’αž‚αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αž»αž“) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž”αŸ†αž”αŸ‚αž€αžœαžΆαž‘αŸ…αž‡αžΆαž‘αŸ†αž–αŸαžšαž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰ αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž•αž„αžŠαŸ‚αžšαŸ”

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ‚αž›αž”αžΆαž“αžŸαŸ’αž“αžΎαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αžšαž½αž˜αž’αž”αŸ’αž”αž”αžšαž˜αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αŸαžšαž€αŸ’αž“αž»αž„αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αž›αŸ’αž’αž”αŸ†αž•αž»αž αž“αž·αž„αž‡αžΆαžŸαž€αž›αž”αŸ†αž•αž»αžαŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžœαžΆαž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž›αž˜αŸ’αž’αž·αžαŸ”

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžšαžΆαž”αŸ‹αž€αŸ†αžŽαŸ‚αž‡αž½αžš

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž•αŸ’αž“αŸ‚αž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ/មេ

αž“αŸ…αž€αŸ’αž“αž»αž„ MS SQL Server αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž‡αž½αžšαžˆαžšαž–αž·αžŸαŸαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡ - rowversion. αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž”αž‰αŸ’αž‡αžšαžŠαŸ‚αž›αž€αžΎαž“αž‘αžΎαž„αž˜αž½αž™αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜/αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αžΆαž“αž‡αž½αžšαžˆαžšαžŠαžΌαž… rowversion. αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αžΆαžšαžšαžΆαž”αŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αžœαžΆαž›αž“αŸƒαž‡αž½αžšαžˆαžšαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž”αž“αŸ’αžαŸ‚αž˜/αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” Tarantool DBMS αž˜αž·αž“αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‘αŸαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αžœαžΆαž˜αž·αž“αž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžœαžΆαžŠαŸ„αž™αžŠαŸƒαž‘αŸαŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžšαž”αŸ€αž”αžŠαŸ‚αž›αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαŸ”

αž‘αžΈαž˜αž½αž™αžœαžΆαž€αŸ’αž™αžŸαŸαž–αŸ’αž‘αžαžΌαž…αž˜αž½αž™αŸ– αžαžΆαžšαžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž›αŸ†αž  αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ tuples αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ 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. αž€αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαž‰αŸ‹αž“αŸ…αž–αŸαž›αžŽαžΆαžŠαŸ‚αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αž αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ tuple αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αžšαž„αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαŸ„αž™αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž˜αž»αžαž„αžΆαžšαž€αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜)αŸ” αž˜αž·αž“β€‹αžŠαžΌαž… on_replace, before_replace-triggers αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ‚αž”αŸ’αžšαŸ‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒ tuple αžŠαŸ‚αž› trigger αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž”αŸ’αžšαž—αŸαž‘αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαž€αžΆαžšαž€αŸαŸ‡αžŸαžΆαž€αžŸαž˜αž“αžΉαž„αž™αžΎαž„αŸ”

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 αž‘αž»αž€ tuple αž‘αŸ…αžαž˜αŸ’αž›αŸƒαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸƒαž›αŸ†αžŠαžΆαž”αŸ‹ 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}

αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžœαžΆαž›αž‘αžΈαž˜αž½αž™αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž‡αžšαž”αž„αŸ’αž€αžΎαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž™αžΎαž„αž αž»αž… nil αž‡αŸ†αž“αž½αžŸαžœαž·αž‰αŸ” Tarantool αž“αžΉαž„αž‡αŸ†αž“αž½αžŸαžαž˜αŸ’αž›αŸƒαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αž‡αžΆαžαž˜αŸ’αž›αŸƒαž“αŸƒαžœαžΆαž›αž‡αž½αžšαžˆαžš row_ver αž’αŸ’αž“αž€αž’αžΆαž…αž†αŸ’αž›αž„αž€αžΆαžαŸ‹ Nil - αž¬αž˜αž·αž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαž˜αŸ’αž›αŸƒαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡ αž‡αž½αžšαžˆαžšαž“αŸαŸ‡αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž‘αžΈαžαžΆαŸ†αž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αž αŸ”

αžαŸ„αŸ‡αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αž”αž‰αŸ’αž…αžΌαž›αŸ–

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).

αž§αž”αž€αžšαžŽαŸαž”αŸ†αž›αŸ‚αž„αž…αžšαž“αŸ’αžαžαŸ’αžšαž‘αž”αŸ‹ tuples αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαžΆαž˜αžšαž™αŸˆ HTTP αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„ tuples αž‘αŸ…αž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ serialization αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž“αŸαŸ‡αŸ” 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. αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αž αž‘αŸ†αž αŸ†αž‘αŸ†αž–αŸαžšαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŸαŸ†αžαžΆαž“αŸ‹αž‡αžΆαž„αŸ” αžœαžΆαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‘αŸ†αž αŸ†αž˜αž’αŸ’αž™αž˜αž“αŸƒ tuple αž’αžœαž€αžΆαžŸαŸ” αž‘αŸ†αž αŸ†αž‘αŸ†αž–αŸαžšαžŠαŸαž”αŸ’αžšαžŸαžΎαžšαž”αŸ†αž•αž»αžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžŠαŸ„αž™αž€αžΆαžšαžœαžΆαžŸαŸ‹αžœαŸ‚αž„αž–αŸαž›αžœαŸαž›αžΆαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž‘αŸ†αž αŸ†αž‘αŸ†αž–αŸαžšαž€αžΆαž“αŸ‹αžαŸ‚αž’αŸ† αž…αŸ†αž“αž½αž“αžŠαŸ†αžŽαžΎαžšαž‘αŸ…αž˜αž€αžαžΌαž…αž‡αžΆαž„αžšαžœαžΆαž„αž—αžΆαž‚αžΈαž•αŸ’αž‰αžΎ αž“αž·αž„αž‘αž‘αž½αž›αŸ” αžœαž·αž’αžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž–αŸαž›αžœαŸαž›αžΆαž‘αžΆαŸ†αž„αž˜αžΌαž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αŸ†αž αŸ†αž‘αŸ†αž–αŸαžšαž’αŸ†αž–αŸαž€ αž™αžΎαž„αž“αžΉαž„αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžšαž–αŸαž€ αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž’αŸ’αžœαžΎαžŸαŸŠαŸαžšαžΈαž‚αŸ†αžšαžΌαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αžœαžΆαž’αžΆαž…αž˜αžΆαž“αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαžΎαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αž€αžŠαž›αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš page_size αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αž–αžΈαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αž“αŸ’αž›αŸ„αŸ‡αž”αž‰αŸ’αž‡αžΌαž“αž“αžΈαž˜αž½αž™αŸ— αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αž“αŸ’αž›αŸ„αŸ‡αž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ (αž§αž‘αžΆαž αžšαžŽαŸ 100) αž’αžΆαž…αžŸαž˜αžšαž˜αŸ’αž™αŸ”

αžαŸ„αŸ‡αž’αž“αž»αžœαžαŸ’αžαž˜αž»αžαž„αžΆαžš get_goods:

tarantool> get_goods(0)

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

αž…αžΌαžšαž™αžΎαž„αž™αž€αžαž˜αŸ’αž›αŸƒαžœαžΆαž› row_ver αž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž αžΎαž™αž αŸ…αž˜αž»αžαž„αžΆαžšαž˜αŸ’αžαž„αž‘αŸ€αžαŸ–

tarantool> get_goods(5)

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

αž‡αžΆβ€‹αžαŸ’αž˜αžΈβ€‹αž˜αŸ’αžαž„β€‹αž‘αŸ€αž:

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

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαžœαž·αž’αžΈαž“αŸαŸ‡ αž˜αž»αžαž„αžΆαžšαžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ†αž–αŸαžšαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž›αŸ†αž αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ„αž™αž‘αŸ†αž–αŸαžš goods. αž‘αŸ†αž–αŸαžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαžŠαŸ„αž™αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‘αž‘αŸαŸ”

αžαŸ„αŸ‡αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸ†αž αŸ–

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

αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαž˜αŸ’αž›αŸƒαžœαžΆαž› name αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžΆαžαž»αž˜αž½αž™ αž“αž·αž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αžαŸ’αž˜αžΈαž–αžΈαžšαŸ”

αž…αžΌαžšαž™αžΎαž„αž’αŸ’αžœαžΎαž€αžΆαžšαž αŸ…αž˜αž»αžαž„αžΆαžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž˜αŸ’αžαž„αž‘αŸ€αžαŸ–

tarantool> get_goods(8)
---



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

αž˜αž»αžαž„αžΆαžšαž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž»αžαž„αžΆαžš get_goods αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžšαž”αžŸαŸ‹αžœαžΆ αžŠαŸ‚αž›αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž…αž˜αŸ’αž›αž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆαŸ”

αž™αžΎαž„αž“αžΉαž„αž‘αž»αž€αž€αžΆαžšαž…αŸαž‰αž›αž‘αŸ’αž’αž•αž›αžαžΆαž˜αžšαž™αŸˆ HTTP αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ JSON αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αžœαž·αžŸαžΆαž›αž—αžΆαž–αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ– https://habr.com/ru/company/mailru/blog/272141/

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž•αŸ’αž“αŸ‚αž€αž’αžαž·αžαž·αž‡αž“/αž‘αžΆαžŸαž€αžš

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžαžΆαžαžΎαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αž—αžΆαž‚αžΈαž‘αž‘αž½αž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž˜αŸ’αžŠαŸαž…αŸ” αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž€αž“αŸ’αž›αŸ‚αž„αž‘αŸ†αž“αŸαžšαž“αŸ…αž•αŸ’αž“αŸ‚αž€αž‘αž‘αž½αž› αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αŸ–

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

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

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

        }
    },
    if_not_exists = true
})

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

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αž“αŸƒαž›αŸ†αž αž“αŸαŸ‡αž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž›αž“αžΉαž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž›αŸ†αž αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž—αž–αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž›αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αž½αžšαžˆαžš row_ver αž˜αž·αž“αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž‘αŸαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž› id αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž”αŸ’αžšαž—αž–αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžαŸ‹αžαŸ’αžšαžΆαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž“αŸ…β€‹αžαžΆαž„β€‹αž’αŸ’αž“αž€β€‹αž‘αž‘αž½αž›β€‹αž˜αž·αž“β€‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžœαžΆβ€‹αž”αž„αŸ’αž€αžΎαž“β€‹αžŠαŸ„αž™β€‹αžŸαŸ’αžœαŸαž™β€‹αž”αŸ’αžšαžœαžαŸ’αžαž·β€‹αž‘αŸαŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αž“αŸ’αž›αŸ‚αž„αž‘αŸ†αž“αŸαžšαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαž˜αŸ’αž›αŸƒ row_ver:

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

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

        }
    },
    if_not_exists = true
})

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

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αž‘αž»αž€αž“αžΈαž˜αž½αž™αŸ— (αžœαžΆαž› space_name) αž™αžΎαž„αž“αžΉαž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‘αž»αž€αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡ row_ver (αžœαžΆαž› value) αž‡αž½αžšαžˆαžšαžŠαžΎαžšαžαž½αž“αžΆαž‘αžΈαž‡αžΆαž‚αž“αŸ’αž›αžΉαŸ‡αžŸαŸ†αžαžΆαž“αŸ‹ space_name.

αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžšαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸ†αž  goods αžαžΆαž˜αžšαž™αŸˆ HTTP αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αžΆαž“ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ HTTP αŸ” αž”αž“αŸ’αž‘αžΆαžαŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž•αŸ’αž‘αž»αž€αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ αž“αž·αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ HTTP αž—αŸ’αž›αžΆαž˜αŸ—αŸ–

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

αž™αžΎαž„αž€αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ json deserializationαŸ–

local json = require('json')

αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ–

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

αž˜αž»αžαž„αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŸαŸ†αžŽαžΎ HTTP αž‘αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ url αž αžΎαž™αž•αŸ’αž‰αžΎαžœαžΆαŸ” 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹