Tarantool เชฎเชพเช‚, เชคเชฎเซ‡ เชธเซเชชเชฐ-เชซเชพเชธเซเชŸ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœเซ‹เชกเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเซ‡ เช•เชฐเชตเซเช‚ เช•เซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เช›เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡

เชชเชพเช‚เชš เชตเชฐเซเชท เชชเชนเซ‡เชฒเชพเช‚ เชฎเซ‡เช‚ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹, เชชเชฐเช‚เชคเซ เชคเซ‡ เชชเช›เซ€ เชคเซ‡ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจ เชนเชคเซเช‚. เชชเชฐเช‚เชคเซ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชฎเซ‡เช‚ เชเช• เชตเซ‡เชฌเชฟเชจเชพเชฐเชจเซเช‚ เช†เชฏเซ‹เชœเชจ เช•เชฐเซเชฏเซเช‚ เชนเชคเซเช‚ เชœเซเชฏเชพเช‚ เชฎเซ‡เช‚ Hadoop เช…เชจเซ‡ MapReduce เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชนเชคเซ€. เชคเซเชฏเชพเช‚ เชคเซ‡เช“เช เชฎเชจเซ‡ เชเช• เชชเซเชฐเชถเซเชจ เชชเซ‚เช›เซเชฏเซ‹: "เชถเชพ เชฎเชพเชŸเซ‡ เช† เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจเชฅเซ€ เช•เชฐเชคเชพ?"

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

Tarantool เชฎเชพเช‚, เชคเชฎเซ‡ เชธเซเชชเชฐ-เชซเชพเชธเซเชŸ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœเซ‹เชกเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเซ‡ เช•เชฐเชตเซเช‚ เช•เซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เช›เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ เชถเซเช‚ เช›เซ‡

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

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

เชฎเซ‡เช‚ เชเช• เชฒเซ‡เช– เชตเชพเช‚เชšเซเชฏเซ‹ เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช›เซ‹เช•เชฐเชพเช“เช 300 เชฒเชพเช‡เชจเชจเซ€ เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ เชฌเชจเชพเชตเซ€ เช›เซ‡, เชœเซ‡ เชซเช•เซเชค เช›เชฒเช•เชพเช‡ เชฐเชนเซ€ เช›เซ‡ เช…เชจเซ‡ เชฆเซ‹เชกเซ€ เชฐเชนเซ€ เช›เซ‡ - เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก 20 เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซเช‚ เชจเซเชฏเซ‚เชจเชคเชฎ เชชเซเชฐเชฆเชฐเซเชถเชจ เช›เซ‡. เช…เชนเซ€เช‚ เชคเชฎเซ‡ เช–เชฐเซ‡เช–เชฐ เชซเซ‡เชฐเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช–เซ‚เชฌ เชฎเซ‹เชŸเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เชคเซ‡ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชจเชนเซ€เช‚ เชนเซ‹เชฏ, เชœเซ‡เชฎ เช•เซ‡ PostgreS เชฎเชพเช‚.

เชนเซเช‚ เช† เชฒเซ‡เช–เชฎเชพเช‚ เช† เชธเชฐเซเชตเชฐ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ, เชซเช•เซเชค เชธเชฐเชณ.

เชธเซเชฅเชพเชชเชจ

เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เชคเซเชฐเชฃ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจเซ‹ เชถเชฐเซ‚ เช•เชฐเซเชฏเชพ - เชเช• 20 GB เชนเชพเชฐเซเชก เชกเซเชฐเชพเชˆเชต, เช‰เชฌเซเชจเซเชŸเซ 18.04. 2 เชตเชฐเซเชšเซเชฏเซเช…เชฒ CPU เช…เชจเซ‡ 4 เชœเซ€เช—เซเชธ เชฎเซ‡เชฎเชฐเซ€.

เช…เชฎเซ‡ เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช - เชฌเซ‡เชถ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ‹ เช…เชฅเชตเชพ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เช‰เชฎเซ‡เชฐเซ‹ เช…เชจเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซ‚เชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹. เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ€ เชฒเชฟเช‚เช• - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช†เชฆเซ‡เชถเซ‹ เช›เซ‡ เชœเซ‡เชฎ เช•เซ‡:

tarantoolctl โ€” เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพ เชฆเชพเช–เชฒเชพเช“เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชฎเซเช–เซเชฏ เช†เชฆเซ‡เชถ.
/etc/tarantool - เช…เชนเซ€เช‚ เชธเชฎเช—เซเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช›เซ‡.
var/log/tarantool - เช…เชนเซ€เช‚ เชฒเซ‹เช— เช›เซ‡.
var/lib/tarantool โ€” เชกเซ‡เชŸเชพ เช…เชนเซ€เช‚ เช†เชตเซ‡เชฒเซ‹ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡เชจเซ‡ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

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

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

เช‡เชจเซเชธเซเชŸเชจเซเชธ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ

เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ tarantoolctl เช†เชฆเซ‡เชถ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, tarantoolctl เชšเซ‡เช• เช‰เชฆเชพเชนเชฐเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชจเซ‡ เชคเชชเชพเชธเชถเซ‡ เช…เชจเซ‡ เช•เชนเซ‡เชถเซ‡ - เชœเซ‹ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เชญเซ‚เชฒเซ‹ เชจ เชนเซ‹เชฏ เชคเซ‹ เชซเชพเช‡เชฒ เชฌเชฐเชพเชฌเชฐ เช›เซ‡.

เชคเชฎเซ‡ เชฆเชพเช–เชฒเชพเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ - tarantoolctl status example. เช เชœ เชฐเซ€เชคเซ‡ เชคเชฎเซ‡ เชธเซเชŸเชพเชฐเซเชŸ, เชธเซเชŸเซ‹เชช, เชฐเซ€เชธเซเชŸเชพเชฐเซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชเช•เชตเชพเชฐ เชฆเชพเช–เชฒเซ‹ เชšเชพเชฒเซ เชฅเชˆ เชœเชพเชฏ, เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชฌเซ‡ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

1. เชตเชนเซ€เชตเชŸเซ€ เช•เชจเซเชธเซ‹เชฒ

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

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

เช† เชชเชฆเซเชงเชคเชฟ เชตเชนเซ€เชตเชŸเซ€ เชฌเชพเชฌเชคเซ‹ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฌเซ€เชœเซ€ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ - เชฌเชพเชˆเชจเชฐเซ€ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ.

2. เชšเซ‹เช•เซเช•เชธ เชชเซ‹เชฐเซเชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

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

เช† เชœเซ‹เชกเชพเชฃ เชฎเชพเชŸเซ‡, เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐ เชธเชพเชฅเซ‡ tarantoolctl connect เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡. เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชธเชฐเซเชตเชฐเซเชธ เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เชเช•เซเชธเซ‡เชธ เช…เชงเชฟเช•เชพเชฐเซ‹ เช†เชชเซ€ เชถเช•เซ‹ เช›เซ‹.

เชกเซ‡เชŸเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช— เช…เชจเซ‡ เชฌเซ‹เช•เซเชธ เชฎเซ‹เชกเซเชฏเซเชฒ

เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชฐเซเชตเชฐ เชฌเช‚เชจเซ‡ เชนเซ‹เชตเชพเชฅเซ€, เชคเซ‡เชฎเชพเช‚ เชตเชฟเชตเชฟเชง เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เช›เซ‡. เช…เชฎเชจเซ‡ เชฌเซ‹เช•เซเชธ เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เชฐเชธ เช›เซ‡ - เชคเซ‡ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฌเซ‰เช•เซเชธเชฎเชพเช‚ เช•เช‚เชˆเช• เชฒเช–เซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชŸเซ‡เชฐเชจเซเชŸเซ‚เชฒ เชกเชฟเชธเซเช• เชชเชฐ เชกเซ‡เชŸเชพ เชฒเช–เซ‡ เช›เซ‡, เชคเซ‡เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เช…เชฅเชตเชพ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เช‚เชˆเช• เชฌเซ€เชœเซเช‚ เช•เชฐเซ‡ เช›เซ‡.

เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช—

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

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')
    box.schema.user.grant('guest', 'read,write,execute', 'universe')

    -- Keep things safe by default
    --  box.schema.user.create('example', { password = 'secret' })
    --  box.schema.user.grant('example', 'replication')
    --  box.schema.user.grant('example', 'read,write,execute', 'space', 'example')
end

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

เชชเช›เซ€ เช…เชฎเซ‡ เช…เชคเชฟเชฅเชฟ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เช…เชจเซเชฆเชพเชจ เช†เชชเซ€เช เช›เซ€เช, เชœเซ‡เชจเชพ เชนเซ‡เช เชณ เช…เชฎเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชฆเซเชตเชพเชฐเชพ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€เช เช›เซ€เช. เช…เชฎเซ‡ เชธเชฎเช—เซเชฐ เช˜เชŸเชจเชพเชฎเชพเช‚ เชตเชพเช‚เชšเชจ, เชฒเซ‡เช–เชจ เช…เชจเซ‡ เช…เชฎเชฒ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ€เช เช›เซ€เช.

เชชเชฐเช‚เชชเชฐเชพเช—เชค เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚, เช…เชนเซ€เช‚ เชฌเชงเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡. เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชœเช—เซเชฏเชพ เช›เซ‡ - เชเช• เชตเชฟเชธเซเชคเชพเชฐ เช•เซ‡ เชœเซ‡เชฎเชพเช‚ เช†เชชเชฃเซ‹ เชกเซ‡เชŸเชพ เช–เชพเชฒเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡. เชฆเชฐเซ‡เช• เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ‡ เชŸเซเชฏเซเชชเชฒ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡ MessagePack เชฎเชพเช‚ เชชเซ‡เช•เซ‡เชœ เชฅเชฏเซ‡เชฒ เช›เซ‡. เช† เช–เซ‚เชฌ เชœ เชธเชฐเชธ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช›เซ‡ - เชคเซ‡ เชฆเซเชตเชฟเชธเช‚เช—เซ€ เช›เซ‡ เช…เชจเซ‡ เช“เช›เซ€ เชœเช—เซเชฏเชพ เชฒเซ‡ เช›เซ‡ - 18 เชตเชฟเชฐเซเชฆเซเชง 27 เชฌเชพเช‡เชŸเซเชธ.

Tarantool เชฎเชพเช‚, เชคเชฎเซ‡ เชธเซเชชเชฐ-เชซเชพเชธเซเชŸ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœเซ‹เชกเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเซ‡ เช•เชฐเชตเซเช‚ เช•เซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เช›เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡

เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เชเช•เชฆเชฎ เช…เชจเซเช•เซ‚เชณ เช›เซ‡. เชฒเช—เชญเช— เชฆเชฐเซ‡เช• เชฒเชพเช‡เชจ, เชฆเชฐเซ‡เช• เชกเซ‡เชŸเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฎเชพเช‚ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฒเช— เช•เซ‰เชฒเชฎ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.

Box.space เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช†เชชเชฃเซ‡ เชฌเชงเซ€ เชธเซเชชเซ‡เชธ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช. เชšเซ‹เช•เซเช•เชธ เช‰เชฆเชพเชนเชฐเชฃ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, box.space เช‰เชฆเชพเชนเชฐเชฃ เชฒเช–เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‡เชณเชตเซ‹.

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

เชตเชฟเชจเชพเช‡เชฒ เชกเชฟเชธเซเช• เชชเชฐ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เช…เชฎเชจเซ‡ เชตเชงเซ เชชเชฐเชฟเชšเชฟเชค เช›เซ‡ - เชเชŸเชฒเซ‡ เช•เซ‡, เชคเชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฎเซ‡เชฎเชฐเซ€ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพ เชคเซ‡เชจเซ‡ เชกเชฟเชธเซเช•เชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชถเซ‡.

เช…เชคเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชฎเซ‡เชฎเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

unix/:/var/run/tarantool/example.control> box.space.example
---
- engine: memtx
  before_replace: 'function: 0x41eb02c8'
  on_replace: 'function: 0x41eb0568'
  ck_constraint: []
  field_count: 0
  temporary: false
  index:
    0: &0
      unique: true
      parts:
      - type: unsigned
        is_nullable: false
        fieldno: 1
      id: 0
      space_id: 512
      type: TREE
      name: primary
    primary: *0
  is_local: false
  enabled: true
  name: example
  id: 512
...

unix/:/var/run/tarantool/example.control>

เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ:

เช•เซ‹เชˆเชชเชฃ เชœเช—เซเชฏเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชฅเชฎเชฟเช• เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฌเชจเชพเชตเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เชจเชพ เชตเชฟเชจเชพ เช•เช‚เชˆเชชเชฃ เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เช•เซ‹เชˆเชชเชฃ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชœเซ‡เชฎ, เช…เชฎเซ‡ เชชเซเชฐเชฅเชฎ เชซเซ€เชฒเซเชก - เชฐเซ‡เช•เซ‹เชฐเซเชก เช†เชˆเชกเซ€ เชฌเชจเชพเชตเซ€เช เช›เซ€เช.

เชญเชพเช—เซ‹:

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

เชชเช›เซ€ เช†เชชเชฃเซ‡ insert เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชฆเชพเช–เชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

unix/:/var/run/tarantool/example.control> box.space.example:insert{1, 'test1', 'test2'}
---
- [1, 'test1', 'test2']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{2, 'test2', 'test3', 'test4'}
---
- [2, 'test2', 'test3', 'test4']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{3, 'test3'}
---
- [3, 'test3']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{4, 'test4'}
---
- [4, 'test4']
...

unix/:/var/run/tarantool/example.control>

เชชเซเชฐเชฅเชฎ เชซเซ€เชฒเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€ เชคเชฐเซ€เช•เซ‡ เชฅเชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡ เช…เชจเชจเซเชฏ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช. เช…เชฎเซ‡ เช•เซ‰เชฒเชฎเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชคเซเชฏเชพเช‚ เชœเซ‹เชˆเช เชคเซ‡เชŸเชฒเซ‹ เชกเซ‡เชŸเชพ เชฆเชพเช–เชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เชคเซ‡เช“ MessagePack เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช›เซ‡, เชœเซ‡ เชฎเซ‡เช‚ เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡.

เชกเซ‡เชŸเชพ เช†เช‰เชŸเชชเซเชŸ

เชชเช›เซ€ เช†เชชเชฃเซ‡ เชธเชฟเชฒเซ‡เช•เซเชŸ เช•เชฎเชพเชจเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

{1} เช•เซ€ เชธเชพเชฅเซ‡ Box.example.select เช‡เชšเซเช›เชฟเชค เชเชจเซเชŸเซเชฐเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชถเซ‡. เชœเซ‹ เช†เชชเชฃเซ‡ เชšเชพเชตเซ€ เช“เช›เซ€ เช•เชฐเซ€เชถเซเช‚, เชคเซ‹ เช†เชชเชฃเซ‡ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เชœเซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชก เช›เซ‡ เชคเซ‡ เชœเซ‹เชˆเชถเซเช‚. เชคเซ‡ เชฌเชงเชพ เช•เซ‰เชฒเชฎเชจเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชญเชฟเชจเซเชจ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชนเซ€เช‚, เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชฐเซ€เชคเซ‡, เช•เซ‰เชฒเชฎเชจเซ‹ เช•เซ‹เชˆ เช–เซเชฏเชพเชฒ เชจเชฅเซ€ - เชคเซเชฏเชพเช‚ เชซเซ€เชฒเซเชก เชจเช‚เชฌเชฐเซ‹ เช›เซ‡.

เชกเซ‡เชŸเชพเชจเซ€ เช•เซ‹เชˆเชชเชฃ เชฎเชพเชคเซเชฐเชพ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชจเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชชเชฃเซ‡ เชคเซ‡เชฎเชจเซ‡ เชฌเซ€เชœเชพ เช•เซเชทเซ‡เชคเซเชฐ เชฆเซเชตเชพเชฐเชพ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชเช• เชจเชตเซ€ เช—เซŒเชฃ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฌเชจเชพเชตเซ€เช เช›เซ€เช.


box.space.example:create_index( โ€˜secondaryโ€™, { type = โ€˜TREEโ€™, unique = false, parts = {{field = 2, type =โ€™stringโ€™} }}) 

เช…เชฎเซ‡ Create_index เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช.
เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช—เซŒเชฃ เช•เชนเซ€เช.

เช† เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช‡เชจเซเชกเซ‡เช•เซเชธ เชชเซเชฐเช•เชพเชฐ TREE เช›เซ‡. เชคเซ‡ เช…เชจเชจเซเชฏ เชจ เชนเซ‹เชˆ เชถเช•เซ‡, เชคเซ‡เชฅเซ€ เช…เชจเชจเซเชฏ = false เชฆเชพเช–เชฒ เช•เชฐเซ‹.

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

unix/:/var/run/tarantool/example.control> box.space.example:create_index('secondary', { type = 'TREE', unique = false, parts = {{field = 2, type = 'string'}}})
---
- unique: false
  parts:
  - type: string
    is_nullable: false
    fieldno: 2
  id: 1
  space_id: 512
  type: TREE
  name: secondary
...

unix/:/var/run/tarantool/example.control>

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เช•เชนเซ€ เชถเช•เซ€เช:

unix/:/var/run/tarantool/example.control> box.space.example.index.secondary:select('test1')
---
- - [1, 'test1', 'test2']
...

เชฌเชšเชค

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

เชคเซ‡ เชฆเชฐเซ‡เช• เชธเซ‡เช•เชจเซเชกเชจเซ‡ เชฌเชšเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชกเชฟเชธเซเช• เชชเชฐ เชธเชคเชค 20 เชœเซ€เชฌเซ€ เชกเชฎเซเชช เช•เชฐเชตเซเช‚ เช เชธเชพเชฐเซ‹ เชตเชฟเชšเชพเชฐ เชจเชฅเซ€.

เช† เชนเซ‡เชคเซ เชฎเชพเชŸเซ‡, เชฒเช–เชตเชพ-เช†เช—เชณ เชฒเซ‹เช—เชจเซ€ เชตเชฟเชญเชพเชตเชจเชพเชจเซ€ เชถเซ‹เชง เช…เชจเซ‡ เช…เชฎเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชคเซ‡เชจเซ€ เชฎเชฆเชฆเชฅเซ€, เชกเซ‡เชŸเชพเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชซเซ‡เชฐเชซเชพเชฐ เชฎเชพเชŸเซ‡, เชเช• เชจเชพเชจเซ€ เชฒเช–เชพเชฃ เช†เช—เชณเชจเซ€ เชฒเซ‹เช— เชซเชพเช‡เชฒเชฎเชพเช‚ เชเชจเซเชŸเซเชฐเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

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

Tarantool เชฎเชพเช‚, เชคเชฎเซ‡ เชธเซเชชเชฐ-เชซเชพเชธเซเชŸ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœเซ‹เชกเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเซ‡ เช•เชฐเชตเซเช‚ เช•เซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เช›เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡

เช†เชตเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช— เชนเชพเชฅ เชงเชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ box.cfg เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เชตเชฟเช•เชฒเซเชชเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ (example.lua เชซเชพเช‡เชฒเชฎเชพเช‚):

wal_mode = โ€œwriteโ€;

เชกเซ‡เชŸเชพ เชตเชชเชฐเชพเชถ

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

เช…เชฐเชœเซ€ เชฒเช–เซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชšเชพเชฒเซ‹ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เซ€เช

เชธเซเชชเซ‹เช‡เชฒเชฐ เชนเซ‡เช เชณ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเซเช“

box.cfg {
    listen = '0.0.0.0:3301';
    io_collect_interval = nil;
    readahead = 16320;
    memtx_memory = 128 * 1024 * 1024; -- 128Mb
    memtx_min_tuple_size = 16;
    memtx_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_memory = 128 * 1024 * 1024; -- 128Mb
    vinyl_cache = 128 * 1024 * 1024; -- 128Mb
    vinyl_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_write_threads = 2;
    wal_mode = "write";
    wal_max_size = 256 * 1024 * 1024;
    checkpoint_interval = 60 * 60; -- one hour
    checkpoint_count = 6;
    force_recovery = true;
    log_level = 5;
    log_nonblock = false;
    too_long_threshold = 0.5;
    read_only   = false
}

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')

    box.schema.user.create('example', { password = 'secret' })
    box.schema.user.grant('example', 'read,write,execute', 'space', 'example')

    box.schema.user.create('repl', { password = 'replication' })
    box.schema.user.grant('repl', 'replication')
end

-- for first run create a space and add set up grants
box.once('replica', bootstrap)

-- enabling console access
console = require('console')
console.listen('127.0.0.1:3302')

-- http config
local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

local router = http_router.new()

local function get_count()
 local cnt = box.space.example:len()
 return cnt
end

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

router:route({method = 'GET', path = '/token'}, function()
    local token = randomString(32)
    local last = box.space.example:len()
    box.space.example:insert{ last + 1, token }
    return {status = 200, body = json.encode({token = token})}
end)

prometheus = require('prometheus')

fiber = require('fiber')
tokens_count = prometheus.gauge("tarantool_tokens_count",
                              "API Tokens Count")

function monitor_tokens_count()
  while true do
    tokens_count:set(get_count())
    fiber.sleep(5)
  end
end
fiber.create(monitor_tokens_count)

router:route( { method = 'GET', path = '/metrics' }, prometheus.collect_http)

httpd:set_router(router)
httpd:start()

เช…เชฎเซ‡ เชฒเซเช†เชฎเชพเช‚ เช…เชฎเซเช• เช•เซ‹เชทเซเชŸเช• เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡ เช…เช•เซเชทเชฐเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชฐเซ‡เชจเซเชกเชฎ เชธเซเชŸเซเชฐเชฟเช‚เช— เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซเชฒเซ‡เชŸเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

เชคเซ‡ เชชเช›เซ€, เช…เชฎเซ‡ เชซเช‚เช•เซเชถเชจ - randomString เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เช•เซŒเช‚เชธเชฎเชพเช‚ เชฒเช‚เชฌเชพเชˆเชจเซ€ เช•เชฟเช‚เชฎเชค เช†เชชเซ€เช เช›เซ€เช.

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

เชชเช›เซ€ เช…เชฎเซ‡ HTTP เชฐเชพเช‰เชŸเชฐ เช…เชจเซ‡ HTTP เชธเชฐเซเชตเชฐเชจเซ‡ เช…เชฎเชพเชฐเชพ เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพ เชธเชฐเซเชตเชฐ, JSON เชธเชพเชฅเซ‡ เชœเซ‹เชกเซ€เช เช›เซ€เช, เชœเซ‡ เช…เชฎเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸเชจเซ‡ เชฎเซ‹เช•เชฒเซ€เชถเซเช‚.

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

เช† เชชเช›เซ€, เช…เชฎเซ‡ เชฌเชงเชพ HTTP เชธเชฐเซเชตเชฐ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชชเชฐ เชชเซ‹เชฐเซเชŸ 8080 เชถเชฐเซ‚ เช•เชฐเซ€เช เช›เซ€เช, เชœเซ‡ เชฌเชงเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เช…เชจเซ‡ เชญเซ‚เชฒเซ‹เชจเซ‡ เชฒเซ‰เช— เช•เชฐเชถเซ‡.

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

เช†เช—เชณ, เช…เชฎเซ‡ เชฐเซ‚เชŸ เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€เช เช›เซ€เช, เชœเซ‡เชฅเซ€ เชœเซ‹ GET เชชเชฆเซเชงเชคเชฟ เชธเชพเชฅเซ‡เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เชชเซ‹เชฐเซเชŸ 8080 /count เชชเชฐ เช†เชตเซ‡, เชคเซ‹ เช…เชฎเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‡ เชเช• เชฒเชพเช‡เชจเชฅเซ€ เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช. เชคเซ‡ เชธเซเชŸเซ‡เชŸเชธ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ - 200, 404, 403 เช…เชฅเชตเชพ เช•เซ‹เชˆเชชเชฃ เช…เชจเซเชฏ เชœเซ‡ เช…เชฎเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เชฐเซ€เช เช›เซ€เช.

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

เชฌเซ‹เชกเซ€เชฎเชพเช‚ เช†เชชเชฃเซ‡ json.encode เชชเชฐเชค เช•เชฐเซ€เช เช›เซ€เช, เชคเซ‡เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช•เชพเช‰เชจเซเชŸ เช…เชจเซ‡ เช—เซ‡เชŸเช•เชพเช‰เชจเซเชŸ เชธเซ‚เชšเชตเซ€เช เช›เซ€เช, เชœเซ‡เชจเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เช†เชชเชฃเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡.

เชฌเซ€เชœเซ€ เชชเชฆเซเชงเชคเชฟ

router:route({method = 'GET', path = '/token'}, function() 
    local token = randomString(32) 
    local last = box.space.example:len() 
    box.space.example:insert{ last + 1, token } 
    return {status = 200, body = json.encode({token = token})}
end)

เชฒเชพเชˆเชจเชฎเชพเช‚ เช•เซเชฏเชพเช‚ เชฐเชพเช‰เชŸเชฐ:เชฐเซ‚เชŸ({เชฎเซ‡เชฅเซ‹เชก = 'เช—เซ‡เชŸ', เชชเชพเชฅ = '/เชŸเซ‹เช•เชจ'}, เชซเช‚เช•เซเชถเชจ() เช…เชฎเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชŸเซ‹เช•เชจ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช.

เชฒเชพเช‡เชจ เชธเซเชฅเชพเชจเชฟเช• เชŸเซ‹เช•เชจ = เชฐเซ‡เชจเซเชกเชฎ เชธเซเชŸเซเชฐเชฟเช‚เช—(32) 32 เช…เช•เซเชทเชฐเซ‹เชจเซ€ เชฐเซ‡เชจเซเชกเชฎ เชธเซเชŸเซเชฐเชฟเช‚เช— เช›เซ‡.
เชฒเชพเช‡เชจเชฎเชพเช‚ เชธเซเชฅเชพเชจเชฟเช• เชฒเชพเชธเซเชŸ = box.space.example:len() เช…เชฎเซ‡ เช›เซ‡เชฒเซเชฒเซเช‚ เชคเชคเซเชต เชฌเชนเชพเชฐ เช•เชพเชขเซ€เช เช›เซ€เช.
เช…เชจเซ‡ เชฒเชพเช‡เชจเชฎเชพเช‚ box.space.example:insert{ last + 1, token } เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฒเช–เซ€เช เช›เซ€เช, เชเชŸเชฒเซ‡ เช•เซ‡, เช…เชฎเซ‡ เชซเช•เซเชค 1 เชฆเซเชตเชพเชฐเชพ ID เชตเชงเชพเชฐเซ€เช เช›เซ€เช. เช† เชซเช•เซเชค เช† เช…เชฃเช˜เชก เชฐเซ€เชคเซ‡ เชœ เชจเชนเซ€เช‚, เชชเชฃ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพเชฎเชพเช‚ เช† เชฎเชพเชŸเซ‡ เชธเชฟเช•เซเชตเชจเซเชธ เช›เซ‡.

เช…เชฎเซ‡ เชคเซเชฏเชพเช‚ เชŸเซ‹เช•เชจ เชฒเช–เซ€เช เช›เซ€เช.

เช†เชฎ, เช…เชฎเซ‡ เชเช• เชซเชพเช‡เชฒเชฎเชพเช‚ เช…เชฐเชœเซ€ เชฒเช–เซ€. เชคเชฎเซ‡ เชคเซเชฏเชพเช‚ เชกเซ‡เชŸเชพเชจเซ€ เชธเซ€เชงเซ€ เชนเซ‡เชฐเชซเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เชฌเซ‹เช•เซเชธ เชฎเซ‹เชกเซเชฏเซเชฒ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เช—เช‚เชฆเชพ เช•เชพเชฎ เช•เชฐเชถเซ‡.

เชคเซ‡ HTTP เชธเชพเช‚เชญเชณเซ‡ เช›เซ‡ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชฌเชงเซเช‚ เชเช• เชœ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เช›เซ‡ - เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเช‚เชจเซ‡. เชคเซ‡เชฅเซ€, เชฌเชงเซเช‚ เช–เซ‚เชฌ เชเชกเชชเชฅเซ€ เชฅเชพเชฏ เช›เซ‡.

เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ http เชฎเซ‹เชกเซเชฏเซเชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช:

เช…เชฎเซ‡ เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซ€เช เช›เซ€เช, เชธเซเชชเซ‹เช‡เชฒเชฐ เชนเซ‡เช เชณ เชœเซเช“

root@test2:/# tarantoolctl rocks install http
Installing http://rocks.tarantool.org/http-scm-1.src.rock
Missing dependencies for http scm-1:
   checks >= 3.0.1 (not installed)

http scm-1 depends on checks >= 3.0.1 (not installed)
Installing http://rocks.tarantool.org/checks-3.0.1-1.rockspec

Cloning into 'checks'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 28 (delta 1), reused 16 (delta 1), pack-reused 0
Receiving objects: 100% (28/28), 12.69 KiB | 12.69 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Note: checking out '580388773ef11085015b5a06fe52d61acf16b201'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

No existing manifest. Attempting to rebuild...
checks 3.0.1-1 is now installed in /.rocks (license: BSD)

-- The C compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found TARANTOOL: /usr/include (found version "2.4.2-80-g18f2bc82d")
-- Tarantool LUADIR is /.rocks/share/tarantool/rocks/http/scm-1/lua
-- Tarantool LIBDIR is /.rocks/share/tarantool/rocks/http/scm-1/lib
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    version


-- Build files have been written to: /tmp/luarocks_http-scm-1-V4P9SM/http/build.luarocks
Scanning dependencies of target httpd
[ 50%] Building C object http/CMakeFiles/httpd.dir/lib.c.o
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:32:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c: In function โ€˜tpl_termโ€™:
/usr/include/tarantool/lauxlib.h:144:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
    (*(B)->p++ = (char)(c)))
    ~~~~~~~~~~~^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:62:7: note: in expansion of macro โ€˜luaL_addcharโ€™
       luaL_addchar(b, '\');
       ^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:63:6: note: here
      default:
      ^~~~~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:39:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h: In function โ€˜tpe_parseโ€™:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:147:9: warning: this statement may fall through [-Wimplicit-fallthrough=]
    type = TPE_TEXT;
    ~~~~~^~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:149:3: note: here
   case TPE_LINECODE:
   ^~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:40:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h: In function โ€˜httpfast_parseโ€™:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:372:22: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 code = 0;
                 ~~~~~^~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:374:13: note: here
             case status:
             ^~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:393:23: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 state = message;
                 ~~~~~~^~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:395:13: note: here
             case message:
             ^~~~
[100%] Linking C shared library lib.so
[100%] Built target httpd
[100%] Built target httpd
Install the project...
-- Install configuration: "Debug"
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/VERSION.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lib/http/lib.so
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/tsgi_adapter.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/nginx_server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/fs.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/matching.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/middleware.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/request.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/response.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/tsgi.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/utils.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/mime_types.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/codes.lua
http scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

เช…เชฎเชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธเชจเซ€ เชชเชฃ เชœเชฐเซ‚เชฐ เช›เซ‡:

root@test2:/# tarantoolctl rocks install prometheus
Installing http://rocks.tarantool.org/prometheus-scm-1.rockspec

Cloning into 'prometheus'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 19 (delta 2), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), 10.73 KiB | 10.73 MiB/s, done.
Resolving deltas: 100% (2/2), done.
prometheus scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

เช…เชฎเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"e2tPq9l5Z3QZrewRf6uuoJUl3lJgSLOI"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"fR5aCA84gj9eZI3gJcV0LEDl9XZAG2Iu"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/count
HTTP/1.1 200 Ok
Content-length: 11
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"count":2}root@test2:/#

/count เช…เชฎเชจเซ‡ 200 เชธเซเชŸเซ‡เชŸเชธ เช†เชชเซ‡ เช›เซ‡.
/token เชŸเซ‹เช•เชจ เชฐเชœเซ‚ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช† เชŸเซ‹เช•เชจเชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฒเช–เซ‡ เช›เซ‡.

เชเชกเชช เชชเชฐเซ€เช•เซเชทเชฃ

เชšเชพเชฒเซ‹ 50 เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช• เชšเชฒเชพเชตเซ€เช. 000 เชธเซเชชเชฐเซเชงเชพเชคเซเชฎเช• เชตเชฟเชจเช‚เชคเซ€เช“ เชนเชถเซ‡.

root@test2:/# ab -c 500 -n 50000 http://127.0.0.1:8080/token
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Tarantool
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /token
Document Length:        44 bytes

Concurrency Level:      500
Time taken for tests:   14.578 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      7950000 bytes
HTML transferred:       2200000 bytes
Requests per second:    3429.87 [#/sec] (mean)
Time per request:       145.778 [ms] (mean)
Time per request:       0.292 [ms] (mean, across all concurrent requests)
Transfer rate:          532.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   10 103.2      0    3048
Processing:    12   69 685.1     15   13538
Waiting:       12   69 685.1     15   13538
Total:         12   78 768.2     15   14573

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     15
  75%     16
  80%     16
  90%     16
  95%     16
  98%     21
  99%     42
 100%  14573 (longest request)
root@test2:/#

เชŸเซ‹เช•เชจเซเชธ เชœเชพเชฐเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช…เชจเซ‡ เช…เชฎเซ‡ เชธเชคเชค เชกเซ‡เชŸเชพ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. 99% เชตเชฟเชจเช‚เชคเซ€เช“ 42 เชฎเชฟเชฒเชฟเชธเซ‡เช•เช‚เชกเชฎเชพเช‚ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชคเชฆเชจเซเชธเชพเชฐ, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ 3500 เช•เซ‹เชฐเซ‹ เช…เชจเซ‡ 2 เช—เซ€เช—เชพเชฌเชพเช‡เชŸเซเชธ เชฎเซ‡เชฎเชฐเซ€ เชธเชพเชฅเซ‡ เชจเชพเชจเชพ เชฎเชถเซ€เชจ เชชเชฐ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชฒเช—เชญเช— 4 เชตเชฟเชจเช‚เชคเซ€เช“ เช›เซ‡.

เชคเชฎเซ‡ เช•เซ‡เชŸเชฒเชพเช• 50000 เชŸเซ‹เช•เชจ เชชเชฃ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เช•เชฟเช‚เชฎเชค เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹.

เชคเชฎเซ‡ เชฎเชพเชคเซเชฐ http เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฃ เชคเชฎเชพเชฐเชพ เชกเซ‡เชŸเชพ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชคเชพ เชชเซƒเชทเซเช เชญเซ‚เชฎเชฟ เช•เชพเชฐเซเชฏเซ‹ เชชเชฃ เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹. เช‰เชชเชฐเชพเช‚เชค เชตเชฟเชตเชฟเชง เชŸเซเชฐเชฟเช—เชฐเซเชธ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เช…เชชเชกเซ‡เชŸเซเชธ เชชเชฐ เชซเช‚เช•เซเชถเชจเซเชธเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช•เช‚เชˆเช• เชคเชชเชพเชธเซ‹ - เชฏเซ‹เช—เซเชฏ เชตเชฟเชฐเซ‹เชงเชพเชญเชพเชธ.

เชคเชฎเซ‡ เชธเซ€เชงเชพ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐเชฎเชพเช‚ เชœ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เช•เซ‹เชˆ เชชเชฃ เชตเชธเซเชคเซ เชฆเซเชตเชพเชฐเชพ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชจเชฅเซ€, เช•เซ‹เชˆเชชเชฃ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชคเชฐเซเช• เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชฐเซเชตเชฐ เชฌเชพเชนเซเชฏ เชธเชฐเซเชตเชฐเชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชคเซ‡เชจเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชจเซเชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชŸเซ‡เชฐเซ‡เชจเซเชŸเซเชฒเชพ เช† เชœเชพเชคเซ‡ เช•เชฐเชถเซ‡, เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เช…เชฒเช— เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชฐเชนเซ‡เชถเซ‡ เชจเชนเซ€เช‚.

เช…เช‚เชคเชฎเชพ

เช† เชฎเซ‹เชŸเชพ เช•เชพเชฎเชจเซ‹ เชฎเชพเชคเซเชฐ เชชเชนเซ‡เชฒเซ‹ เชญเชพเช— เช›เซ‡. เชฌเซ€เชœเซ‹ เชเช• เช–เซ‚เชฌ เชœ เชŸเซ‚เช‚เช• เชธเชฎเชฏเชฎเชพเช‚ Mail.ru เช—เซเชฐเซเชช เชฌเซเชฒเซ‹เช— เชชเชฐ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชšเซ‹เช•เซเช•เชธเชชเชฃเซ‡ เช† เชธเชพเชฎเช—เซเชฐเซ€เชฎเชพเช‚ เชคเซ‡เชจเซ€ เชเช• เชฒเชฟเช‚เช• เช‰เชฎเซ‡เชฐเซ€เชถเซเช‚.

เชœเซ‹ เชคเชฎเชจเซ‡ เชเชตเซ€ เช‡เชตเซ‡เชจเซเชŸเซเชธเชฎเชพเช‚ เชนเชพเชœเชฐเซ€ เช†เชชเชตเชพเชฎเชพเช‚ เชฐเชธ เชนเซ‹เชฏ เช•เซ‡ เชœเซเชฏเชพเช‚ เช…เชฎเซ‡ เช† เชตเชธเซเชคเซเช“ เช‘เชจเชฒเชพเช‡เชจ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฎเชฏเชฎเชพเช‚ เชชเซเชฐเชถเซเชจเซ‹ เชชเซ‚เช›เซ€เช เช›เซ€เช, เชคเซ‹ เชŸเซเชฏเซเชจ เช‡เชจ เช•เชฐเซ‹ REBRAIN เชฆเซเชตเชพเชฐเชพ เชšเซ‡เชจเชฒ DevOps.

เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เช•เซเชฒเชพเช‰เชก เชชเชฐ เชœเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช…เชฅเชตเชพ เชคเชฎเชพเชฐเชพ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชตเชฟเชถเซ‡ เชชเซเชฐเชถเซเชจเซ‹ เชนเซ‹เชฏ, เชตเชฟเชจเช‚เชคเซ€ เช›เซ‹เชกเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชซเชค เชฒเชพเช—เซ‡.

PS เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฆเชฐ เชฎเชนเชฟเชจเซ‡ 2 เชฎเชซเชค เช‘เชกเชฟเชŸ เช›เซ‡, เช•เชฆเชพเชš เชคเชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เชนเชถเซ‡.

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

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