เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เชฎเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ

เชนเซ‡เชฒเซ‹, เชนเซเช‚ DBMS เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚ เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ Mail.ru เช—เซเชฐเซเชช เชฆเซเชตเชพเชฐเชพ เชตเชฟเช•เชธเชฟเชค เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช›เซ‡ เชœเซ‡ เช‰เชšเซเชš-เชชเซเชฐเชฆเชฐเซเชถเชจ DBMS เช…เชจเซ‡ เชฒเซเช† เชญเชพเชทเชพเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชฐเซเชตเชฐเชจเซ‡ เชœเซ‹เชกเซ‡ เช›เซ‡. เช–เชพเชธ เช•เชฐเซ€เชจเซ‡, DBMS เชจเชพ เช‡เชจ-เชฎเซ‡เชฎเชฐเซ€ เชฎเซ‹เชก เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชธเชฟเช‚เช—เชฒ เชเชกเซเชฐเซ‡เชธ เชธเซเชชเซ‡เชธเชฎเชพเช‚ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฌเชฟเชเชจเซ‡เชธ เชฒเซ‹เชœเชฟเช•เชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡, เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช‰เช•เซ‡เชฒเซ‹เชจเซ€ เชŠเช‚เชšเซ€ เชเชกเชช เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, ACID เชตเซเชฏเชตเชนเชพเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพเชจเซ€ เชฆเซเชฐเชขเชคเชพ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชกเชฟเชธเซเช• เชชเชฐ WAL เชฒเซ‹เช— เชœเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡). เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช…เชจเซ‡ เชถเชพเชฐเซเชกเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชธเชชเซ‹เชฐเซเชŸ เช›เซ‡. เชธเช‚เชธเซเช•เชฐเชฃ 2.1 เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡, SQL เชญเชพเชทเชพเชฎเชพเช‚ เช•เซเชตเซ‡เชฐเซ€เช เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เช›เซ‡. Tarantool เช“เชชเชจ เชธเซ‹เชฐเซเชธ เช›เซ‡ เช…เชจเซ‡ เชธเชฐเชณ BSD เชฒเชพเชฏเชธเชจเซเชธ เชนเซ‡เช เชณ เชฒเชพเช‡เชธเชจเซเชธ เชชเซเชฐเชพเชชเซเชค เช›เซ‡. เช•เซ‹เชฎเชฐเซเชถเชฟเชฏเชฒ เชเชจเซเชŸเชฐเชชเซเชฐเชพเช‡เช เชตเชฐเซเชเชจ เชชเชฃ เช›เซ‡.

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เชฎเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ
เชถเช•เซเชคเชฟ เช…เชจเซเชญเชตเซ‹! (...เช‰เชฐเซเชซ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‹ เช†เชจเช‚เชฆ เชฎเชพเชฃเซ‹)

เช‰เชชเชฐเซ‹เช•เซเชค เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชนเชพเช‡-เชฒเซ‹เชก เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชจเซ‡ เช†เช•เชฐเซเชทเช• เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เช†เชตเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚, เช˜เชฃเซ€ เชตเช–เชค เชกเซ‡เชŸเชพเชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ‡ เช›เซ‡.

เช‰เชชเชฐ เชœเชฃเชพเชตเซเชฏเชพ เชฎเซเชœเชฌ, เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชกเซ‡เชŸเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช›เซ‡. เชคเซ‡เชจเชพ เช“เชชเชฐเซ‡เชถเชจเชจเซ‹ เชธเชฟเชฆเซเชงเชพเช‚เชค เชฎเชพเชธเซเชŸเชฐ เชฒเซ‹เช— (WAL) เชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชคเชฎเชพเชฎ เชตเซเชฏเชตเชนเชพเชฐเซ‹เชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“ เชชเชฐ เช•เซเชฐเชฎเชฟเช• เชฐเซ€เชคเซ‡ เช…เชฎเชฒ เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช†เชตเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ (เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช†เช—เชณ เช•เชนเซ€เชถเซเช‚ เชจเชฟเชฎเซเชจ เชธเซเชคเชฐ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชซเซ‹เชฒเซเชŸ เชธเชนเชฟเชทเซเชฃเซเชคเชพเชจเซ‡ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡/เช…เชฅเชตเชพ เช•เซเชฒเชธเซเชŸเชฐ เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เชฐเซ€เชกเชฟเช‚เช— เชฒเซ‹เชกเชจเซ‡ เชตเชฟเชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡.

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เชฎเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ
เชšเซ‹เช–เชพ. 1. เช•เซเชฒเชธเซเชŸเชฐเชจเซ€ เช…เช‚เชฆเชฐ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ

เชตเซˆเช•เชฒเซเชชเชฟเช• เชฆเซƒเชถเซเชฏเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—/เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชเช• เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฌเชจเชพเชตเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซ‡ เชฌเซ€เชœเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡. เชชเช›เซ€เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เช‰เช•เซ‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช‰เชšเซเชš เชธเซเชคเชฐ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ - เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชฟเชเชจเซ‡เชธ เชฒเซ‹เชœเชฟเช• เชธเซเชคเชฐเซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ. เชคเซ‡. เช…เชฎเซ‡ DBMS เชฎเชพเช‚ เชฌเชจเซ‡เชฒเชพ เชคเซˆเชฏเชพเชฐ เชธเซ‹เชฒเซเชฏเซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชœเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชตเชฟเช•เชธเชพเชตเซ€เช เช›เซ€เช เชคเซ‡เชจเซ€ เช…เช‚เชฆเชฐ เช…เชฎเชพเชฐเซ€ เชœเชพเชคเซ‡ เชœ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€เช เช›เซ€เช. เช† เช…เชญเชฟเช—เชฎเชจเชพ เชซเชพเชฏเชฆเชพ เช…เชจเซ‡ เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เชฌเช‚เชจเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชซเชพเชฏเชฆเชพเช“เชจเซ€ เชฏเชพเชฆเซ€ เช•เชฐเซ€เช.

1. เชŸเซเชฐเชพเชซเชฟเช• เชฌเชšเชค:

  • เชคเชฎเซ‡ เชฌเชงเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‹ เชฎเชพเชคเซเชฐ เชเช• เชญเชพเช— (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เชซเช•เซเชค เช…เชฎเซเช• เช•เซ‹เชทเซเชŸเช•เซ‹, เชคเซ‡เชฎเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช•เซ‰เชฒเชฎเซเชธ เช…เชฅเชตเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡ เชšเซ‹เช•เซเช•เชธ เชฎเชพเชชเชฆเช‚เชกเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡ เช›เซ‡);
  • เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, เชœเซ‡ เช…เชธเซเชฎเซ‡เชณ (เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃ - 1.10 เชฎเชพเช‚ เช…เชฎเชฒเชฎเชพเช‚) เช…เชฅเชตเชพ เชธเชฟเช‚เช•เซเชฐเชจเชธ (เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชจเชพ เช…เชจเซเช—เชพเชฎเซ€ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซเช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡) เชฎเซ‹เชกเชฎเชพเช‚ เชธเชคเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชคเซเชฐเซ‹เชฎเชพเช‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซเชฐเชฅเชฎ เชกเซ‡เชŸเชพเชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เช เช•เชฐเซ‡ เช›เซ‡ - เชเช• เชตเชฟเชจเชฟเชฎเชฏ เชธเชคเซเชฐ เชกเซ‡เชŸเชพ, เชชเช›เซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฎเชพเช‚ เชตเชฟเชฐเชพเชฎ เช›เซ‡, เชœเซ‡เชจเชพ เชชเช›เซ€ เช†เช—เชพเชฎเซ€ เชตเชฟเชจเชฟเชฎเชฏ เชธเชคเซเชฐ เชฅเชพเชฏ เช›เซ‡, เชตเช—เซ‡เชฐเซ‡);
  • เชœเซ‹ เช•เซ‹เชˆ เชฐเซ‡เช•เซ‹เชฐเซเชก เช˜เชฃเซ€ เชตเช–เชค เชฌเชฆเชฒเชพเชˆ เช—เชฏเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชซเช•เซเชค เชคเซ‡เชจเชพ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, เชœเซ‡เชฎเชพเช‚ เชฎเชพเชธเซเชŸเชฐ เชชเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชคเชฎเชพเชฎ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“ เชชเชฐ เช…เชจเซเช•เซเชฐเชฎเซ‡ เชชเชพเช›เชพ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡).

2. HTTP เชเช•เซเชธเชšเซ‡เชจเซเชœเชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชฎเชพเช‚ เช•เซ‹เชˆ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชจเชฅเซ€, เชœเซ‡ เชคเชฎเชจเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธเชจเซ‡ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เชฎเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ
เชšเซ‹เช–เชพ. 2. HTTP เชชเชฐ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ

3. เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเซเชŸเซเชฐเช•เซเชšเชฐ เช•เซ‡ เชœเซ‡เชจเซ€ เชตเชšเซเชšเซ‡ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡ เชธเชฎเชพเชจ เชนเซ‹เชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€ (เชตเชงเซเชฎเชพเช‚, เชธเชพเชฎเชพเชจเซเชฏ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชตเชฟเชตเชฟเชง DBMS, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“, เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเซเชธ เชตเช—เซ‡เชฐเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชฃ เชถเช•เซเชฏ เช›เซ‡).

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เชฎเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ
เชšเซ‹เช–เชพ. 3. เชตเชฟเชœเชพเชคเซ€เชฏ เชชเซเชฐเชฃเชพเชฒเซ€เช“เชฎเชพเช‚ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ

เชจเซเช•เชธเชพเชจ เช เช›เซ‡ เช•เซ‡, เชธเชฐเซ‡เชฐเชพเชถ, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ/เช–เชฐเซเชšเชพเชณ เช›เซ‡, เช…เชจเซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซ‡ เช•เชธเซเชŸเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡, เชคเชฎเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เช…เชฎเชฒเซ€เช•เชฐเชฃ เช•เชฐเชตเซ€ เชชเชกเชถเซ‡.

เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เช‰เชชเชฐเซ‹เช•เซเชค เชซเชพเชฏเชฆเชพ เชจเชฟเชฐเซเชฃเชพเชฏเช• เช›เซ‡ (เช…เชฅเชตเชพ เช†เชตเชถเซเชฏเช• เชถเชฐเชค เช›เซ‡), เชคเซ‹ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชคเซ‡ เช…เชฐเซเชฅเชชเซ‚เชฐเซเชฃ เช›เซ‡. เชšเชพเชฒเซ‹ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒ 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. เช† เช•เชพเช‰เชจเซเชŸเชฐเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เช‰เชฎเซ‡เชฐเชพเชฏเซ‡เชฒ/เชฌเชฆเชฒเซ‡เชฒเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฎเชพเช‚ เช† เช•เซ‰เชฒเชฎเชจเชพ เชซเซ€เชฒเซเชกเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชธเซ‹เช‚เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เชชเชพเชธเซ‡ เชธเชฎเชพเชจ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เชจเชฅเซ€. เชœเซ‹ เช•เซ‡, เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เชคเซ‡เชจเซ‡ เชœเชพเชคเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เชจเชฅเซ€. เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฅเชพเชฏ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เชฅเซ‹เชกเซ€ เชชเชฐเชฟเชญเชพเชทเชพ: เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‡ เชธเซเชชเซ‡เชธ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซ‡ เชŸเซเชฏเซเชชเชฒเซเชธ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เชคเชฎเซ‡ เชธเชฟเช•เซเชตเชจเซเชธ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹. เช•เซเชฐเชฎเชพเช‚เช•เชฟเชค เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชฎเซ‚เชฒเซเชฏเซ‹เชจเชพ เชจเชพเชฎเชพเช‚เช•เชฟเชค เชœเชจเชฐเซ‡เชŸเชฐ เช•เชฐเชคเชพเช‚ เชตเชงเซ เช•เช‚เชˆ เชจเชฅเซ€. เชคเซ‡. เช† เชคเซ‡ เชœ เช›เซ‡ เชœเซ‡ เช†เชชเชฃเชจเซ‡ เช†เชชเชฃเชพ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เชœเซ‹เชˆเช เช›เซ‡. เชจเซ€เชšเซ‡ เช†เชชเชฃเซ‡ เช†เชตเซ€ เช•เซเชฐเชฎ เชฌเชจเชพเชตเซ€เชถเซเช‚.

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชกเซ‡เชŸเชพเชฌเซ‡เช เช“เชชเชฐเซ‡เชถเชจ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ, เชคเชฎเชพเชฐเซ‡ เชจเซ€เชšเซ‡เชจเซ‹ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

box.cfg{}

เชชเชฐเชฟเชฃเชพเชฎเซ‡, Tarantool เชตเชฐเซเชคเชฎเชพเชจ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเซเชจเซ‡เชชเชถเซ‹เชŸ เช…เชจเซ‡ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เชฒเซ‹เช— เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชถเซ‡.

เชšเชพเชฒเซ‹ เชเช• เช•เซเชฐเชฎ เชฌเชจเชพเชตเซ€เช row_version:

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

เชตเชฟเช•เชฒเซเชช if_not_exists เชธเชฐเซเชœเชจ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‡ เช˜เชฃเซ€ เชตเช–เชค เชšเชฒเชพเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡: เชœเซ‹ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡, เชคเซ‹ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒ เชคเซ‡เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เช† เชตเชฟเช•เชฒเซเชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชชเช›เซ€เชจเชพ เชคเชฎเชพเชฎ DDL เช†เชฆเซ‡เชถเซ‹เชฎเชพเช‚ เชฅเชถเซ‡.

เชšเชพเชฒเซ‹ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชœเช—เซเชฏเชพ เชฌเชจเชพเชตเซ€เช.

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

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

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

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

        }
    },
    if_not_exists = true
})

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชœเช—เซเชฏเชพเชจเซเช‚ เชจเชพเชฎ เชธเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช (goods), เช•เซเชทเซ‡เชคเซเชฐเชจเชพ เชจเชพเชฎเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชชเซเชฐเช•เชพเชฐเซ‹.

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เช‘เชŸเซ‹-เช‡เชจเซเช•เซเชฐเชฟเชฎเซ‡เชจเซเชŸเชฟเช‚เช— เชซเซ€เชฒเซเชกเซเชธ เชชเชฃ เชธเชฟเช•เซเชตเชจเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชซเซ€เชฒเซเชก เชฆเซเชตเชพเชฐเชพ เชธเซเชตเชคเชƒ-เชตเชงเชพเชฐเชคเซ€ เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€ เชฌเชจเชพเชตเซ€เช id:

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

เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒ เช…เชจเซ‡เช• เชชเซเชฐเช•เชพเชฐเชจเชพ เชˆเชจเซเชกเซ‡เช•เซเชธเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เชธเซŒเชฅเซ€ เชตเชงเซ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชธเซ‚เชšเช•เชพเช‚เช•เซ‹ TREE เช…เชจเซ‡ HASH เชชเซเชฐเช•เชพเชฐเซ‹ เช›เซ‡, เชœเซ‡ เชจเชพเชฎเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชฌเช‚เชงเชพเชฐเชฃเซ‹ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡. TREE เชธเซŒเชฅเซ€ เชธเชฐเซเชตเชคเซ‹เชฎเซเช–เซ€ เช‡เชจเซเชกเซ‡เช•เซเชธ เชชเซเชฐเช•เชพเชฐ เช›เซ‡. เชคเซ‡ เชคเชฎเชจเซ‡ เชธเช‚เช—เช เชฟเชค เชฐเซ€เชคเซ‡ เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชธเชฎเชพเชจเชคเชพ เชชเชธเช‚เชฆเช—เซ€ เชฎเชพเชŸเซ‡, HASH เชตเชงเซ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เชคเชฆเชจเซเชธเชพเชฐ, เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€ เชฎเชพเชŸเซ‡ HASH เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชธเชฒเชพเชน เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชœเซ‡ เช…เชฎเซ‡ เช•เชฐเซเชฏเซเช‚ เช›เซ‡).

เช•เซ‰เชฒเชฎ เชตเชพเชชเชฐเชตเชพ เชฎเชพเชŸเซ‡ row_ver เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช† เช•เซ‰เชฒเชฎเชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชฎเชพเช‚ เช…เชจเซเช•เซเชฐเชฎ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฌเชพเช‚เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ row_ver. เชชเชฐเช‚เชคเซ เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€เชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, เช•เซ‰เชฒเชฎ เชซเซ€เชฒเซเชก เชฎเซ‚เชฒเซเชฏ row_ver เชฎเชพเชคเซเชฐ เชจเชตเชพ เชฐเซ‡เช•เซ‹เชฐเซเชก เช‰เชฎเซ‡เชฐเชคเซ€ เชตเช–เชคเซ‡ เชœ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชนเชพเชฒเชจเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ‡ เชฌเชฆเชฒเชคเซ€ เชตเช–เชคเซ‡ เชชเชฃ เชเช• เชตเชงเชพเชฐเชตเซ‹ เชœเซ‹เชˆเช. เชคเชฎเซ‡ เช† เชฎเชพเชŸเซ‡ เชŸเซเชฐเชฟเช—เชฐเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เชฌเซ‡ เชชเซเชฐเช•เชพเชฐเชจเชพ เชธเซเชชเซ‡เชธ เชŸเซเชฐเชฟเช—เชฐเซเชธ เช›เซ‡: before_replace ะธ on_replace. เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เชœเช—เซเชฏเชพเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฌเชฆเชฒเชพเชฏ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชŸเซเชฐเชฟเช—เชฐเซเชธ เชซเชพเชฏเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชซเซ‡เชฐเชซเชพเชฐเซ‹เชฅเซ€ เชชเซเชฐเชญเชพเชตเชฟเชค เชฆเชฐเซ‡เช• เชŸเซเชฏเซเชชเชฒ เชฎเชพเชŸเซ‡, เชŸเซเชฐเชฟเช—เชฐ เชซเช‚เช•เซเชถเชจ เชถเชฐเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡). เชตเชฟเชชเชฐเซ€เชค on_replace, before_replace-เชŸเซเชฐเชฟเช—เชฐเซเชธ เชคเชฎเชจเซ‡ เชŸเซเชฏเซเชชเชฒเชจเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชธเช‚เชถเซ‹เชงเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชŸเซเชฐเชฟเช—เชฐ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเชฆเชจเซเชธเชพเชฐ, เช›เซ‡เชฒเซเชฒเชพ เชชเซเชฐเช•เชพเชฐเชจเชพ เชŸเซเชฐเชฟเช—เชฐเซเชธ เช…เชฎเชจเซ‡ เช…เชจเซเช•เซ‚เชณ เช•เชฐเซ‡ เช›เซ‡.

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

เชจเซ€เชšเซ‡เชจเซเช‚ เชŸเซเชฐเชฟเช—เชฐ เชซเซ€เชฒเซเชก เชตเซ‡เชฒเซเชฏเซเชจเซ‡ เชฌเชฆเชฒเซ‡ เช›เซ‡ row_ver เช•เซเชฐเชฎเชจเชพ เช†เช—เชฒเชพ เชฎเซ‚เชฒเซเชฏ เชธเซเชงเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เชŸเซเชฏเซเชชเชฒ row_version.

เช…เชตเช•เชพเชถเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เช•เชพเชขเชตเชพเชฎเชพเช‚ เชธเชฎเชฐเซเชฅ เชฅเชตเชพ เชฎเชพเชŸเซ‡ goods เช•เซ‰เชฒเชฎ เชฆเซเชตเชพเชฐเชพ row_ver, เชšเชพเชฒเซ‹ เชเช• เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฌเชจเชพเชตเซ€เช:

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

เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชชเซเชฐเช•เชพเชฐ - เชตเซƒเช•เซเชท (TREE), เช•เชพเชฐเชฃ เช•เซ‡ เช†เชชเชฃเซ‡ เช•เซ‹เชฒเชฎเชฎเชพเช‚เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเชพ เชšเชกเชคเชพ เช•เซเชฐเชฎเชฎเชพเช‚ เชกเซ‡เชŸเชพ เช•เชพเชขเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ row_ver.

เชšเชพเชฒเซ‹ เชธเซเชชเซ‡เชธเชฎเชพเช‚ เชฅเซ‹เชกเซ‹ เชกเซ‡เชŸเชพ เช‰เชฎเซ‡เชฐเซ€เช:

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

เช•เชพเชฐเชฃ เช•เซ‡ เชชเซเชฐเชฅเชฎ เชซเซ€เชฒเซเชก เช“เชŸเซ‹-เช‡เชจเซเช•เซเชฐเซ€เชฎเซ‡เชจเซเชŸเชฟเช‚เช— เช•เชพเช‰เชจเซเชŸเชฐ เช›เซ‡; เช…เชฎเซ‡ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ เชถเซ‚เชจเซเชฏ เชชเชธเชพเชฐ เช•เชฐเซ€เช เช›เซ€เช. เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ เช†เชชเชฎเซ‡เชณเซ‡ เช†เช—เชฒเชพ เชฎเซ‚เชฒเซเชฏเชจเซ‡ เชฌเชฆเชฒเซ‡ เช›เซ‡. เช เชœ เชฐเซ€เชคเซ‡, เช•เซ‰เชฒเชฎ เชซเซ€เชฒเซเชกเซเชธเชจเซ€ เช•เชฟเช‚เชฎเชค เชคเชฐเซ€เช•เซ‡ row_ver เชคเชฎเซ‡ เชถเซ‚เชจเซเชฏ เชชเชพเชธ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ - เช…เชฅเชตเชพ เช•เชฟเช‚เชฎเชค เชฌเชฟเชฒเช•เซเชฒ เชธเซเชชเชทเซเชŸ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช† เชธเซเชคเช‚เชญ เชœเช—เซเชฏเชพเชฎเชพเช‚ เช›เซ‡เชฒเซเชฒเซเช‚ เชธเซเชฅเชพเชจ เชงเชฐเชพเชตเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชจเชฟเชตเซ‡เชถ เชชเชฐเชฟเชฃเชพเชฎ เชคเชชเชพเชธเซ€เช:

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

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชชเซเชฐเชฅเชฎ เช…เชจเซ‡ เช›เซ‡เชฒเซเชฒเซ€ เชซเซ€เชฒเซเชกเซเชธ เช†เชชเชฎเซ‡เชณเซ‡ เชญเชฐเชพเชˆ เชœเชพเชฏ เช›เซ‡. เชนเชตเซ‡ เชœเช—เซเชฏเชพเชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชชเซƒเชทเซเช -เชฆเชฐ-เชชเซƒเชทเซเช  เช…เชชเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชซเช‚เช•เซเชถเชจ เชฒเช–เชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชถเซ‡ goods:

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

เชซเช‚เช•เซเชถเชจ เชฎเซ‚เชฒเซเชฏเชจเซ‡ เชชเชฐเชฟเชฎเชพเชฃ เชคเชฐเซ€เช•เซ‡ เชฒเซ‡ เช›เซ‡ row_ver, เชœเซเชฏเชพเช‚เชฅเซ€ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เช…เชจเชฒเซ‹เชก เช•เชฐเชตเชพ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เช…เชจเซ‡ เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซ‹ เชเช• เชญเชพเช— เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชธเซ‡เชฎเซเชชเชฒเชฟเช‚เช— เชˆเชจเซเชกเซ‡เช•เซเชธ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช•เชพเชฐเซเชฏ get_goods เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฆเซเชตเชพเชฐเชพ เช‡เชŸเชฐเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ row_ver เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡. เช‡เชŸเชฐเชฐเซ‡เชŸเชฐเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เชœเซ€เชŸเซ€ (เช—เซเชฐเซ‡เชŸเชฐ เชงเซ‡เชจ, เชคเซ‡เชจเชพเชฅเซ€ เชตเชงเซ) เช›เซ‡. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเช• เช…เชจเซเช•เซเชฐเชฎเซ‡ เชชเชธเชพเชฐ เช•เชฐเซ‡เชฒ เช•เซ€ (เช•เซเชทเซ‡เชคเซเชฐ เชฎเซ‚เชฒเซเชฏ row_ver).

เชชเซเชจเชฐเชพเชตเชฐเซเชคเช• เชŸเซเชฏเซเชชเชฒเซเชธ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡. เชชเช›เซ€เชฅเซ€ HTTP เชฆเซเชตเชพเชฐเชพ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡, เชŸเซเชฏเซเชชเชฒเซเชธเชจเซ‡ เช…เชจเซเช—เชพเชฎเซ€ เชธเซ€เชฐเซ€เชฏเชฒเชพเช‡เชเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เช…เชจเซเช•เซ‚เชณ เชฎเชพเชณเช–เชพเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เช† เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช•เชพเชฐเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ tomap. เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ tomap เชคเชฎเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชชเชฃเซ‡ เชซเซ€เชฒเซเชกเชจเซเช‚ เชจเชพเชฎ เชฌเชฆเชฒเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช name, เช•เซเชทเซ‡เชคเซเชฐ เชชเชธเชพเชฐ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚ code เช…เชจเซ‡ เชเช• เช•เซเชทเซ‡เชคเซเชฐ เช‰เชฎเซ‡เชฐเซ‹ comment:

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

เช†เช‰เชŸเชชเซเชŸ เชกเซ‡เชŸเชพเชจเซเช‚ เชชเซƒเชทเซเช  เช•เชฆ (เชเช• เชญเชพเช—เชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพ) เชšเชฒ เชฆเซเชตเชพเชฐเชพ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ page_size. เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏ page_size 5 เช›เซ‡. เชตเชพเชธเซเชคเชตเชฟเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚, เชชเซƒเชทเซเช เชจเซเช‚ เช•เชฆ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชตเชงเซ เชฎเชนเชคเซเชตเชจเซเช‚ เช›เซ‡. เชคเซ‡ เชธเซเชชเซ‡เชธ เชŸเซเชฏเซเชชเชฒเชจเชพ เชธเชฐเซ‡เชฐเชพเชถ เช•เชฆ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡. เชถเซเชฐเซ‡เชทเซเช  เชชเซƒเชทเซเช  เช•เชฆ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชธเชฎเชฏเชจเซ‡ เชฎเชพเชชเซ€เชจเซ‡ เชชเซเชฐเชฏเซ‹เช—เชพเชคเซเชฎเช• เชฐเซ€เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชชเซƒเชทเซเช เชจเซเช‚ เช•เชฆ เชœเซ‡เชŸเชฒเซเช‚ เชฎเซ‹เชŸเซเช‚ เช›เซ‡, เชฎเซ‹เช•เชฒเชตเชพ เช…เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชฌเชพเชœเซเช“ เชตเชšเซเชšเซ‡ เชฐเชพเช‰เชจเซเชกเชŸเซเชฐเซ€เชชเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชœเซ‡เชŸเชฒเซ€ เช“เช›เซ€ เช›เซ‡. เช† เชฐเซ€เชคเซ‡ เชคเชฎเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชเช•เช‚เชฆเชฐ เชธเชฎเชฏ เช˜เชŸเชพเชกเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเซ‹ เช•เซ‡, เชœเซ‹ เชชเซƒเชทเซเช เชจเซเช‚ เช•เชฆ เช–เซ‚เชฌ เชฎเซ‹เชŸเซเช‚ เช›เซ‡, เชคเซ‹ เช…เชฎเซ‡ เชจเชฎเซ‚เชจเชพเชจเซ‡ เชถเซเชฐเซ‡เชฃเซ€เชฌเชฆเซเชง เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชฐเซเชตเชฐ เชชเชฐ เช˜เชฃเซ‹ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชชเชธเชพเชฐ เช•เชฐเซ€เชถเซเช‚. เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชธเชฐเซเชตเชฐ เชชเชฐ เช†เชตเชคเซ€ เช…เชจเซเชฏ เชตเชฟเชจเช‚เชคเซ€เช“ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เชตเชฟเชฒเช‚เชฌ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชชเชฐเชฟเชฎเชพเชฃ page_size เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ เชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฆเชฐเซ‡เช• เชชเซเชฐเชธเชพเชฐเชฟเชค เชœเช—เซเชฏเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชคเซ‡เชจเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเซ‹ เช•เซ‡, เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เชœเช—เซเชฏเชพเช“ เชฎเชพเชŸเซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, 100) เชฏเซ‹เช—เซเชฏ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชซเช‚เช•เซเชถเชจ เชเช•เซเชเซ€เช•เซเชฏเซเชŸ เช•เชฐเซ€เช get_goods:

tarantool> get_goods(0)

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

เชšเชพเชฒเซ‹ เชซเซ€เชฒเซเชก เชตเซ‡เชฒเซเชฏเซ เชฒเชˆเช row_ver เช›เซ‡เชฒเซเชฒเซ€ เชฒเชพเช‡เชจเชฎเชพเช‚เชฅเซ€ เช…เชจเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เซ‰เชฒ เช•เชฐเซ‹:

tarantool> get_goods(5)

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

เชซเชฐเซ€ เชเช•เชตเชพเชฐ:

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

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชœเซเชฏเชพเชฐเซ‡ เช† เชฐเซ€เชคเซ‡ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชซเช‚เช•เซเชถเชจ เชฌเชงเชพ เชธเซเชชเซ‡เชธ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชชเซ‡เชœ เชฌเชพเชฏ เชชเซ‡เชœ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ goods. เช›เซ‡เชฒเซเชฒเซเช‚ เชชเซƒเชทเซเช  เช–เชพเชฒเซ€ เชชเชธเช‚เชฆเช—เซ€ เชฆเซเชตเชพเชฐเชพ เช…เชจเซเชธเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชœเช—เซเชฏเชพเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€เช:

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

เช…เชฎเซ‡ เชซเซ€เชฒเซเชก เชตเซ‡เชฒเซเชฏเซ เชฌเชฆเชฒเซ€ เช›เซ‡ name เชเช• เชเชจเซเชŸเซเชฐเซ€ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชฌเซ‡ เชจเชตเซ€ เชเชจเซเชŸเซเชฐเซ€เช“ เช‰เชฎเซ‡เชฐเซ€.

เชšเชพเชฒเซ‹ เช›เซ‡เชฒเซเชฒเชพ เชซเช‚เช•เซเชถเชจ เช•เซ‹เชฒเชจเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเซ€เช:

tarantool> get_goods(8)
---



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

เชซเช‚เช•เซเชถเชจเซ‡ เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เช…เชจเซ‡ เช‰เชฎเซ‡เชฐเซ‡เชฒเชพ เชฐเซ‡เช•เซ‹เชฐเซเชก เชชเชฐเชค เช•เชฐเซเชฏเชพ. เชคเซ‡เชฅเซ€ เช•เชพเชฐเซเชฏ get_goods เชคเชฎเชจเซ‡ เชคเซ‡เชจเชพ เช›เซ‡เชฒเซเชฒเชพ เช•เซ‰เชฒเชฅเซ€ เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เชœเซ‡ เชตเชฟเชšเชพเชฐเชฃเชพ เชนเซ‡เช เชณเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช†เชงเชพเชฐ เช›เซ‡.

เช…เชฎเซ‡ เช† เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ JSON เชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ HTTP เชฎเชพเชฐเชซเชคเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชœเชพเชฐเซ€ เช•เชฐเซ€เชถเซเช‚. เชคเชฎเซ‡ เช† เชตเชฟเชถเซ‡ เช…เชนเซ€เช‚ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹: https://habr.com/ru/company/mailru/blog/272141/

เช—เซเชฐเชพเชนเช•/เช—เซเชฒเชพเชฎ เชญเชพเช—เชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ

เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชชเซเชฐเชพเชชเซเชคเช•เชฐเซเชคเชพ เชฌเชพเชœเซเชจเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ เช•เซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡. เชšเชพเชฒเซ‹ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชชเซเชคเชฟ เชฌเชพเชœเซ เชชเชฐ เชเช• เชœเช—เซเชฏเชพ เชฌเชจเชพเชตเซ€เช:

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

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

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

        }
    },
    if_not_exists = true
})

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

เช…เชตเช•เชพเชถเชจเซเช‚ เชฎเชพเชณเช–เซเช‚ เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚ เชœเช—เซเชฏเชพเชจเชพ เชฌเช‚เชงเชพเชฐเชฃ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชชเซเชฐเชพเชชเซเชค เชกเซ‡เชŸเชพเชจเซ‡ เชฌเซ€เชœเซ‡ เช•เซเชฏเชพเช‚เชฏ เชชเชพเชธ เช•เชฐเชตเชพเชจเชพ เชจเชฅเซ€ เชเชŸเชฒเซ‡ เช•เซ‰เชฒเชฎ row_ver เชชเซเชฐเชพเชชเซเชคเช•เชฐเซเชคเชพเชจเซ€ เชœเช—เซเชฏเชพเชฎเชพเช‚ เชจเชฅเซ€. เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ id เชธเซเชคเซเชฐเซ‹เชค เช“เชณเช–เช•เชฐเซเชคเชพเช“ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชคเซ‡เชฅเซ€, เชฐเซ€เชธเซ€เชตเชฐ เชฌเชพเชœเซเช เชคเซ‡เชจเซ‡ เชธเซเชตเชคเชƒ-เชตเซƒเชฆเซเชงเชฟ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชตเชงเซเชฎเชพเช‚, เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฌเชšเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชœเช—เซเชฏเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ row_ver:

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

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

        }
    },
    if_not_exists = true
})

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

เชฆเชฐเซ‡เช• เชฒเซ‹เชก เช•เชฐเซ‡เชฒเซ€ เชœเช—เซเชฏเชพ เชฎเชพเชŸเซ‡ (เช•เซเชทเซ‡เชคเซเชฐ space_name) เช†เชชเชฃเซ‡ เช›เซ‡เชฒเซเชฒเซ€ เชฒเซ‹เชก เช•เชฐเซ‡เชฒเซ€ เช•เชฟเช‚เชฎเชค เช…เชนเซ€เช‚ เชธเชพเชšเชตเซ€เชถเซเช‚ row_ver (เช•เซเชทเซ‡เชคเซเชฐ value). เช•เซ‰เชฒเชฎ เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ space_name.

เชšเชพเชฒเซ‹ เชธเซเชชเซ‡เชธ เชกเซ‡เชŸเชพ เชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชซเช‚เช•เซเชถเชจ เชฌเชจเชพเชตเซ€เช goods HTTP เชฆเซเชตเชพเชฐเชพ. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชจเซ‡ เชเช• เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡ HTTP เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ‡. เชจเซ€เชšเซ‡เชจเซ€ เชฒเชพเช‡เชจ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‡ เชฒเซ‹เชก เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ HTTP เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‡ เช‡เชจเซเชธเซเชŸเชจเซเชŸ เช•เชฐเซ‡ เช›เซ‡:

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

เช…เชฎเชจเซ‡ json เชกเชฟเชธเชฟเชฐเชฟเชฏเชฒเชพเช‡เชเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ€ เชชเชฃ เชœเชฐเซ‚เชฐ เช›เซ‡:

local json = require('json')

เชกเซ‡เชŸเชพ เชฒเซ‹เชกเชฟเช‚เช— เชซเช‚เช•เซเชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡:

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

เชซเช‚เช•เซเชถเชจ url เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ HTTP เชตเชฟเชจเช‚เชคเซ€ เชšเชฒเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡ row_ver เชชเชฐเชฟเชฎเชพเชฃ เชคเชฐเซ€เช•เซ‡ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เชจเซเช‚ เชกเซ€เชธเซ€เชฐเชฟเชฏเชฒเชพเชˆเชเซเชก เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เชชเซเชฐเชพเชชเซเชค เชกเซ‡เชŸเชพ เชฌเชšเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เช•เชพเชฐเซเชฏ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

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

เช…เชตเช•เชพเชถเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฌเชšเชพเชตเชตเชพเชจเซเช‚ เชšเช•เซเชฐ goods เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เช† เชฎเชพเชŸเซ‡ เช•เชพเชฐเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ box.atomic) เชกเชฟเชธเซเช• เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ€ เชธเช‚เช–เซเชฏเชพ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡.

เช›เซ‡เชฒเซเชฒเซ‡, เชธเซเชฅเชพเชจเชฟเช• เชœเช—เซเชฏเชพ เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจ เช•เชพเชฐเซเชฏ goods เชธเซเชคเซเชฐเซ‹เชค เชธเชพเชฅเซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹:

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

    โ€”โ€” set your url here:
    local url = 'http://127.0.0.1:81/test/goods/list'

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

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

        save_goods(goods)

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

เชชเซเชฐเชฅเชฎ เช†เชชเชฃเซ‡ เช…เช—เชพเช‰ เชธเชพเชšเชตเซ‡เชฒ เชฎเซ‚เชฒเซเชฏ เชตเชพเช‚เชšเซ€เช เช›เซ€เช row_ver เชœเช—เซเชฏเชพ เชฎเชพเชŸเซ‡ goods. เชœเซ‹ เชคเซ‡ เช–เซ‚เชŸเซ‡ เช›เซ‡ (เชชเซเชฐเชฅเชฎ เชตเชฟเชจเชฟเชฎเชฏ เชธเชคเซเชฐ), เชคเซ‹ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชคเชฐเซ€เช•เซ‡ เชฒเชˆเช เช›เซ€เช row_ver เชถเซ‚เชจเซเชฏ เช†เช—เชณเชจเชพ เชšเช•เซเชฐเชฎเชพเช‚ เช…เชฎเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค url เชชเชฐ เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚เชฅเซ€ เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซเช‚ เชชเซƒเชทเซเช -เชฆเชฐ-เชชเซ‡เชœ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€เช เช›เซ€เช. เชฆเชฐเซ‡เช• เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชชเชฐ, เช…เชฎเซ‡ เชชเซเชฐเชพเชชเซเชค เชกเซ‡เชŸเชพเชจเซ‡ เชฏเซ‹เช—เซเชฏ เชธเซเชฅเชพเชจเชฟเช• เชœเช—เซเชฏเชพเชฎเชพเช‚ เชธเชพเชšเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช row_ver (เช…เชตเช•เชพเชถ เชฎเชพ row_ver เช…เชจเซ‡ เชšเชฒเชฎเชพเช‚ row_ver) - เชฎเซ‚เชฒเซเชฏ เชฒเซ‹ row_ver เชฒเซ‹เชก เช•เชฐเซ‡เชฒเชพ เชกเซ‡เชŸเชพเชจเซ€ เช›เซ‡เชฒเซเชฒเซ€ เชฒเชพเช‡เชจเชฎเชพเช‚เชฅเซ€.

เช†เช•เชธเซเชฎเชฟเช• เชฒเซ‚เชชเชฟเช‚เช— เชธเชพเชฎเซ‡ เชฐเช•เซเชทเชฃ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡ (เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชญเซ‚เชฒเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚), เชฒเซ‚เชช while เชฆเซเชตเชพเชฐเชพ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡ for:

for _ = 1, max_req do ...

เช•เชพเชฐเซเชฏ เชšเชฒเชพเชตเชตเชพเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ sync_goods เชœเช—เซเชฏเชพ goods เชฐเซ€เชธเซ€เชตเชฐเชฎเชพเช‚ เชคเชฎเชพเชฎ เชธเซเชชเซ‡เชธ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเชพ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชนเชถเซ‡ goods เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚.

เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, เชกเซ‡เชŸเชพ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซเช‚ เช† เชฐเซ€เชคเซ‡ เชชเซเชฐเชธเชพเชฐเชฃ เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€. เชœเซ‹ เช†เชตเซ€ เช•เซ‹เชˆ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชกเชฟเชฒเซ€เชถเชจ เชฎเชพเชฐเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเช—เซเชฏเชพเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ goods เชฌเซเชฒเชฟเชฏเชจ เช•เซเชทเซ‡เชคเซเชฐ is_deleted เช…เชจเซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ‡ เชญเซŒเชคเชฟเช• เชฐเซ€เชคเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡, เช…เชฎเซ‡ เชคเชพเชฐเซเช•เชฟเช• เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช - เช…เชฎเซ‡ เชซเซ€เชฒเซเชก เชฎเซ‚เชฒเซเชฏ เชธเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช is_deleted เช…เชฐเซเชฅเชฎเชพเช‚ true. เช•เซเชฏเชพเชฐเซ‡เช• เชฌเซเชฒเชฟเชฏเชจ เช•เซเชทเซ‡เชคเซเชฐเชจเซ‡ เชฌเชฆเชฒเซ‡ is_deleted เช•เซเชทเซ‡เชคเซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เช›เซ‡ deleted, เชœเซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเชพ เชคเชพเชฐเซเช•เชฟเช• เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชคเชพเชฐเซ€เช–-เชธเชฎเชฏ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชฒเซ‹เชœเชฟเช•เชฒ เชกเชฟเชฒเซ€เชŸ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชกเชฟเชฒเซ€เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชšเชฟเชนเซเชจเชฟเชค เชฅเชฏเซ‡เชฒ เชฐเซ‡เช•เซ‹เชฐเซเชก เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚เชฅเซ€ เช—เช‚เชคเชตเซเชฏ เชธเซเชฅเชพเชจ เชชเชฐ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ (เช‰เชชเชฐ เชšเชฐเซเชšเชพ เช•เชฐเซ‡เชฒ เชคเชฐเซเช• เชฎเซเชœเชฌ).

เช•เซเชฐเชฎ row_ver เช…เชจเซเชฏ เชœเช—เซเชฏเชพเช“เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡: เชฆเชฐเซ‡เช• เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸเซ‡เชก เชธเซเชชเซ‡เชธ เชฎเชพเชŸเซ‡ เช…เชฒเช— เช•เซเชฐเชฎ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เช…เชฎเซ‡ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒ DBMS เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชกเซ‡เชŸเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ€ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชค เชœเซ‹เชˆ.

เชคเชพเชฐเชฃเซ‹

  1. เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ DBMS เช เชนเชพเช‡-เชฒเซ‹เชก เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช†เช•เชฐเซเชทเช•, เช†เชถเชพเชธเซเชชเชฆ เช‰เชคเซเชชเชพเชฆเชจ เช›เซ‡.
  2. เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช•เชฐเชคเชพเช‚ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เช˜เชฃเชพ เชซเชพเชฏเชฆเชพ เช›เซ‡.
  3. เชฒเซ‡เช–เชฎเชพเช‚ เชšเชฐเซเชšเชพ เช•เชฐเชพเชฏเซ‡เชฒ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชชเชฆเซเชงเชคเชฟ เชคเชฎเชจเซ‡ เช›เซ‡เชฒเซเชฒเชพ เชตเชฟเชจเชฟเชฎเชฏ เชธเชคเซเชฐเชฅเซ€ เชฌเชฆเชฒเชพเชฏเซ‡เชฒเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เชกเซ‡เชŸเชพเชจเซ€ เชฎเชพเชคเซเชฐเชพเชจเซ‡ เช˜เชŸเชพเชกเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹