เชชเชพเชเช เชตเชฐเซเชท เชชเชนเซเชฒเชพเช เชฎเซเช เชเซเชฐเซเชจเซเชเซเชฒ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชฏเซ, เชชเชฐเชเชคเซ เชคเซ เชชเชเซ เชคเซ เชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชพเชฎ เชเชฐเชคเซเช เชจ เชนเชคเซเช. เชชเชฐเชเชคเซ เชคเชพเชเซเชคเชฐเชฎเชพเช เชฎเซเช เชเช เชตเซเชฌเชฟเชจเชพเชฐเชจเซเช เชเชฏเซเชเชจ เชเชฐเซเชฏเซเช เชนเชคเซเช เชเซเชฏเชพเช เชฎเซเช Hadoop เช เชจเซ MapReduce เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซ เชนเชคเซ. เชคเซเชฏเชพเช เชคเซเชเช เชฎเชจเซ เชเช เชชเซเชฐเชถเซเชจ เชชเซเชเซเชฏเซ: "เชถเชพ เชฎเชพเชเซ เช เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชเซเชฐเซเชจเซเชเซเชฒเชจเซ เชเชชเชฏเซเช เชจเชฅเซ เชเชฐเชคเชพ?"
เชเชฟเชเซเชเชพเชธเชพเชฅเซ, เชฎเซเช เชคเซเชจเชพ เชชเชฐ เชชเชพเชเชพ เชซเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซเชฏเซเช - เช เชจเซ เช เชตเชเชคเซ เชฎเชจเซ เชเชฐเซเชเชฐ เชชเซเชฐเซเชเซเชเซเช เชเชฎเซเชฏเซ. เชนเชตเซ เชนเซเช เชคเชฎเชจเซ เชฌเชคเชพเชตเซเชถ เชเซ เชเซเชฐเซเชจเซเชเซเชฒเชฎเชพเช เชเช เชธเชฐเชณ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเซ, เชคเซเชจเซ เชฒเซเชก เชเชฐเชตเซ เช เชจเซ เชคเซเชจเซเช เชชเซเชฐเชฆเชฐเซเชถเชจ เชคเชชเชพเชธเชตเซเช, เช เชจเซ เชคเชฎเซ เชเซเชถเซ เชเซ เชฌเชงเซเช เชเซเชเชฒเซเช เชธเชฐเชณ เช เชจเซ เชธเชฐเชธ เชเซ.
เชเซเชฐเชจเซเชเซเชฒ เชถเซเช เชเซ
เชเซเชฐเชจเซเชเซเชฒ เชชเซเชคเชพเชจเซ เชเชพเชคเชจเซ เช เชคเชฟ-เชซเชพเชธเซเช เชกเซเชเชพเชฌเซเช เชคเชฐเซเชเซ เชธเซเชฅเชพเชจ เชเชชเซ เชเซ. เชคเชฎเชจเซ เชเซเชเชคเซ เชเซเชเชชเชฃ เชกเซเชเชพ เชคเชฎเซ เชคเซเชฏเชพเช เชฎเซเชเซ เชถเชเซ เชเซ. เชเชชเชฐเชพเชเชค, เชคเซเชฎเชจเซ เชจเชเชฒ เชเชฐเซ, เชถเชพเชฐเซเชก - เชเชเชฒเซ เชเซ เชเชฃเชพ เชฌเชงเชพ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชตเชฟเชถเชพเชณ เชฎเชพเชคเซเชฐเชพเชฎเชพเช เชกเซเชเชพ เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซ เช เชจเซ เชคเซเชฎเชพเชเชฅเซ เชชเชฐเชฟเชฃเชพเชฎเซเชจเซ เชเซเชกเซ - เชฆเซเชท-เชธเชนเชฟเชทเซเชฃเซ เชฎเชพเชธเซเชเชฐ-เชฎเชพเชธเซเชเชฐ เชเซเชกเชพเชฃเซ เชฌเชจเชพเชตเซ.
เชฌเซเชเซเช, เช เชเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชธเชฐเซเชตเชฐ เชเซ. เชคเชฎเซ เชคเซเชจเชพ เชชเชฐ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชฒเชเซ เชถเชเซ เชเซ, เชกเซเชเชพ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชถเชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซเชเซเชเชธ เชจเชฟเชฏเชฎเซ เช เชจเซเชธเชพเชฐ เชชเซเชทเซเช เชญเซเชฎเชฟเชฎเชพเช เชเซเชจเชพ เชฐเซเชเซเชฐเซเชกเซเชธ เชเชพเชขเซ เชจเชพเชเซ. เชคเชฎเซ เชเซเชฐเซเชจเซเชเซเชฒเชพเชฎเชพเช เชธเซเชงเชพ เช Http เชธเชฐเซเชตเชฐ เชฒเชเซ เชถเชเซ เชเซ เชเซ เชกเซเชเชพ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชถเซ: เชคเซเชฎเชจเซ เชเชฅเซเชฅเซ เชเชชเซ, เชคเซเชฏเชพเช เชจเชตเซ เชกเซเชเชพ เชฒเชเซ เช เชจเซ เชคเซ เชฌเชงเซเช เชฎเชพเชธเซเชเชฐเชจเซ เชเชเซเช เชเชฐเซ.
เชฎเซเช เชเช เชฒเซเช เชตเชพเชเชเซเชฏเซ เชเซ เชเซเชตเซ เชฐเซเชคเซ เชเซเชเชฐเชพเชเช 300 เชฒเชพเชเชจเชจเซ เชธเชเชฆเซเชถ เชเชคเชพเชฐ เชฌเชจเชพเชตเซ เชเซ, เชเซ เชซเชเซเชค เชเชฒเชเชพเช เชฐเชนเซ เชเซ เช เชจเซ เชฆเซเชกเซ เชฐเชนเซ เชเซ - เชคเซเชฎเชจเซ เชชเชพเชธเซ เชชเซเชฐเชคเชฟ เชธเซเชเชจเซเชก 20 เชธเชเชฆเซเชถเชพเชเชจเซเช เชจเซเชฏเซเชจเชคเชฎ เชชเซเชฐเชฆเชฐเซเชถเชจ เชเซ. เช เชนเซเช เชคเชฎเซ เชเชฐเซเชเชฐ เชซเซเชฐเชตเซ เชถเชเซ เชเซ เช เชจเซ เชเซเชฌ เชฎเซเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเชเซ เชถเชเซ เชเซ, เช เชจเซ เชคเซ เชธเซเชเซเชฐเซเช เชจเชนเซเช เชนเซเชฏ, เชเซเชฎ เชเซ PostgreS เชฎเชพเช.
เชนเซเช เช เชฒเซเชเชฎเชพเช เช เชธเชฐเซเชตเชฐ เชเซเชตเซเช เชเชเชเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถ, เชซเชเซเชค เชธเชฐเชณ.
เชธเซเชฅเชพเชชเชจ
เชชเชฐเซเชเซเชทเชฃ เชฎเชพเชเซ, เชฎเซเช เชคเซเชฐเชฃ เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชถเชฐเซ เชเชฐเซเชฏเชพ - เชเช 20 GB เชนเชพเชฐเซเชก เชกเซเชฐเชพเชเชต, เชเชฌเซเชจเซเชเซ 18.04. 2 เชตเชฐเซเชเซเชฏเซเช เชฒ CPU เช เชจเซ 4 เชเซเชเซเชธ เชฎเซเชฎเชฐเซ.
เช
เชฎเซ เชเซเชฐเชจเซเชเซเชฒ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเช เชเซเช - เชฌเซเชถ เชธเซเชเซเชฐเชฟเชชเซเช เชเชฒเชพเชตเซ เช
เชฅเชตเชพ เชฐเซเชชเซเชเซเชเชฐเซ เชเชฎเซเชฐเซ เช
เชจเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเซเชฐเซเชจเซเชเซเชฒ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ. เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชฒเชฟเชเช - (curl -L
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 เชฌเชพเชเชเซเชธ.
เชคเซเชจเซ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเซเช เชเชเชฆเชฎ เช
เชจเซเชเซเชณ เชเซ. เชฒเชเชญเช เชฆเชฐเซเช เชฒเชพเชเชจ, เชฆเชฐเซเช เชกเซเชเชพ เชฐเซเชเซเชฐเซเชกเชฎเชพเช เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เช
เชฒเช เชเซเชฒเชฎ เชนเซเช เชถเชเซ เชเซ.
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. เชเซเชฏเชพเชฐเซ เชคเซ เชญเชฐเชพเช เชเชพเชฏ เชเซ, เชคเซเชฏเชพเชฐเซ เชฐเซเชเซเชฐเซเชกเชฟเชเช เชฌเซเชเซ เชซเชพเชเชฒ เชชเชฐ เชเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ เชเซ. เช เชจเซ เชชเซเชจเชเชชเซเชฐเชพเชฐเชเชญ เชเชฐเซเชฏเชพ เชชเชเซ, เชเซเชฐเชจเซเชเซเชฒเชจเซ เชเซเชฒเซเชฒเซ เชเซเชเชชเซเชเชจเซเชเชฅเซ เชชเซเชจเชเชธเซเชฅเชพเชชเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชชเชเซ เชคเซ เชฌเชเชง เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชคเซ เชชเชเซเชจเชพ เชคเชฎเชพเชฎ เชตเซเชฏเชตเชนเชพเชฐเซ เชชเชฐ เชซเซเชฐเชตเชพเชฏ เชเซ.
เชเชตเชพ เชฐเซเชเซเชฐเซเชกเชฟเชเช เชนเชพเชฅ เชงเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ 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 เชเซเชฐเซเชช เชฌเซเชฒเซเช เชชเชฐ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เช เชจเซ เช เชฎเซ เชเซเชเซเชเชธเชชเชฃเซ เช เชธเชพเชฎเชเซเชฐเซเชฎเชพเช เชคเซเชจเซ เชเช เชฒเชฟเชเช เชเชฎเซเชฐเซเชถเซเช.
เชเซ เชคเชฎเชจเซ เชเชตเซ เชเชตเซเชจเซเชเซเชธเชฎเชพเช เชนเชพเชเชฐเซ เชเชชเชตเชพเชฎเชพเช เชฐเชธ เชนเซเชฏ เชเซ เชเซเชฏเชพเช เช
เชฎเซ เช เชตเชธเซเชคเซเช เชเชจเชฒเชพเชเชจ เชฌเชจเชพเชตเซเช เชเซเช เช
เชจเซ เชตเชพเชธเซเชคเชตเชฟเช เชธเชฎเชฏเชฎเชพเช เชชเซเชฐเชถเซเชจเซ เชชเซเชเซเช เชเซเช, เชคเซ เชเซเชฏเซเชจ เชเชจ เชเชฐเซ
เชเซ เชคเชฎเชพเชฐเซ เชเซเชฒเชพเชเชก เชชเชฐ เชเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ เช
เชฅเชตเชพ เชคเชฎเชพเชฐเชพ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชตเชฟเชถเซ เชชเซเชฐเชถเซเชจเซ เชนเซเชฏ,
PS เช
เชฎเชพเชฐเซ เชชเชพเชธเซ เชฆเชฐ เชฎเชนเชฟเชจเซ 2 เชฎเชซเชค เชเชกเชฟเช เชเซ, เชเชฆเชพเช เชคเชฎเชพเชฐเซ เชชเซเชฐเซเชเซเชเซเช เชคเซเชฎเชพเชเชฅเซ เชเช เชนเชถเซ.
เชธเซเชฐเซเชธ: www.habr.com