Knex: AWS рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде Knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реВрдБ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЬрдире░ 2017  ┬╖  34рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: knex/knex

рдореИрдВ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рд▓реИрдВрдмрдбрд╛ рдлрдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдХрдИ рд╣рдЬрд╛рд░ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдбреАрдмреА рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрддрд╛ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдпрд╣рд╛рдВ рдиреЛрдб / рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдореБрджреНрджрд╛ рд╣реИ : рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдореБрдЭреЗ рдкреВрд▓ рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдореМрдЬреВрджрд╛ рдкреВрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ AWS (рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ) рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ рдореЗрдордиреЗ рдХреЗ рдХрдВрдЯреЗрдирд░ред

рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдЬреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдордЬрд╝рдмреВрддреА рд╕реЗ рдореЗрд░реЗ рдбреАрдмреА рд╕реЗ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рдпрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореБрдЭреЗ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ (рдЬреИрд╕реЗ while(!availableConnections) { tryToGetConnection() } ред рдХреНрдпрд╛ рдореБрдЭреЗ node-pool рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореИрдВ Knex рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

insightful question

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╡рд╛рдХреНрдп рдХреЗ рдмреАрдЪ рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛, рдореЗрд░реЗ рдмрдЪреНрдЪреЗ рдиреЗ рдлрд░реНрд╢ рдкрд░ 3 рд▓реАрдЯрд░ рдкрд╛рдиреА рдХреА рддрд░рд╣ рдлреЗрдВрдХ рджрд┐рдпрд╛: 1st_place_medal: рдореИрдВ рдПрдХ рдкрд▓ рдореЗрдВ рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ ...

рд╕рднреА 34 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХрдиреЗрдХреНрд╕ рдкреВрд▓рд┐рдВрдЧ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬрдм рдХрдиреЗрдХреНрд╢рди рдПрдХ рд╣реА рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

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

рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж https://forums.aws.amazon.com/thread.jspa?threadID=216000

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

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

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╡рд╛рдХреНрдп рдХреЗ рдмреАрдЪ рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛, рдореЗрд░реЗ рдмрдЪреНрдЪреЗ рдиреЗ рдлрд░реНрд╢ рдкрд░ 3 рд▓реАрдЯрд░ рдкрд╛рдиреА рдХреА рддрд░рд╣ рдлреЗрдВрдХ рджрд┐рдпрд╛: 1st_place_medal: рдореИрдВ рдПрдХ рдкрд▓ рдореЗрдВ рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ ...

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

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдиреЗрдХреНрд╕ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рд╣реА рд╣реИ? рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд▓реИрдВрдмрдбрд╛ рдХрднреА-рдХрднреА рд╣рд░ рддрд░рд╣ рдХреЗ рдлреЗрдВрдХреЗ рд╣реБрдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

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

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд▓рд┐рдВрдЧ рдХреЗ рд▓рд╛рдн рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрдЧрд╛ред рдЖрдкрдХреЛ рдЖрдХрд╛рд░ 1 рдХреЗ рд╕рд╛рде рдкреВрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдорд┐рд▓реЗрдЧрд╛ред

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

рдХреНрдпрд╛ рдореИрдВ Knex рдХрд╛ рдЙрдкрдпреЛрдЧ RedShift рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ COPY рдХреНрд╡реЗрд░реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛?

Pg рдкреВрд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд▓реИрдореНрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реА рдХреНрд╡реЗрд░реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред

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

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реИрдХреНрд╕реНрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ COPY рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдорд╛рдиреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╣рд┐рдд рд▓реЗрдирджреЗрди рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╡рд╛рдкрд╕ рд▓реБрдврд╝рдХ рдЬрд╛рдПрдЧреА ...

рд╡реИрд╕реЗ рднреА рдЕрдЧрд░ рдХреНрд╡реЗрд░реА рднреЗрдЬреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ рдпрд╣ рддрд░реАрдХрд╛ рд╢реВрд░рд╡реАрд░реЛрдВ рддрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓реИрдВрдмрдбрд╛ рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдореЗрд░рд╛ рдЕрд╡рд▓реЛрдХрди рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд╡реЗрд░реА RedShift рдкрд░ рдорд╛рд░реА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдореИрдВ рдПрдХ db рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдЦреБрд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп 30 рд╕рдордХрд╛рд▓рд┐рдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдЪреНрдЪрддрд░ рдХреБрдЫ рднреА рддреБрд░рдВрдд рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреНрд╡реЗрд░реА рдХреЗ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╣реИ рдЬреЛ рд╡реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ AWS рд▓рд╛рдореНрдмрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ knex / postgres / lambda рдХреЗ рдкреИрдЯрд░реНрди рдФрд░ / рдпрд╛ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

'use strict';
var pg = require('pg');

function initKnex(){
  return require('knex')({
      client: 'pg',
      connection: { ...details... }
  });
}

module.exports.hello = (event, context) =>
{
  var knex = initKnex();

  // Should I be returning knex here or in the final catch?
  knex
  .select('*')
  .from('my_table')
  .then(function (rows) {
    context.succeed('Succeeded: ' + JSON.stringify(rows || []));
  })
  .catch(function (error) {
    context.fail(error);
  })
  .then(function(){
    // is destroy overkill? - is there an option for knex.client.release, etc?
    knex.destroy();
  })
}

рдореИрдВ рдПрдХ рд╣реА рдирд╛рд╡ рдореЗрдВ рд╣реВрдБ - рдЕрднреА рднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реЗ рдЧреБрдЧрд▓реА рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред рдореИрдВ рдЕрднреА рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

const dbConfig = require('./db');
const knex = require('knex')(dbConfig);

exports.handler = function (event, context, callback) {
...
connection = {..., pool: { min: 1, max: 1 },

рдЗрд╕ рддрд░рд╣ рдХрдиреЗрдХреНрд╢рди (рдЕрдзрд┐рдХрддрдо 1 рдкреНрд░рддрд┐ рдХрдВрдЯреЗрдирд░) рдЬреАрд╡рд┐рдд рд░рд╣реЗрдЧрд╛, рддрд╛рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдореИрдВ рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ред

http://blog.rowanudell.com/database-connections-in-lambda/

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдм рддрдХ рдХрд╛ рдХрд╛рдо рд╣реИред

/ рд╢реНрд░рдЧ

@austingayler

рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ const knex рдШреЛрд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрдЕрдк рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? (рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдкрдХреЗ dbConfig рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ)

рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ, рдХреНрдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдмрд╕ рдПрдХ рд╣реА рдирд╛рд╡ рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЪреАрдорд┐рдВрдЧ рдХрд░рддреЗ рд╣реБрдП , рдореБрдЭреЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдкреВрд▓ рдЖрдХрд╛рд░ (

const knex = require('knex');

const client = knex(dbConfig);

client(tableName).select('*')
  .then((result) => { 

    return Promise.all([
      result,
      client.destroy(),
    ])  
  })
  .then(([ result ]) => {

    return result;
  });

TL; DR: рдХреЙрд▓рдмреИрдХ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╕ context.callbackWaitsForEmptyEventLoop = false рд╕реЗрдЯ рдХрд░реЗрдВред

AWS рд▓реИрдВрдмрдбрд╛ рдЦрд╛рд▓реА рдИрд╡реЗрдВрдЯ рд▓реВрдк (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЯрд╛рдЗрдордЖрдЙрдЯ рддреНрд░реБрдЯрд┐ рдХреЛ рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ:
https://github.com/apex/apex/commit/1fe6e91a46e76c2d5c77877be9ce0c206e9ef9fb

To @elhigu @tgriesser : рдпрд╣ рдПрдХ рдиреЗрдХреНрд╕рд╕ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓реИрдореНрдмреНрдбрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЯреИрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП :)

@mooyoul рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ knex рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореБрджреНрджрд╛ ... рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рд▓реИрдореНрдмреНрдбрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдорд╛рди рдХреЛ knex рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░ рд╕рдХреЗред

рдХреГрдкрдпрд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рджреЗрдЦреЗрдВ
https://stackoverflow.com/questions/49347210/why-aws-lambda-keeps-timing-out-when-using-knex-js
рдЖрдкрдХреЛ db рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЕрдиреНрдпрдерд╛ рд▓реИрдореНрдмрдбрд╛ рд░рди рдЖрдЙрдЯ рд╣реЛрдиреЗ рддрдХ рдЪрд▓рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдПрдХ рдкреИрдЯрд░реНрди рдкрд╛рдпрд╛ рд╣реИ рдЬреЛ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде рдХреНрдиреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЛрд╖ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рдЖрдк рдареАрдХ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ?

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

рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд▓реИрдВрдмрдбрд╛ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ?

Https://scalegrid.io/blog/how-to-use-mongodb-connection-pooling-on-aws-lambda/ рдХреЗ рдиреЛрдб.рдЬреЗрдПрд╕ рднрд╛рдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрд╣ рдЧреИрд░-рдЦрд╛рд▓реА рдИрд╡реЗрдВрдЯ рд▓реВрдк рдкрд░ рд▓рдЯрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╕реБрдЭрд╛рддрд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдк рдЙрд╕ рдЭрдВрдбреЗ рдХреЛ рдЭреВрдард╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реИрдВрдмрдбрд╛ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, рдЗрд╕рдиреЗ рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдирд╣реАрдВред рдореИрдВ рдЧреБрдорд░рд╛рд╣ рд╣реЛрдиреЗ рдХреА рддрд░рд╣ рдерд╛ред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрд░рдбреАрдПрд╕ рдЗрдирдмрд╛рдЙрдВрдб рд╕реНрд░реЛрдд рдореЗрд░реЗ рд▓реИрдВрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИред рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдореЗрдВ рдорд┐рд▓рд╛ рд╕рдорд╛рдзрд╛рди: рдпрд╛ рддреЛ RDS рдЗрдирдмрд╛рдЙрдВрдб рд╕реНрд░реЛрдд рдХреЛ 0.0.0.0/0 рдмрджрд▓рдирд╛ рдпрд╛ VPC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдЖрд░рдбреАрдПрд╕ рдЗрдирдмрд╛рдЙрдВрдб рд╕реНрд░реЛрдд рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдХреИрдиреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рдВрдмреЛрджрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдЬрд┐рд╕ рд▓реИрдореНрдмреНрдбрд╛ рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ Node.js 8.10 рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╣реИ:

knex: 0.17.0
pg: 7.11.0

Async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

const Knex = require('knex');

const pg = Knex({ ... });

module.exports. submitForm = async (event) => {
  const {
    fields,
  } = event['body-json'] || {};

  return pg('surveys')
    .insert(fields)
    .then(() => {
      return {
        status: 200
      };
    })
    .catch(err => {
      return {
        status: 500
      };
    });
};

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реА рдореБрджреНрджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рд╕рдордп Knex serverless-mysql ( рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрд▓рдЧ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрдЬрд╛рдп serverless-mysql рдЙрдкрдпреЛрдЧ рд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рдж рднреА рдЕрд╕рдВрдЧрддрддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

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

рдЗрд╕ рдмреАрдЪ, рдЗрд╕ рдмреАрдЪ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдореИрдВ Knex рдХрд╛ рдЙрдкрдпреЛрдЧ _build_ but _not execute_ MySQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рддреЛ рдмрд╕ toSQL() рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП serverless-mysql рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд╕ рдХрд░реЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ Knex рдХреЛ рдХрд┐рд╕реА db рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдРрд╕рд╛ рдХреЛрдИ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓ рд░рд╣рд╛ рд╣реЛ рдЬреЛ рдХрднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛?

connection = {..., pool: { min: 0, max: 0 ) },

@disbelief рдЖрдк рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ knex рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЙрдХреНрд╕ https://knexjs.org/#Installation -client рдореЗрдВ рдЗрд╕ рдзрд░реНрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ

const knex = require('knex')({client: 'mysql'});

const generatedQuery = knex('table').where('id',1).toSQL().toNative();

@elhigu рдЖрд╣ рд╢рд╛рдВрдд, рдзрдиреНрдпрд╡рд╛рджред рдЕрдВрддрд░рд┐рдо рдореЗрдВ рдПрдХ рд╢реЙрдЯ рджреЗрдЧрд╛ред

рдЕрджреНрдпрддрди: рдКрдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ db рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ Knex рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдХрд┐рд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓ рди рд╣реЛред

@disbelief рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрд╛?

@fdecampredon рдиреЛрдк ред рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрдХреНрд╡реЗрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрди рдкрд░ toString() рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ serverless-mysql рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@disbelief рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдмрд┐рдирд╛ db рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ред

рдХреНрдпрд╛ рдЖрдк рдирдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХреЛрдб рдФрд░ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдорди рдХрд░реЗрдВрдЧреЗ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ knex рд╕рдВрд╕реНрдХрд░рдгред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдиреЛрдб v8.11.1
mysql : 2.13.0
knex : 0.18.3

const k = require('knex')

const client = k({ client: 'mysql' })

console.log('Knex version:', require('knex/package.json').version)
// => 0.18.3
console.log('sql:', client('table').where('id',1).toSQL().toNative())
// => { sql: 'select * from `table` where `id` = ?', bindings: [ 1 ] }

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

рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

const Knex = require('knex');
let instance = null;

module.exports = class DatabaseManager {
  constructor({ host, user, password, database, port = 3306, client = 'mysql', pool = { min: 1, max: 1 }}) {
    this._client = client;
    this._poolOptions = pool;
    this._connectionOptions = {
      host: DB_HOST || host,
      port: DB_PORT || port,
      user: DB_USER || user,
      password: DB_PASSWORD || password,
      database: DB_NAME || database,
    };
  }

  init() {
    if (instance !== null) {
      return;
    }

    instance = Knex({
      client: this._client,
      pool: this._poolOptions,
      connection: this._connectionOptions,
      debug: process.env.DEBUG_DB == true,
      asyncStackTraces: process.env.DEBUG_DB == true,
    });
  }

  get instance() {
    return instance;
  }
}

рдЗрд╕ рддрд░рд╣, рдЖрдк рд▓реИрдВрдмрдбрд╛ рдХреЗ рдкреБрдирд░реНрдЪрдХреНрд░рдг рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдЙрдард╛рдПрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд рдкреНрд░рддреНрдпреЗрдХ рд╕рдХреНрд░рд┐рдп (рдлреНрд░реАрдЬреЗрдб) рдХрдВрдЯреЗрдирд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рд░рдЦреЗрдЧрд╛ред

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

рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдм рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рддрдХ рд▓реИрдВрдмрдбрд╛ рдореЗрдВ Knex рдХреЛ рдЪрд▓рд╛рдпрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд▓реИрдВрдмрдбрд╛ рдлрдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЕрдкрдирд╛ рдХреНрдиреЗрдХреНрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдиреНрдп рдкреЛрд╕реНрдЯ рдореЗрдВ context.callbackWaitsForEmptyEventLoop = false рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХрд╣рд╛ рдХрд┐, рдкрд┐рдЫрд▓реЗ рджрд┐рдиреЛрдВ, рд▓реИрдореНрдмрдбрд╛ рдХреА рдУрд░ рд╕реЗ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдм рдкреЛрд╕реНрдЯрдЧреНрд░реИрдЬ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдкрд╛рдЗрдХ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ; рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдирд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЙрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд┐рдЫрд▓реЗ рджрд┐рди рдпрд╛ рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдХреЛ рджреЗрдЦрд╛ рд╣реИ?

@jamesdixon рдиреЗ рдЕрднреА рдпрд╣ рдкрдврд╝рддреЗ рд╣реБрдП рд▓реИрдВрдмрдбрд╛ рдкрд░ рд╣рдорд╛рд░реЗ рдХреБрдЫ рд╢реВрд░рд╡реАрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдХреНрдпрд╛ context.callbackWaitsForEmptyEventLoop = false рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

saurabhghewari picture saurabhghewari  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aj0strow picture aj0strow  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tjwebb picture tjwebb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

koskimas picture koskimas  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mishitpatel picture mishitpatel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ