Tarantool рдорд╛, рддрдкрд╛рдИрдВ рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ рдпреЛ рдЧрд░реНрди рдХрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫ

рдкрд╛рдБрдЪ рд╡рд░реНрд╖рдЕрдШрд┐ рдореИрд▓реЗ рдЯрд╛рд░рдиреНрдЯреБрд▓рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдБ, рддрд░ рддреНрдпрд╕рд▓реЗ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдХрд╛рдо рдЧрд░реЗрдиред рддрд░ рднрд░реНрдЦрд░реИ рдореИрд▓реЗ рд╡реЗрдмрд┐рдирд╛рд░ рд░рд╛рдЦреЗрдВ рдЬрд╣рд╛рдБ рдореИрд▓реЗ Hadoop рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реЗрдВ, MapReduce рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫред рддреНрдпрд╣рд╛рдБ рдорд▓рд╛рдИ рдкреНрд░рд╢реНрди рд╕реЛрдзрд┐рдпреЛ - "рдпрд╕ рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдЯрд╛рд░рдиреНрдЯреБрд▓ рдХрд┐рди рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреЗ?"ред

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛рдХреЛ рдЦрд╛рддрд┐рд░, рдореИрд▓реЗ рдпрд╕рдорд╛ рдлрд░реНрдХрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ, рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН - рд░ рдпрд╕ рдкрдЯрдХ рдорд▓рд╛рдИ рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдордирдкрд░реНрдпреЛред рдЕрдм рдо Tarantool рдорд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╕рд░реА рд▓реЗрдЦреНрдиреЗ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБ, рдпрд╕рд▓рд╛рдИ рд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ рдХрд┐ рддреНрдпрд╣рд╛рдБ рд╕рдмреИ рдХреБрд░рд╛ рдХрддреНрддрд┐ рд╕рдЬрд┐рд▓реЛ рд░ рд░рд╛рдореНрд░реЛ рдЫред

Tarantool рдорд╛, рддрдкрд╛рдИрдВ рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ рдпреЛ рдЧрд░реНрди рдХрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫ

Tarantool рдХреЗ рд╣реЛ

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

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

рдореИрд▓реЗ рдПрдЙрдЯрд╛ рд▓реЗрдЦ рдкрдвреЗрдВ рдХрд┐ рдХреЗрдЯрд╛рд╣рд░реВрд▓реЗ рдХрд╕рд░реА 300-рд▓рд╛рдЗрди рд╕рдиреНрджреЗрд╢ рд▓рд╛рдЗрди рдмрдирд╛рдпреЛ, рдЬрд╕рд▓реЗ рдХреЗрд╡рд▓ рдЖрдБрд╕реБ рд░ рдкрд┐рдЯреНрдЫ - рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб 20 рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдиреНрдпреВрдирддрдо рдкреНрд░рджрд░реНрд╢рди рдЫред рдпрд╣рд╛рдБ рддрдкрд╛рдИрдВ рд╕рд╛рдБрдЪреНрдЪреИ рдШреБрдореНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдзреЗрд░реИ рдареВрд▓реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓реЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рдпреА рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреЗ рдЫреИрди, PostgreS рдорд╛ рдЬрд╕реНрддреИред

рд▓рдЧрднрдЧ рдпрд╕реНрддреЛ рд╕рд░реНрднрд░, рдорд╛рддреНрд░ рд╕рд░рд▓, рдо рдпрд╕ рд▓реЗрдЦрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреБред

рд╕реЗрдЯрд┐рдЩ

рдкрд░реАрдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рддреАрдирд╡рдЯрд╛ рдорд╛рдирдХ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕реБрд░реБ рдЧрд░реЗрдВ - рдПрдХ 20 рдЧрд┐рдЧрд╛рдмрд╛рдЗрдЯ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрдн, Ubuntu 18.04ред реи рднрд░реНрдЪреБрдЕрд▓ CPU рд░ рек рдЧрд┐рдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реАред

рд╣рд╛рдореА Tarantool рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдЫреМрдВ - рдПрдХ bash рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН рд╡рд╛ рднрдгреНрдбрд╛рд░ рдердкреНрдиреБрд╣реЛрд╕реН рд░ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН Tarantool рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд▓рд┐рдкрд┐рдорд╛ рд▓рд┐рдЩреНрдХ - (рдХрд░реНрд▓ -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash)ред рд╣рд╛рдореАрд╕рдБрдЧ рдЖрджреЗрд╢рд╣рд░реВ рдЫрдиреН:

tarantoolctl Tarantula рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдореБрдЦреНрдп рдЖрджреЗрд╢ рд╣реЛред
/etc/tarantool - рдпрд╣рд╛рдБ рд╕рдореНрдкреВрд░реНрдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЫред
var/log/tarantool - рдпрд╣рд╛рдБ рд▓рдЧрд╣рд░реВ рдЫрдиреНред
var/lib/tarantool - рдпрд╣рд╛рдБ рдбрд╛рдЯрд╛ рдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЫрдиреНред

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

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

рдЙрджрд╛рд╣рд░рдг рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

рд╣рд╛рдореАрд╕рдБрдЧ tarantoolctl рдЖрджреЗрд╢ рдЫ рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ Tarantula рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, tarantoolctl рдЪреЗрдХ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреЗрдЫ рд░ рдпрджрд┐ рдХреБрдиреИ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЫреИрдирдиреН рднрдиреЗ рдлрд╛рдЗрд▓ рдареАрдХ рдЫ рднрдиреНрджрдЫред

рддрдкрд╛рдИрдВрд▓реЗ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд╕реНрдерд┐рддрд┐ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - tarantoolctl рд╕реНрдерд┐рддрд┐ рдЙрджрд╛рд╣рд░рдгред рддреНрдпрд╕реИ рдЧрд░реА, рддрдкрд╛рдЗрдБ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░реЛрдХреНрдиреБрд╣реЛрд╕реН, рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдПрдХ рдкрдЯрдХ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ, рддреНрдпрд╣рд╛рдБ рдЬрдбрд╛рди рдЧрд░реНрди рджреБрдИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреНред

1. рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдХрдиреНрд╕реЛрд▓

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

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

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

2. рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреЛрд░реНрдЯрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рд╕реБрдиреНрди рдирд┐рд░реНрджреЗрд╢рди рдЫ рдЬрд╕рд▓реЗ рдмрд╛рд╣реНрдп рд╕рдВрдЪрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдкреЛрд░реНрдЯ рдЦреЛрд▓реНрдЫред рдпреЛ рдкреЛрд░реНрдЯ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХрд▓ рд╕рдВрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддреНрдпрд╣рд╛рдБ рд╕рдХреНрд╖рдо рдЫред

рдпрд╕ рдЬрдбрд╛рдирдХреЛ рд▓рд╛рдЧрд┐, рдкреЛрд░реНрдЯ рдирдореНрдмрд░рдорд╛ tarantoolctl рдЬрдбрд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрдкрд╛рдИрдВ рд░рд┐рдореЛрдЯ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╡рд┐рднрд┐рдиреНрди рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░рд╣рд░реВ рджрд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдбрд╛рдЯрд╛ рд░реЗрдХрд░реНрдбрд┐рдЩ рд░ рдмрдХреНрд╕ рдореЛрдбреНрдпреБрд▓

рдЯрд╛рд░рдиреНрдЯреВрд▓ рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╕рд░реНрднрд░ рднрдПрдХреЛ рд╣реБрдирд╛рд▓реЗ рдпрд╕рдорд╛ рд╡рд┐рднрд┐рдиреНрди рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рдЫрдиреНред рд╣рд╛рдореА рдмрдХреНрд╕ рдореЛрдбреНрдпреБрд▓рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдЫреМрдВ - рдпрд╕рд▓реЗ рдбреЗрдЯрд╛рд╕рдБрдЧ рдХрд╛рдо рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫред рдЬрдм рддрдкрд╛рдЗрдБ рдмрдХреНрд╕рдорд╛ рдХреЗрд╣рд┐ рд▓реЗрдЦреНрдиреБрд╣реБрдиреНрдЫ, Tarantool рд▓реЗ рдбрд┐рд╕реНрдХрдорд╛ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдЫ, рдореЗрдореЛрд░реАрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫ, рд╡рд╛ рдпрд╕рдХреЛ рд╕рд╛рде рдХреЗрд╣рд┐ рдЧрд░реНрджрдЫред

рд░реЗрдХрд░реНрдбрд┐рдВрдЧ

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдмрдХреНрд╕ рдореЛрдбреНрдпреБрд▓рдорд╛ рдЬрд╛рдиреНрдЫреМрдВ рд░ box.once рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫреМрдВред рдпрд╕рд▓реЗ рд╕рд░реНрднрд░ рдкреНрд░рд╛рд░рдореНрдн рд╣реБрдБрджрд╛ рд╣рд╛рдореНрд░реЛ рдХреЛрдб рдЪрд▓рд╛рдЙрди Tarantool рд▓рд╛рдИ рдмрд╛рдзреНрдп рдкрд╛рд░реНрдЫред рд╣рд╛рдореА рдПрдЙрдЯрд╛ рдард╛рдЙрдБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рдЬрд╣рд╛рдБ рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рд╣реБрдиреЗрдЫред

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 рдЙрджрд╛рд╣рд░рдг рд▓реЗрдЦреНрдЫреМрдВ рд░ рдпрд╕рдорд╛ рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫреМрдВред

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

рд╡рд┐рдирд╛рдЗрд▓рд▓реЗ рдбрд┐рд╕реНрдХрдорд╛ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдмрдвреА рдкрд░рд┐рдЪрд┐рдд рдлрд╛рд░рдордорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджрдЫ - рддреНрдпреЛ рд╣реЛ, рддрдкрд╛рдИрд▓реЗ рд╣рд╛рдореАрд╕рдБрдЧ рдореЗрдореЛрд░реА рднрдПрдХреЛ рднрдиреНрджрд╛ рдзреЗрд░реИ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рдЯрд╛рд░рд╛рдиреНрдЯреБрд▓рд╛рд▓реЗ рдпрд╕рд▓рд╛рдИ рдбрд┐рд╕реНрдХрдмрд╛рдЯ рдкрдвреНрдиреЗрдЫред

рдЕрдм рд╣рд╛рдореА рдореЗрдореЛрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред

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 рдврд╛рдБрдЪрд╛рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН, рдЬреБрди рдореИрд▓реЗ рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░реЗрдХреЛ рдЫреБред

рдбрд╛рдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ

рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдЪрдпрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдбрд╛рдЯрд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред

Box.example.select рдХреБрдЮреНрдЬреАрд╕рдБрдЧ {1} рд▓реЗ рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗрдЫред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдХреБрдЮреНрдЬреА рдЫреЛрдбреНрдпреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд╕рдБрдЧ рднрдПрдХрд╛ рд╕рдмреИ рд░реЗрдХрд░реНрдбрд╣рд░реВ рджреЗрдЦреНрдиреЗрдЫреМрдВред рддрд┐рдиреАрд╣рд░реВ рд╕рдмреИ рд╕реНрддрдореНрднрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдлрд░рдХ рдЫрдиреН, рддрд░ рдпрд╣рд╛рдБ, рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рддреНрдпрд╣рд╛рдБ рд╕реНрддрдореНрднрд╣рд░реВрдХреЛ рдХреБрдиреИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЫреИрди - рддреНрдпрд╣рд╛рдБ рдлрд┐рд▓реНрдб рдирдореНрдмрд░рд╣рд░реВ рдЫрдиреНред

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


box.space.example:create_index( тАШsecondaryтАЩ, { type = тАШTREEтАЩ, unique = false, parts = {{field = 2, type =тАЩstringтАЩ} }}) 

рд╣рд╛рдореА Create_index рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред
рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдорд╛рдзреНрдпрдорд┐рдХ рднрдиреНрдЫреМрдВред

рддреНрдпрд╕ рдкрдЫрд┐, рддрдкрд╛рдЗрдБ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ TREE рд╣реЛред рдпреЛ рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реБрди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдЕрджреНрд╡рд┐рддреАрдп = рдЧрд▓рдд рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВред

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

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']
...

рд╕рдВрд░рдХреНрд╖рдг

рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдпреМрдВ рд░ рдбреЗрдЯрд╛рд▓рд╛рдИ рдлреЗрд░рд┐ рдХрд▓ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВ рднрдиреЗ, рд╣рд╛рдореА рджреЗрдЦреНрдиреЗрдЫреМрдВ рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рддреНрдпрд╣рд╛рдБ рдЫреИрдирдиреН - рд╕рдмреИ рдЦрд╛рд▓реА рдЫред рдпреЛ рд╣реБрдиреНрдЫ рдХрд┐рдирднрдиреЗ Tarantool рд▓реЗ рдЪреЗрдХрдкреЛрдЗрдиреНрдЯрд╣рд░реВ рдмрдирд╛рдЙрдБрдЫ рд░ рдбрд┐рд╕реНрдХрдорд╛ рдбрд╛рдЯрд╛ рдмрдЪрдд рдЧрд░реНрдЫ, рддрд░ рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдЕрд░реНрдХреЛ рдмрдЪрдд рдЧрд░реНрдиреБ рдЕрдШрд┐ рдХрд╛рдо рдЧрд░реНрди рдЫреЛрдбреНрдпреМрдВ рднрдиреЗ, рд╣рд╛рдореА рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ рдЧреБрдорд╛рдЙрдиреЗрдЫреМрдВ - рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рдЕрдиреНрддрд┐рдо рдЪреЗрдХрдкреЛрдЗрдиреНрдЯрдмрд╛рдЯ рдкреБрди: рдкреНрд░рд╛рдкреНрддрд┐ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬреБрди рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рджреБрдИ рдШрдгреНрдЯрд╛ рдЕрдШрд┐ рдерд┐рдпреЛред

рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреЗрдиреНрдб рдмрдЪрдд рдЧрд░реНрдиреБ рдкрдирд┐ рдХрд╛рдо рдЧрд░реНрджреИрди - рдХрд┐рдирдХрд┐ 20 GB рд▓рд╛рдИ рдбрд┐рд╕реНрдХрдорд╛ рдирд┐рд░рдиреНрддрд░ рдбрдореНрдк рдЧрд░реНрдиреБ рдПрдХ рдпрд╕реНрддреЛ рд╡рд┐рдЪрд╛рд░ рд╣реЛред

рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, рд▓реЗрдЦрди-рдЕрдЧрд╛рдбрд┐ рд▓рдЧ рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдпреЛред рдпрд╕рдХреЛ рдорджреНрджрддрд▓реЗ, рдбреЗрдЯрд╛рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрдирдХреЛ рд▓рд╛рдЧрд┐, рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рд▓реЗрдЦрди-рдЕрдЧрд╛рдбрд┐ рд▓рдЧ рдлрд╛рдЗрд▓рдорд╛ рд░реЗрдХрд░реНрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫред

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

Tarantool рдорд╛, рддрдкрд╛рдИрдВ рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдПрдЙрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ рдпреЛ рдЧрд░реНрди рдХрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫ

рдпрд╕реНрддреЛ рд░реЗрдХрд░реНрдбрд┐рдЩ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ box.cfg рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (example.lua рдлрд╛рдЗрд▓рдорд╛):

wal_mode = тАЬwriteтАЭ;

рдбрд╛рдЯрд╛ рдЙрдкрдпреЛрдЧ

рд╣рд╛рдореАрд▓реЗ рдЕрд╣рд┐рд▓реЗ рдХреЗ рд▓реЗрдЦреЗрдХрд╛ рдЫреМрдВ, рддрдкрд╛рдИрд▓реЗ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди Tarantula рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдпрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд░реВрдкрдорд╛ рдзреЗрд░реИ рдЫрд┐рдЯреЛ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫред рд░ рдЕрдм рдХреЗрдХ рдорд╛ рдЪреЗрд░реА - рддрдкрд╛рдИрдВ рдпреЛ рд╕рдмреИ рд╕рдВрдЧ рдХреЗ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдПрдЙрдЯрд╛ рдЖрд╡реЗрджрди рд▓реЗрдЦреНрджреИ

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, Tarantula рд▓рд╛рдЧрд┐ рдпрд╕реНрддреЛ рдЖрд╡реЗрджрди рд▓реЗрдЦреМрдВ

рд╕реНрдкреЛрдЗрд▓рд░ рдЕрдиреНрддрд░реНрдЧрдд рдЖрд╡реЗрджрди рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН

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 рдлрд░реНрдХрд╛рдЙрдБрдЫреМрдВ, рд╣рд╛рдореА рдпрд╕рдорд╛ рдЧрдгрдирд╛ рд░ getcount рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВ, рдЬрд╕рд▓рд╛рдИ рднрдирд┐рдиреНрдЫ рд░ рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд░реЗрдХрд░реНрдбрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрд╛рдЙрдБрджрдЫред

рджреЛрд╕реНрд░реЛ рддрд░рд┐рдХрд╛

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)

рдЬрд╣рд╛рдБ рд▓рд╛рдЗрди рдорд╛ рд░рд╛рдЙрдЯрд░: рдорд╛рд░реНрдЧ({рд╡рд┐рдзрд┐ = 'GET', рдкрде = '/рдЯреЛрдХрди'}, рдкреНрд░рдХрд╛рд░реНрдп() рд╣рд╛рдореА рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫреМрдВ рд░ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдЧрд░реНрдЫреМрдВред

рд▓рд╛рдЗрди рд╕реНрдерд╛рдиреАрдп рдЯреЛрдХрди = randomString(32) 32 рд╡рд░реНрдгрд╣рд░реВрдХреЛ рдЕрдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдЩ рд╣реЛред
рдХреНрд░рдордорд╛ рд╕реНрдерд╛рдиреАрдп рдЕрдиреНрддрд┐рдо = box.space.example:len() рд╣рд╛рдореА рдЕрдиреНрддрд┐рдо рддрддреНрд╡ рдмрд╛рд╣рд┐рд░ рдирд┐рдХрд╛рд▓реНрдЫреМрдВред
рд░ рд▓рд╛рдЗрди рдорд╛ box.space.example: insert{ last + 1, token } рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдЫреМрдВ, рдЕрд░реНрдерд╛рддреН, рд╣рд╛рдореА рдЖрдИрдбреАрд▓рд╛рдИ 1 рд▓реЗ рдмрдврд╛рдЙрдБрдЫреМрдВред рдпреЛ рдпрд╕реНрддреЛ рдЕрдирд╛рдбрд╝реА рддрд░реАрдХрд╛рд▓реЗ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЯрд╛рд░рд╛рдиреНрдЯреБрд▓рд╛рд╕рдБрдЧ рдпрд╕ рдХреЗрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдХреНрд░рдорд╣рд░реВ рдЫрдиреНред

рд╣рд╛рдореА рддреНрдпрд╣рд╛рдБ рдЯреЛрдХрди рд▓реЗрдЦреНрдЫреМрдВред

рдпрд╕рд░реА, рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдлрд╛рдЗрд▓рдорд╛ рдЖрд╡реЗрджрди рд▓реЗрдЦреНрдпреМрдВред рддрдкрд╛рдИрдВрд▓реЗ рддреБрд░реБрдиреНрддреИ рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рдмрдХреНрд╕ рдореЛрдбреНрдпреБрд▓рд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдлреЛрд╣реЛрд░ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫред

рдпрд╕рд▓реЗ 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:/#

/ рдЧрдгрдирд╛рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ 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

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