рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ, рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ

рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рд╡реЗрдмрд┐рдирд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ Hadoop рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА рдХрд┐ MapReduce рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдореБрдЭрд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ - "рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЯрд╛рд░рдирдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?"ред

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

рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ, рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ

рдЯрд╛рд░рдирдЯреВрд▓ рдХреНрдпрд╛ рд╣реИ

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

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

рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рдкрдврд╝рд╛ рдХрд┐ рдХреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ 300-рд▓рд╛рдЗрди рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдмрдирд╛рдИ, рдЬреЛ рд╕рд┐рд░реНрдл рдЖрдБрд╕реВ рдФрд░ рдереНрд░реИрд╢ рдХрд░рддреА рд╣реИ - рдЙрдирдХреЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 20 рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рдкреНрд░рджрд░реНрд╢рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдШреВрдо рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдиреНрд╣реЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреА рддрд░рд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд▓рдЧрднрдЧ рдРрд╕реЗ рд╕рд░реНрд╡рд░, рдХреЗрд╡рд▓ рд╕рд░рд▓, рдореИрдВ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рд╕реНрдерд╛рдкрдирд╛

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреАрди рдорд╛рдирдХ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЗрдВ рд╢реБрд░реВ рдХреАрдВ - рдПрдХ 20 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡, рдЙрдмрдВрдЯреВ 18.04ред 2 рд╡рд░реНрдЪреБрдЕрд▓ рд╕реАрдкреАрдпреВ рдФрд░ 4 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реАред

рд╣рдо рдЯрд╛рд░рдирдЯреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЯреИрд░реЗрдВрдЯреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ - (рдХрд░реНрд▓ -L https://tarantool.io/installer.sh | рд╡реАрдИрдЖрд░ = 2.4 рд╕реБрдбреЛ-рдИ рдмреИрд╢)ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдорд╛рдВрдб рд╣реИрдВ рдЬреИрд╕реЗ:

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

рдЗрдВрд╕реНрдЯреЗрдВрд╕-рдЙрдкрд▓рдмреНрдз рдФрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕-рд╕рдХреНрд╖рдо рдлрд╝реЛрд▓реНрдбрд░ рд╣реИрдВ - рдЗрд╕рдореЗрдВ рд╡рд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓реБрдЖ рдХреЛрдб рдХреЗ рд╕рд╛рде, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреЛрд░реНрдЯ рдкрд░ рд╕реБрдирддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдореЗрдореЛрд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рд╡рд┐рдиреАрд▓ рдЗрдВрдЬрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╕рд░реНрд╡рд░, рд╢рд╛рд░реНрдбрд┐рдВрдЧ, рдХрддрд╛рд░реЗрдВ, рдЕрдкреНрд░рдЪрд▓рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

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

рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдмрдВрдзрди

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ tarantoolctl рдХрдорд╛рдВрдб рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЯрд╛рд░реЗрдВрдЯрдпреБрд▓рд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, tarantoolctl check example рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдлрд╝рд╛рдЗрд▓ рдареАрдХ рд╣реИред

рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - tarantoolctl рд╕реНрдерд┐рддрд┐ рдЙрджрд╛рд╣рд░рдгред рдЗрд╕реА рддрд░рд╣ рдЖрдк рд╕реНрдЯрд╛рд░реНрдЯ, рд╕реНрдЯреЙрдк, рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдЪрд▓ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реЛрддреЗ рд╣реИрдВред

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

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЯрд╛рд░рдирдЯреВрд▓ рдПрдХ рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдЯрд╛рд░реЗрдВрдЯрдпреБрд▓рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рджрд╛ ASCII рдкрд╛рда рднреЗрдЬрддрд╛ рд╣реИред рдХрдВрд╕реЛрд▓ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реЛрддрд╛ рд╣реИ, рдХреЛрдИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЯрд╛рд░реЗрдВрдЯрдпреБрд▓рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдкреЛрд░реНрдЯ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

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

2. рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рд╕реБрдирдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЬреЛ рдмрд╛рд╣рд░реА рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдЦреЛрд▓рддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред

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

рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдмреЙрдХреНрд╕ рдореЙрдбреНрдпреВрд▓

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

рд░рд┐рдХреЙрд░реНрдб

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдмреЙрдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмреЙрдХреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рдиред рдЬрдм рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░реЗрдЧрд╛ред рд╣рдо рдПрдХ рдЬрдЧрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

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

рдлрд┐рд░ рд╣рдо рдЕрддрд┐рдерд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдиреБрджрд╛рди рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рд╣рдо рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдкреВрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрдврд╝рдиреЗ, рд▓рд┐рдЦрдиреЗ рдФрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдерд╛рди рд╣реИ - рдПрдХ рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рдмрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдЯрдкрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдВрджреЗрд╢рдкреИрдХ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИ - рдпрд╣ рдмрд╛рдЗрдирд░реА рд╣реИ рдФрд░ рдХрдо рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ - 18 рдмрд╛рдЗрдЯ рдмрдирд╛рдо 27ред

рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ, рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ

рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓рдЧрднрдЧ рд╣рд░ рдкрдВрдХреНрддрд┐, рд╣рд░ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХреЙрд▓рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо Box.space рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд╕реНрдкреЗрд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо box.space example рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

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

рд╡рд┐рдиреАрд▓ рдбрд┐рд╕реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдЖрдк рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЗрдореЛрд░реА рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЯрд╛рд░реЗрдВрдЯрдпреБрд▓рд╛ рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝реЗрдЧрд╛ред

рдЕрдм рд╣рдо рдореЗрдореЛрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред

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 рдХреНрд╡рд┐рдВрдЯрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред

рдлрд┐рд░ рд╣рдо рдЗрдиреНрд╕рд░реНрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

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 рд╣реИред рдпрд╣ рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрджреНрд╡рд┐рддреАрдп = рдЕрд╕рддреНрдп рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред

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

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 рдПрдордмреАред рдЬрдм рдпрд╣ рднрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рджреВрд╕рд░реА рдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдиреЗ рд▓рдЧрддреА рд╣реИред рдФрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЯрд╛рд░рдирдЯреВрд▓ рдЕрдВрддрд┐рдо рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдХреЗ рд╕рднреА рд▓реЗрди-рджреЗрди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЯрд╛рд░рдирдЯреВрд▓ рдореЗрдВ, рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░-рдлрд╛рд╕реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ

рдРрд╕реА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 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

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди - рд░реИрдВрдбрдорд╕реНрдЯреНрд░рд┐рдВрдЧ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рдВрдмрд╛рдИ рдорд╛рди рджреЗрддреЗ рд╣реИрдВред

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 / рдЧрд┐рдирддреА рдкрд░ рдЖрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдерд┐рддрд┐ рджреЗрддрд╛ рд╣реИ - 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 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
рдЗрди - рд▓рд╛рдЗрди рд╕реНрдерд╛рдиреАрдп рдЕрдВрддрд┐рдо = рдмреЙрдХреНрд╕.рд╕реНрдкреЗрд╕.рдЙрджрд╛рд╣рд░рдг: рд▓реЗрди () рд╣рдо рдЕрдВрддрд┐рдо рддрддреНрд╡ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
рдФрд░ рд▓рд╛рдЗрди рдореЗрдВ рдмреЙрдХреНрд╕.рд╕реНрдкреЗрд╕.рдЙрджрд╛рд╣рд░рдг:рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ {рдЕрдВрддрд┐рдо + 1, рдЯреЛрдХрди } рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рд╣рдо рдХреЗрд╡рд▓ рдЖрдИрдбреА рдХреЛ 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 рджреЗрддреА рд╣реИред
/ рдЯреЛрдХрди рдПрдХ рдЯреЛрдХрди рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЯреЛрдХрди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдЧрддрд┐

рдЪрд▓рд┐рдП 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 Group рдмреНрд▓реЙрдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдк рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдо рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рдСрдирд▓рд╛рдЗрди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗрдВ рд░реЗрдмреНрд░реЗрди рдЪреИрдирд▓ рджреНрд╡рд╛рд░рд╛ DevOps.

рдпрджрд┐ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдПрдХ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ.

рдкреАрдПрд╕ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдорд╛рд╣ 2 рдореБрдлреНрдд рдСрдбрд┐рдЯ рд╣реИрдВ, рд╢рд╛рдпрдж рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧреАред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ