20 рдЕрдкреНрд░реИрд▓ 2025┬╖8 рдорд┐рдирдЯ рдкрдврд╝рдиреЗ рдореЗрдВ

рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХ: рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ

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

рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХ: рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ

рдХреНрдпреЛрдВ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдмрд╛рд░-рдмрд╛рд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ

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

рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рд╕рдордп рдФрд░ рд▓рд╛рдЧрдд рдХреА рд╣реИред рд╣рд░ рд░рди рдореЗрдВ рдкреВрд░реЗ dataset рдХреЛ рдЦреАрдВрдЪрдирд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдмрд╛рд░тАСрдмрд╛рд░ рд╡рд╣реА рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдлрд┐рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд░рд╛рдд рдореЗрдВ 500,000 рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рд┐рдВрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк compute, API рдХреЙрд▓реНрд╕ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд░рд╛рдЗрдЯреНрд╕ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рднрд▓реЗ рд╣реА рдХреЗрд╡рд▓ 200 рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓реЗрдВред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рд╕рд╣реАрдкрди рдХреА рд╣реИред рдлреБрд▓ рд░реАтАСрдЗрдореНрдкреЛрд░реНрдЯ рдЕрдХреНрд╕рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ matching рдирд┐рдпрдо рдкрд░рдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ), рдпрд╛ рдирдП edits рдХреЛ рдкреБрд░рд╛рдиреЗ export рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдХрдИ рдЯреАрдореЛрдВ рдореЗрдВ тАЬрдбрд┐рд▓реАрдЯ рдФрд░ рд░реАтАСрд▓реЛрдбтАЭ рдмреАрдЪ рдореЗрдВ рдЕрд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдЯреЛрдЯрд▓реНрд╕ рд╕рдордп рдХреЗ рд╕рд╛рде drift рдХрд░рддреЗ рд╣реБрдП рджрд┐рдЦрддреЗ рд╣реИрдВред

рдЖрдо рд▓рдХреНрд╖рдг рдХреБрдЫ рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ:

  • рдПрдХ рд░рди рдХреЗ рдмрд╛рдж рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛рдЙрдВрдЯ рдореИрдЪ рдирд╣реАрдВ рдХрд░рддреЗ
  • рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рджрд┐рдЦрддреЗ рд╣реИрдВ (рдИрдореЗрд▓ рдХреЗрд╕рд┐рдВрдЧ, рдлреЛрди рдлреЙрд░реНрдореИрдЯрд┐рдВрдЧ)
  • рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реБрдП рдлреАрд▓реНрдб рдкреБрд░рд╛рдиреЗ рд╡реИрд▓реНрдпреВ рдкрд░ рд╡рд╛рдкрд╕ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ
  • рд╕рд┐рдВрдХ рдХрднреАтАСрдХрднреА тАЬрдкреВрд░рд╛тАЭ рджрд┐рдЦрддрд╛ рд╣реИ рдкрд░ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдорд┐рд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ
  • рд╣рд░ рдЗрдореНрдкреЛрд░реНрдЯ рд╡рд┐рдВрдбреЛ рдХреЗ рдмрд╛рдж рд╕рдкреЛрд░реНрдЯ рдЯрд┐рдХрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ

рдПрдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реЗрд╡реНрдб рдорд╛рд░реНрдХрд░ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ, тАЬрдореИрдВ рдпрд╣рд╛рдВ рддрдХ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдБредтАЭ рдЕрдЧрд▓реА рдмрд╛рд░ рдЖрдк рдЙрд╕реА рдорд╛рд░реНрдХрд░ рд╕реЗ рдЬрд╛рд░реА рд░рд╣рддреЗ рд╣реИрдВ рдмрдЬрд╛рдп рд╢реБрд░реБрдЖрдд рд╕реЗ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗред рд╡рд╣ рдорд╛рд░реНрдХрд░ рдПрдХ timestamp, рд░рд┐рдХреЙрд░реНрдб ID, рд╡рд░реНрд╢рди рдирдВрдмрд░ рдпрд╛ рдХрд┐рд╕реА API рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдЯреЛрдХрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рд╡рд┐рдзрд┐ рдЪреБрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд┐рдВрдХ рд▓рдХреНрд╖реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

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

рд╢реБрд░реВ рдХрд░реЗрдВ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХрд╛ рдирд╛рдо рд▓реЗрдХрд░ рдФрд░ рддрдп рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдбреЗрдЯрд╛ рд╕рддреНрдп (source of truth) рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ CRM рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдирд╛рдо рдФрд░ рдлреЛрди рдирдВрдмрд░реНрд╕ рдХреЗ рд▓рд┐рдП source рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдкрдХреА рдмрд┐рд▓рд┐рдВрдЧ рдЯреВрд▓ subscription status рдХреЗ рд▓рд┐рдП source рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдЧрд░ рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╣реА рдлреАрд▓реНрдб рдХреЛ рдПрдбрд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрд░реЛрдд рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ conflicts рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреА рд╣реЛрдЧреАред

рдЕрдЧрд▓рд╛, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдХрд┐ тАЬрд╕рд┐рдВрдХтАЭ рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╣рд░ рд╕рдордп рдПрдХрджрдо рдореЗрд▓ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЕрдкрдбреЗрдЯ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВ? рдПрдХрджрдо рдореЗрд▓ рдЕрдХреНрд╕рд░ рдХрдбрд╝реА ordering, рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдордЬрдмреВрдд рдЧрд╛рд░рдВрдЯреАрдЬрд╝, рдФрд░ рдбрд┐рд▓реАрдЯреНрд╕ рдХреЗ рд╕рд╛рд╡рдзрд╛рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИред Eventual consistency рдЖрдо рддреМрд░ рдкрд░ рд╕рд╕реНрддреА рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдлреЗрд▓реНрдпреЛрд░ рдХреЗ рдкреНрд░рддрд┐ рдЕрдзрд┐рдХ рд╕рд╣рдирд╢реАрд▓ рд╣реЛрддреА рд╣реИред

рд╕рд┐рдВрдХ рдХреА рджрд┐рд╢рд╛ рддрдп рдХрд░реЗрдВред рд╡рдитАСрд╡реЗ рд╕рд┐рдВрдХ рд╕рд░рд▓ рд╣реИ: рд╕рд┐рд╕реНрдЯрдо A рд╕рд┐рд╕реНрдЯрдо B рдХреЛ рдлреАрдб рдХрд░рддрд╛ рд╣реИред рдЯреВтАСрд╡реЗ рд╕рд┐рдВрдХ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдЕрдкрдбреЗрдЯ рдПрдХ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЕрдирдВрдд рд▓реВрдкреНрд╕ рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдБ рд╣рд░ рд╕рд╛рдЗрдб рджреВрд╕рд░реЛрдВ рдХреЛ рдмрд╛рд░тАСрдмрд╛рд░ тАЬрдареАрдХтАЭ рдХрд░ рджреЗрддреА рд╣реИред

рдмрд┐рд▓реНрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╡рд╛рд▓

рд╕рд╛рджреЗ рдирд┐рдпрдо рд▓рд┐рдЦрд┐рдП рдЬрд┐рди рдкрд░ рд╕рднреА рд╕рд╣рдордд рд╣реЛрдВ:

  • рд╣рд░ рдлреАрд▓реНрдб (рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯрд╛рдЗрдк) рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рд╕рд┐рд╕реНрдЯрдо source of truth рд╣реИ?
  • рдХрд┐рддрдирд╛ рд▓реЗрдЯ acceptable рд╣реИ (рд╕реЗрдХрдВрдб, рдорд┐рдирдЯ, рдШрдВрдЯреЗ)?
  • рдпрд╣ рд╡рдитАСрд╡реЗ рд╣реИ рдпрд╛ рдЯреВтАСрд╡реЗ, рдФрд░ рдХреМрдитАСрд╕реЗ рдЗрд╡реЗрдВрдЯреНрд╕ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?
  • рдбрд┐рд▓реАрдЯреНрд╕ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рд╣реЛрддреЗ рд╣реИрдВ (рд╣рд╛рд░реНрдб рдбрд┐рд▓реАрдЯ, рд╕реЙрдлреНрдЯ рдбрд┐рд▓реАрдЯ, рдЯреЙрдореНрдмрд╕реНрдЯреЛрди)?
  • рдЬрдм рджреЛрдиреЛрдВ рд╕рд╛рдЗрдб рдиреЗ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓ рджрд┐рдпрд╛ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ conflict рдирд┐рдпрдо рд╕реЗрдЯ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: тАЬрд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдлреАрд▓реНрдб рдХреЗ рд▓рд┐рдП billing рдЬреАрддреЗрдЧрд╛, рд╕рдВрдкрд░реНрдХ рдлреАрд▓реНрдб рдХреЗ рд▓рд┐рдП CRM рдЬреАрддреЗрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдирд╡реАрдирддрдо рдЕрдкрдбреЗрдЯ рдЬреАрддреЗрдЧрд╛редтАЭ рдпрджрд┐ рдЖрдк AppMaster рдЬреИрд╕реЗ рдЯреВрд▓ рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдкрдиреЗ Business Process рд▓реЙрдЬрд┐рдХ рдореЗрдВ рдкрдХрдбрд╝ рд▓реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рджрд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░рд╣реЗрдВ, рдХрд┐рд╕реА рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рджрдмреЗ рди рд░рд╣реЗрдВред

рдХрд░реНрд╕рд░, рд╣реИрд╢ рдФрд░ рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди: рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕

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

рдХрд░реНрд╕рд░ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИред рдЖрдк "рдЕрдВрддрд┐рдо рдЪреАрдЬрд╝ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛" рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрдВрддрд┐рдо ID, рдЕрдВрддрд┐рдо updated_at timestamрдк, рдпрд╛ рдПрдХ sequence рдирдВрдмрд░ред рдЕрдЧрд▓реЗ рд░рди рдореЗрдВ рдЖрдк рдЙрд╕ рдкреЙрдЗрдВрдЯ рдХреЗ рдмрд╛рдж рдХреЗ рд░рд┐рдХреЙрд░реНрдб рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рддрдм рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕реНрд░реЛрдд consistent рддрд░реАрдХреЗ рд╕реЗ sort рдХрд░рддрд╛ рд╣реИ рдФрд░ IDs рдпрд╛ timestamps рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣ рддрдм рдЯреВрдЯрддрд╛ рд╣реИ рдЬрдм рдЕрдкрдбреЗрдЯ рджреЗрд░реА рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рдШрдбрд╝рд┐рдпрд╛рдБ рдЕрд▓рдЧтАСрдЕрд▓рдЧ рд╣реЛрдВ, рдпрд╛ рд░рд┐рдХреЙрд░реНрдб тАЬрдЕрддреАрддтАЭ рдореЗрдВ рдбрд╛рд▓реЗ рдЬрд╛ рд╕рдХреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдХрдлрд┐рд▓реНрдб рдбреЗрдЯрд╛)ред

рд╣реИрд╢ рддрдм рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдХреЗрд╡рд▓ рдХрд░реНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╣реИрд╢ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрди рдлреАрд▓реНрдбреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдкрд░рд╡рд╛рд╣ рд╣реИ) рдФрд░ рдХреЗрд╡рд▓ рддрдм рд╕рд┐рдВрдХ рдХрд░реЗрдВ рдЬрдм рд╣реИрд╢ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╛ рдЖрдк рд╕рднреА рдмреИрдЪ рдХрд╛ рд╣реИрд╢ рд▓реЗрдХрд░ рдбреНрд░рд┐рдлреНрдЯ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЬреВрдо рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐тАСрд░рд┐рдХреЙрд░реНрдб рд╣реИрд╢ рд╕рдЯреАрдХ рд╣реЛрддреЗ рд╣реИрдВ рдкрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ compute рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдмреИрдЪ рд╣реИрд╢ рд╕рд╕реНрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдкрд░ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рдХрд┐рд╕ рдЖрдЗрдЯрдо рдиреЗ рдмрджрд▓ рдХрд┐рдпрд╛ред

рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХреА рдЧрдИ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╡реИрд▓реНрдпреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ pagination рдпрд╛ event streams рдХреЗ рд▓рд┐рдПред рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ, рдмрд╕ рд╕реНрдЯреЛрд░ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рднреЗрдЬрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗред рдЯреЛрдХрди рддрдм рдЕрдЪреНрдЫреЗ рд╣реИрдВ рдЬрдм API рдЬрдЯрд┐рд▓ рд╣реЛ, рдкрд░ рд╡реЗ expire рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, retention рд╡рд┐рдВрдбреЛ рдХреЗ рдмрд╛рдж invalid рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

  • рдХрд░реНрд╕рд░: рддреЗрдЬрд╝ рдФрд░ рд╕рд░рд▓, рдкрд░ outтАСofтАСorder рдЕрдкрдбреЗрдЯ рдкрд░ рдзреНрдпрд╛рди рд░рдЦреЗрдВред
  • рдкреНрд░рддрд┐тАСрд░рд┐рдХреЙрд░реНрдб рд╣реИрд╢: рд╕рдЯреАрдХ рдЪреЗрдВрдЬ рдбрд┐рдЯреЗрдХреНрд╢рди, рдкрд░ рд▓рд╛рдЧрдд рдЕрдзрд┐рдХред
  • рдмреИрдЪ рд╣реИрд╢: рд╕рд╕реНрддрд╛ рдбреНрд░рд┐рдлреНрдЯ рд╕рдВрдХреЗрдд, рдкрд░ рдХрдо рд╡рд┐рд╢рд┐рд╖реНрдЯред
  • рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди: рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд pagination, рдкрд░ expire рдпрд╛ singleтАСuse рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рд╣рд╛рдЗрдмреНрд░рд┐рдб (рдХрд░реНрд╕рд░ + рд╣реИрд╢): рд╕рд╛рдорд╛рдиреНрдп рддрдм рдЬрдм updated_at рдкреВрд░реА рддрд░рд╣ рднрд░реЛрд╕реЗрдордВрдж рди рд╣реЛред

рдпрджрд┐ рдЖрдк AppMaster рдЬреИрд╕реЗ рдЯреВрд▓ рдореЗрдВ рд╕рд┐рдВрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпреЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдЕрдХреНрд╕рд░ рдПрдХ рдЫреЛрдЯреЗ тАЬsync stateтАЭ рдЯреЗрдмрд▓ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рд░ рд░рди рдмрд┐рдирд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдП рд░реЗрдЬрд╝реНрдпреВрдо рдХрд░ рд╕рдХреЗред

рдЕрдкрдирд╛ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдбрд┐рдЬрд╛рдЗрди рдХрд░реЗрдВ

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

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

рдХреНрдпрд╛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ (рдФрд░ рдХреНрдпреЛрдВ)

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

  • рдЬреЙрдм рдкрд╣рдЪрд╛рди: рдЬреЙрдм рдирд╛рдо, tenant рдпрд╛ account id, рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ (рдЙрджрд╛рд╣рд░рдг: customers)
  • рдкреНрд░реЛрдЧреНрд░реЗрд╕: рдХрд░реНрд╕рд░ рд╡реИрд▓реНрдпреВ рдпрд╛ рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди, рд╕рд╛рде рдореЗрдВ рдХрд░реНрд╕рд░ рдкреНрд░рдХрд╛рд░ (time, id, token)
  • рд╣реЗрд▓реНрде рд╕рд┐рдЧреНрдирд▓: рдЖрдЦрд┐рд░реА рд░рди рд╕рдордп, рд╕реНрдЯреЗрдЯрд╕, рдкрдврд╝реЗ рдФрд░ рд▓рд┐рдЦреЗ рдЧрдП рд░рд┐рдХреЙрд░реНрдбреНрд╕
  • рд╕реБрд░рдХреНрд╖рд╛: рдЖрдЦрд┐рд░реА рд╕рдлрд▓ рдХрд░реНрд╕рд░ (рд╕рд┐рд░реНрдл рдЖрдЦрд┐рд░реА рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ), рдФрд░ рд▓реЗрдЯреЗрд╕реНрдЯ рдлреЗрд▓рд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдПрд░рд░ рдореИрд╕реЗрдЬ

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

рд╡рд░реНрдЬрдирд┐рдВрдЧ рдФрд░ рдХрдИ рд╕рд┐рдВрдХ рдЬреЙрдмреНрд╕

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

рдХрдИ рд╕рд┐рдВрдХ рдЬреЙрдмреНрд╕ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд░реЗрдВред рдПрдХ рдЕрдЪреНрдЫрд╛ key рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (tenant_id, integration_id, object_name, job_version)ред рдЗрд╕рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдмрдЧ рд╕реЗ рдмрдЪрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рджреЛ рдЬреЙрдмреНрд╕ рдПрдХ рдХрд░реНрд╕рд░ рд╢реЗрдпрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдбреЗрдЯрд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдХрдВрдХреНрд░реАрдЯ рдЙрджрд╛рд╣рд░рдг: рдпрджрд┐ рдЖрдк рд╕рд┐рдВрдХ рдХреЛ AppMaster рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдирд▓ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ PostgreSQL рдореЗрдВ рдкреНрд░рддрд┐тАСtenant рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рдлрд▓ рдмреИрдЪ рдХрдорд┐рдЯ рдХреЗ рдмрд╛рдж рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рд╕реНрдЯреЗрдктАСрдмрд╛рдптАСрд╕реНрдЯреЗрдк: рдПрдХ рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рд╕рд┐рдВрдХ рд▓реВрдк рд▓рд╛рдЧреВ рдХрд░реЗрдВ

рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдЯреЗрдХреНрдирд┐рдХрд▓ рдбреЗрдЯ рд╕реЗ рдмрдЪреЗрдВ
рд░рд┐рдпрд▓ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдмрдврд╝рддреА рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдкрд░ ownership рд░рдЦреЗрдВред
рдХреЛрдб рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВ

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

рдПрдХ рд╕рд░рд▓ рд▓реВрдк рдЬрд┐рд╕рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ

рдкрд╣рд▓реЗ рдРрд╕рд╛ ordering рдЪреБрдиреЗрдВ рдЬреЛ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХрднреА рди рдмрджрд▓реЗрдВред рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░ рддрднреА рдЬрдм рдЖрдк рдПрдХ tieтАСbreaker (рдЬреИрд╕реЗ ID) рднреА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдкрд░ рд╣реБрдП рджреЛ рдЕрдкрдбреЗрдЯ shuffle рди рд╣реЛрдВред

рдлрд┐рд░ рд▓реВрдк рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛рдПрдБ:

  • рдЕрдкрдирд╛ рдХрд░реНрд╕рд░ рддрдп рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг: last_updated + id) рдФрд░ рдкреЗрдЬ рд╕рд╛рдЗрдЬ рдЪреБрдиреЗрдВред
  • рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЧрдП рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗ рдирдП рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ рдЕрдЧрд▓рд╛ рдкреЗрдЬ рдлреЗрдЪ рдХрд░реЗрдВред
  • рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЯрд╛рд░реНрдЧреЗрдЯ рдореЗрдВ upsert рдХрд░реЗрдВ (рдпрджрд┐ рдирд╣реАрдВ рд╣реИ рддреЛ create, рдореМрдЬреВрдж рд╣реЛ рддреЛ update) рдФрд░ рдлреЗрд▓рд┐рдпрд░реНрд╕ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВред
  • рд╕рдлрд▓ рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рдХрдорд┐рдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рдЖрдЦрд┐рд░реА рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдП рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдирдпрд╛ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкрд░реНрд╕рд┐рд╕реНрдЯ рдХрд░реЗрдВред
  • рд░рд┐рдкреАрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдкреЗрдЬ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдХреБрдЫ рд╕рдордп рд╕реНрд▓реАрдк рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЯреНрд░рд╛рдп рдХрд░реЗрдВред

рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдЕрдкрдбреЗрдЯ рдХреЛ fetch рд╕реЗ рдЕрд▓рдЧ рд░рдЦреЗрдВред рдЕрдЧрд░ рдЖрдк рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗрд╡ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдХреНрд░реИрд╢ silently рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рд╡рд╛ рд╕рдХрддрд╛ рд╣реИред

рдмреИрдХрдСрдлрд╝ рдФрд░ retries рдмрд┐рдирд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ

рдорд╛рди рд▓реЗрдВ рдХреЙрд▓реНрд╕ рдлреЗрд▓ рд╣реЛрдВрдЧреАред рдЬрдм fetch рдпрд╛ write рдлреЗрд▓ рд╣реЛ, рддреЛ рдЫреЛрдЯреЗ рдмреИрдХрдСрдлрд╝ (рдЙрджрд╛рд╣рд░рдг: 1s, 2s, 5s) рдХреЗ рд╕рд╛рде retry рдХрд░реЗрдВ рдФрд░ рдПрдХ max retry рдХрд╛рдЙрдВрдЯ рд░рдЦреЗрдВред retries рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдПрдВ upserts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗ рдФрд░ рдЕрдкрдиреА writes idempotent рдмрдирд╛рдХрд░ (рдПрдХ рд╣реА рдЗрдирдкреБрдЯ, рдПрдХ рд╣реА рд░рд┐рдЬрд╝рд▓реНрдЯ)ред

рдПрдХ рдЫреЛрдЯрд╛, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг: рдпрджрд┐ рдЖрдк customer updates рд╣рд░ рдорд┐рдирдЯ рд╕рд┐рдВрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ 200 changes рдлреЗрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ upsert рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рддрднреА рдЕрдкрдиреЗ рдирдП рдХрд░реНрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЦрд┐рд░реА рдЧреНрд░рд╛рд╣рдХ рдХрд╛ (updated_at, id) рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ AppMaster рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рдПрдХ рд╕рд░рд▓ рддрд╛рд▓рд┐рдХрд╛ (Data Designer) рдореЗрдВ рдореЙрдбрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ Business Process рдореЗрдВ рд▓реВрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлреЗрдЪ, рдЕрдкрд╕рд░реНрдЯ рдФрд░ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдЕрдкрдбреЗрдЯ рдХреЛ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдлреНрд▓реЛ рдореЗрдВ рдХрд░рддрд╛ рд╣реИред

рд░реЗрдЬрд╝реНрдпреВрдо рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдирд╛: idempotency рдФрд░ рдПрдЯреЙрдорд┐рдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕

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

Idempotency рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рд▓ рд╣реИред рдЖрдк рдЗрд╕реЗ рдРрд╕реЗ рд▓рд┐рдЦ рдХрд░ рдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдмрд┐рдирд╛ рдлрд╛рдЗрдирд▓ рд░рд┐рдЬрд╝рд▓реНрдЯ рдмрджрд▓реЗред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЕрдХреНрд╕рд░ upserts рд╣реЛрддреЗ рд╣реИрдВ, рди рдХрд┐ inserts: рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ key (рдЬреИрд╕реЗ customer_id) рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗрдВ, рдФрд░ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рдореМрдЬреВрджрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рдПрдХ рдЕрдЪреНрдЫрд╛ тАЬwrite keyтАЭ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк retries рдХреЗ рджреМрд░рд╛рди рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХреЗрдВред рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рд╕реНрд░реЛрдд рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ ID, рдпрд╛ рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдХреА рдЬреЛ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрдиреЗ рдкрд░ рд╕реНрдЯреЛрд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдПрдХ unique constraint рд╕реЗ рдмреИрдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдкрдХреА рд░реВрд▓ рдХреЛ рддрднреА рднреА рд▓рд╛рдЧреВ рдХрд░реЗ рдЬрдм рджреЛ рд╡рд░реНрдХрд░реНрд╕ рд░реЗрд╕ рдХрд░ рд░рд╣реЗ рд╣реЛрдВред

рдПрдЯреЙрдорд┐рдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдЙрддрдиреЗ рд╣реА рдЬрд╝рд░реВрд░реА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛ commit рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд░реНрд╕рд░ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдХреНрд░реИрд╢ рдЖрдкрдХреЛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рд╡рд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдЕрдкрдбреЗрдЯ рдХреЛ рдЕрдкрдиреЗ рд░рд╛рдЗрдЯреНрд╕ рдХреЗ рд╡рд╣реА рдпреВрдирд┐рдЯ рдСрдл рд╡рд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдиреЗрдВред

рдпрд╣рд╛рдБ рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкреИрдЯрд░реНрди рд╣реИ:

  • рдЖрдЦрд┐рд░реА рдЪреЗрдХрдкреЙрдЗрдВрдЯ (рдХрд░реНрд╕рд░ рдпрд╛ рдЯреЛрдХрди) рдХреЗ рдмрд╛рдж рдХреЗ рдЪреЗрдВрдЬ рдкрдврд╝реЗрдВред
  • рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдбреЗрдбреБрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХреЗ рд╕реЗ upsert рдХрд░реЗрдВред
  • рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХреЛ commit рдХрд░реЗрдВред
  • рддрднреА рдирдпрд╛ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкрд░реНрд╕рд┐рд╕реНрдЯ рдХрд░реЗрдВред

рдЖрдЙрдЯтАСрдСрдлтАСрдСрд░реНрдбрд░ рдЕрдкрдбреЗрдЯреНрд╕ рдФрд░ рд▓реЗрдЯтАСрдЖрдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рджреВрд╕рд░рд╛ рдЖрдо рдЬрд╛рд▓ рд╣реИред рдПрдХ рд░рд┐рдХреЙрд░реНрдб 10:01 рдкрд░ рдЕрдкрдбреЗрдЯ рд╣реБрдЖ рд╣реЛ рдкрд░ 10:02 рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдмрд╛рдж рдЖ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ API retry рдкрд░ рдкреБрд░рд╛рдиреЗ рдмрджрд▓рд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХрд╛ рдПрдХ "last_modified" рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдФрд░ "last write wins" рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВ: рдХреЗрд╡рд▓ рддрдм рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВ рдЬрдм рдЗрдирдХрдорд┐рдВрдЧ рд░рд┐рдХреЙрд░реНрдб рдореМрдЬреВрджрд╛ рд╕реЗ рдирдпрд╛ рд╣реЛред

рдпрджрд┐ рдЖрдкрдХреЛ рдФрд░ рдордЬрдмреВрдд рд╕реБрд░рдХреНрд╖рд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдПрдХ рдЫреЛрдЯрд╛ overlap рд╡рд┐рдВрдбреЛ рд░рдЦреЗрдВ (рдЙрджрд╛рд╣рд░рдг: рдЖрдЦрд┐рд░реА рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝реЗрдВ) рдФрд░ idempotent upserts рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ repeats рдХреЛ рдЗрдЧреНрдиреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдкрд░ рдпрд╣ resumes рдХреЛ рдмреЛрд░рд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИ тАФ рдФрд░ рдпрд╣реА рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред

AppMaster рдореЗрдВ рд╡рд╣реА рд╡рд┐рдЪрд╛рд░ рдПрдХ Business Process рдлреНрд▓реЛ рдореЗрдВ рд╕рд╛рдлрд╝тАСрд╕рд╛рдлрд╝ рдореИрдк рд╣реЛрддрд╛ рд╣реИ: рдкрд╣рд▓реЗ upsert рд▓реЙрдЬрд┐рдХ рдХрд░реЗрдВ, рдХрдорд┐рдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рдЕрдВрддрд┐рдо рд╕реНрдЯреЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реНрд╕рд░ рдпрд╛ рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред

рдЖрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдЬреЛ рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рд╕рд┐рдВрдХ рдХреЛ рддреЛрдбрд╝ рджреЗрддреА рд╣реИрдВ

рд╕рд┐рдВрдХ рдмреИрдХреЗрдВрдб рддреЗрдЬрд╝реА рд╕реЗ рд╢рд┐рдк рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдбрдХреНрд╢рди-рд░реЗрдбреА рдмреИрдХрдПрдВрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдмрд┐рдирд╛ Go рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗред
рдмреИрдХреЗрдВрдб рдмрдирд╛рдПрдБ

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

рд╕рд╛рдорд╛рдиреНрдп рдлреЗрд▓рд┐рдпрд░ рдкреЙрдЗрдВрдЯреНрд╕

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА updated_at рдкрд░ рдмрд╣реБрдд рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реИред рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдмреИрдХрдлрд┐рд▓реНрд╕, рдЯрд╛рдЗрдордЬрд╝реЛрди рдлрд┐рдХреНрд╕реЗрд╕, рдмрд▓реНрдХ рдПрдбрд┐рдЯреНрд╕, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ readтАСrepairs рдХреЗ рджреМрд░рд╛рди timestamps рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд░реНрд╕рд░ рдХреЗрд╡рд▓ рдПрдХ timestamp рд╣реИ, рддреЛ рдЖрдк рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдорд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (timestamp рдкреАрдЫреЗ рдХреВрджрдирд╛) рдпрд╛ рдмрдбрд╝реЗ рд░реЗрдВрдЬ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (timestamp рдЖрдЧреЗ рдХреВрджрдирд╛)ред

рдПрдХ рдФрд░ рдЬрд╛рд▓ рдпрд╣ рдорд╛рдирдирд╛ рд╣реИ рдХрд┐ IDs рд▓рдЧрд╛рддрд╛рд░ рдпрд╛ рд╕рдЦреНрддреА рд╕реЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЗрдореНрдкреЛрд░реНрдЯреНрд╕, рд╢рд╛рд░реНрдбрд┐рдВрдЧ, UUIDs, рдФрд░ рдбрд┐рд▓реАрдЯреЗрдб рд░реЛреЫ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк тАЬlast seen IDтАЭ рдХреЛ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреИрдкреНрд╕ рдФрд░ рдЖрдЙрдЯтАСрдСрдлтАСрдСрд░реНрдбрд░ рд░рд╛рдЗрдЯреНрд╕ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдиреБрдХрд╕рд╛рдирджрд╛рдпрдХ рдмрдЧ partial success рдкрд░ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: рдЖрдк 1,000 рд░рд┐рдХреЙрд░реНрдб рдлреЗрдЪ рдХрд░рддреЗ рд╣реИрдВ, 700 рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХреНрд░реИрд╢ рд╣реЛрддреЗ рд╣реИрдВ, рдкрд░ рдлрд┐рд░ рднреА fetch рд╕реЗ тАЬnext cursorтАЭ рд╕реНрдЯреЛрд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рд░реЗрдЬрд╝реНрдпреВрдо рдкрд░ рдмрд╛рдХреА 300 рдХрднреА retry рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдбрд┐рд▓реАрдЯреНрд╕ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реИред рд╕реНрд░реЛрдд рд╕реЙрдлреНрдЯтАСрдбрд┐рд▓реАрдЯ (flag), рд╣рд╛рд░реНрдбтАСрдбрд┐рд▓реАрдЯ (рд░реЛ рд╣рдЯрд╛рдирд╛), рдпрд╛ тАЬрдЕрдирдкрдмреНрд▓рд┐рд╢тАЭ (рд╕реНрдЯреЗрдЯрд╕ рдмрджрд▓рдирд╛) рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ active рд░рд┐рдХреЙрд░реНрдбреНрд╕ upsert рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рд░реНрдЧреЗрдЯ рдзреАрд░реЗтАСрдзреАрд░реЗ drift рдХрд░реЗрдЧрд╛ред

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

рдпрд╣рд╛рдБ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВ:

  • рд╕рдВрднрд╡ рд╣реЛ рддреЛ raw timestamps рдХреА рдмрдЬрд╛рдп monotonic рдХрд░реНрд╕рд░ (рдЗрд╡реЗрдВрдЯ ID, log position) рдкрд╕рдВрдж рдХрд░реЗрдВред
  • рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд░рд╛рдЗрдЯреНрд╕ рдХреА рд╕рдлрд▓рддрд╛ рд╕реАрдорд╛ рдХреЗ рд╣реА рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реАрдЯ рдХрд░реЗрдВред
  • рдбрд┐рд▓реАрдЯреНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░реЗрдВ (рдЯреЙрдореНрдмрд╕реНрдЯреЛрдиреНрд╕, рд╕реНрдЯреЗрдЯрд╕ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рдиреНрд╕, рдпрд╛ рд╕рдордптАСрд╕рдордп рдкрд░ reconcile)ред
  • рдЕрдкрдиреЗ рд╣реИрд╢ рдЗрдирдкреБрдЯреНрд╕ рдХрд╛ рд╡рд░реНрд╢рди рд░рдЦреЗрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрд╢рди рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд░рдЦреЗрдВред
  • рдпрджрд┐ рд╕реНрд░реЛрдд reorder рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдЫреЛрдЯреА overlap рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝реЗрдВ (рдЖрдЦрд┐рд░реА N рдЖрдЗрдЯрдо рдлрд┐рд░ рд╕реЗ рдкрдврд╝реЗрдВ)ред

рдпрджрд┐ рдЖрдк AppMaster рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ Data Designer рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓ рдХрд░реЗрдВ рдФрд░ "рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ + рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд▓рд┐рдЦрдирд╛" рд╕реНрдЯреЗрдк рдХреЛ рдПрдХ рд╣реА рдмрд┐рдЬрд╝рдиреЗрд╕ рдкреНрд░реЛрд╕реЗрд╕ рд░рди рдореЗрдВ рд░рдЦреЗрдВ, рддрд╛рдХрд┐ retries рдХрд╛рдо рдХреЛ рд╕реНрдХрд┐рдк рди рдХрд░реЗрдВред

рд╢реЛрд░тАСрд░рд╣рд┐рдд рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдФрд░ рдбреНрд░рд┐рдлреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рд┐рдВрдХ рд░рди рд╢реЗрдбреНрдпреВрд▓ рдХрд░реЗрдВ
рд╢реЗрдбреНрдпреВрд▓реНрдб рд╕рд┐рдВрдХ рд▓реВрдк рдЪрд▓рд╛рдПрдБ рдЬреЛ retries рдФрд░ backoff рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддреЗ рд╣реИрдВ рдмрд┐рдирд╛ duplicate writes рдХреЗред
рдЬреЙрдмреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ

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

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

  • рд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реНрд╕рд░ (рдпрд╛ рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди) рдФрд░ рдПрдВрдб рдХрд░реНрд╕рд░
  • рдлреЗрдЪ рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдбреНрд╕, рд▓рд┐рдЦреЗ рдЧрдП рд░рд┐рдХреЙрд░реНрдбреНрд╕, рд╕реНрдХрд┐рдк рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдбреНрд╕
  • рд░рди рдХреА рдЕрд╡рдзреА рдФрд░ рдкреНрд░рддрд┐тАСрд░рд┐рдХреЙрд░реНрдб (рдпрд╛ рдкреНрд░рддрд┐тАСрдкреЗрдЬ) рдФрд╕рдд рд╕рдордп
  • рдПрд░рд░ рдХрд╛рдЙрдВрдЯ рдФрд░ рдЯреЙрдк рдПрд░рд░ рдХрд╛рд░рдг
  • рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд░рд╛рдЗрдЯ рд╕реНрдЯреЗрдЯрд╕ (рд╕рдлрд▓/рдЕрд╕рдлрд▓)

рдбреНрд░рд┐рдлреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдЕрдЧрд▓рд╛ рд▓реЗрдпрд░ рд╣реИ: рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдЬрдм рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдо тАЬрдХрд╛рдо рдХрд░ рд░рд╣реЗтАЭ рд╣реЛрдВ рдкрд░ рдзреАрд░реЗтАСрдзреАрд░реЗ рдЕрд▓рдЧ рд╣реЛ рд░рд╣реЗ рд╣реЛрдВред рдЯреЛрдЯрд▓реНрд╕ рдЕрдХреЗрд▓реЗ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╣рд▓реНрдХрд╛ рдХреБрд▓ рдЬрд╛рдБрдЪ рдЫреЛрдЯреА рд╕реНрдкреЙрдЯтАСрдЪреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЛрдЬрд╝рд╛рдирд╛ рдПрдХ рдмрд╛рд░ рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ 20 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЧреНрд░рд╛рд╣рдХ IDs рдХрд╛ рд╕реИрдВрдкрд▓ рд▓реЗрдВ рдФрд░ рдХреБрдЫ рдлрд╝реАрд▓реНрдбреНрд╕ (status, updated_at, email) рдорд┐рд▓рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рджреЗрдЦреЗрдВред рдпрджрд┐ рдЯреЛрдЯрд▓реНрд╕ рдЕрд▓рдЧ рд╣реИрдВ рдкрд░ рд╕реИрдВрдкрд▓ рдореИрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбрд┐рд▓реАрдЯреНрд╕ рдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░реНрд╕ рдорд┐рд╕ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред рдпрджрд┐ рд╕реИрдВрдкрд▓ рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдЪреЗрдВрдЬ рдбрд┐рдЯреЗрдХреНрд╢рди рд╣реИрд╢реЗрд╕ рдпрд╛ рдлреАрд▓реНрдб рдореИрдкрд┐рдВрдЧ рд╕рдВрднрд╡рддрдГ рдЧрд▓рдд рд╣реИред

рдЕрд▓рд░реНрдЯреНрд╕ рджреБрд░реНрд▓рдн рдФрд░ actionable рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рд░рд▓ рдирд┐рдпрдо: рддрднреА рдЕрд▓рд░реНрдЯ рдХрд░реЗрдВ рдЬрдм рдХрд┐рд╕реА рдЗрдВрд╕рд╛рди рдХреЛ рдЕрднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреА рд╣реА рдкрдбрд╝реЗред

  • рдХрд░реНрд╕рд░ рдЕрдЯрдХрд╛ рд╣реБрдЖ (end cursor N рд░рди рддрдХ рдирд╣реАрдВ рд╣рд┐рд▓рд╛)
  • рдПрд░рд░ рд░реЗрдЯ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг: 1% тЖТ 5% рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ)
  • рд░рди рдзреАрдореЗ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ (рд╕рдордп рдЖрдкрдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛ рд╕реЗ рдКрдкрд░)
  • backlog рдмрдврд╝ рд░рд╣рд╛ рд╣реИ (рдирдП рдЪреЗрдВрдЬ рдЖ рд░рд╣реЗ рд╣реИрдВ рддреЗрдЬрд╝реА рд╕реЗ рдЬрд┐рддрдирд╛ рдЖрдк рд╕рд┐рдВрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
  • рдбреНрд░рд┐рдлреНрдЯ рдХрдиреНрдлрд╝рд░реНрдо рд╣реБрдЖ (рдЯреЛрдЯрд▓реНрд╕ рджреЛ рдЪреЗрдХ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ mismatch)

рдПрдХ рдлреЗрд▓рд┐рдпрд░ рдХреЗ рдмрд╛рдж рдмрд┐рдирд╛ рдореИрдиреБрдЕрд▓ рдХреНрд▓реАрдирдЕрдк рдХреЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЖрдЦрд┐рд░реА committed рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗ рд░реЗрдЬрд╝реНрдпреВрдо рдХрд░рдирд╛, рди рдХрд┐ рдЖрдЦрд┐рд░реА "рдж█М┌й┌╛реЗ рдЧрдП" рд░рд┐рдХреЙрд░реНрдб рд╕реЗред рдпрджрд┐ рдЖрдк рдПрдХ рдЫреЛрдЯрд╛ overlap рд╡рд┐рдВрдбреЛ рд░рдЦрддреЗ рд╣реИрдВ (рдЖрдЦрд┐рд░реА рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛), рддреЛ рд▓рд┐рдЦрд╛рдЗрдпреЛрдВ рдХреЛ idempotent рд░рдЦреЗрдВ: stable ID рд╕реЗ upsert рдХрд░реЗрдВ, рдФрд░ рдХреЗрд╡рд▓ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдХрд░реНрд╕рд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдБред AppMaster рдореЗрдВ рдЯреАрдореЗрдВ рдЕрдХреНрд╕рд░ рдЗрди рдЪреЗрдХреНрд╕ рдХреЛ Business Process рдлреНрд▓реЛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ рдФрд░ failures рдХреЛ email/SMS рдпрд╛ Telegram рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЬрд░рд┐рдП рдЕрд▓рд░реНрдЯ рднреЗрдЬрддреА рд╣реИрдВ рддрд╛рдХрд┐ рдлреЗрд▓реНрдпреЛрд░ рджреГрд╢реНрдп рд╣реЛрдВ рдмрд┐рдирд╛ рдирд┐рд░рдВрддрд░ рдбреИрд╢рдмреЛрд░реНрдб рджреЗрдЦрдиреЗ рдХреЗред

рд╢рд┐рдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддреНрд╡рд░рд┐рдд рдЪреЗрдХрд▓рд┐рд╕реНрдЯ

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

рдпрд╣рд╛рдБ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░реАтАСрд╢рд┐рдк рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рд╣реИ:

  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрд┐рд╕ рдлреАрд▓реНрдб рдХрд╛ рдЖрдк ordering рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (timestamp, sequence, ID) рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рд╕рд╛рдЗрдб рдкрд░ рдЙрд╕рдХрд╛ index рд╣реИред рдпрджрд┐ рд╡рд╣ рдмрд╛рдж рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдХрд░реНрд╕рд░ drift рдХрд░реЗрдЧрд╛ред
  • рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ upsert key рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде unique рд╣реИ, рдФрд░ рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕реЗ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЯреНрд░реАрдЯ рдХрд░рддреЗ рд╣реИрдВ (case sensitivity, trimming, formatting)ред рдпрджрд┐ рдПрдХ рд╕рд┐рд╕реНрдЯрдо "ABC" рдФрд░ рджреВрд╕рд░рд╛ "abc" рд╕рдВрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд┐рд▓реЗрдВрдЧреЗред
  • рдкреНрд░рддреНрдпреЗрдХ рдЬреЙрдм рдФрд░ рдкреНрд░рддреНрдпреЗрдХ dataset рдХреЗ рд▓рд┐рдП рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдЕрд▓рдЧ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рдПрдХ "global last cursor" рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдкрд░ рдЬреИрд╕реЗ рд╣реА рдЖрдк рджреЛ рдЯреЗрдмрд▓, рджреЛ рдЯреЗрдиреЗрдВрдЯ, рдпрд╛ рджреЛ рдлрд┐рд▓реНрдЯрд░реНрд╕ рд╕рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ рд╕реНрд░реЛрдд eventually consistent рд╣реИ, рддреЛ рдПрдХ рдЫреЛрдЯрд╛ overlap рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝реЗрдВред рдЙрджрд╛рд╣рд░рдг: рдЬрдм рдЖрдк "last_updated = 10:00:00" рд╕реЗ рд░реЗрдЬрд╝реНрдпреВрдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ 09:59:30 рд╕реЗ рдлрд┐рд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ idempotent upserts рдкрд░ рднрд░реЛрд╕рд╛ рд░рдЦреЗрдВ рддрд╛рдХрд┐ repeats рдЗрдЧреНрдиреЛрд░ рд╣реЛрдВред
  • рд╣рд▓реНрдХрд╛ reconciliation рдкреНрд▓рд╛рди рдХрд░реЗрдВ: рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕реИрдВрдкрд▓ рд╕реЗрдЯ (рдЬреИрд╕реЗ 100 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рд┐рдХреЙрд░реНрдб) рд▓реЗрдВ рдФрд░ рдкреНрд░рдореБрдЦ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдзреАрдореА рдбреНрд░рд┐рдлреНрдЯ рдкрдХрдбрд╝реА рдЬрд╛ рд╕рдХреЗред

рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдкрд░реАрдХреНрд╖рдг: рд░рди рдХреЛ рдмреАрдЪ рдореЗрдВ pause рдХрд░реЗрдВ, рдлрд┐рд░ restart рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд╣реА рд░рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ restart рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдЙрдВрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрдирддреА рд╣реИрдВ, рддреЛ рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реЗ рдареАрдХ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк AppMaster рдореЗрдВ рд╕рд┐рдВрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рд░ integration рдлреНрд▓реЛ рдХреЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрд╕реЗрд╕ рдФрд░ dataset рдХреЗ рд╕рд╛рде рдЯрд╛рдИ рд░рдЦреЗрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдСрдЯреЛрдореЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рди рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг: рджреЛ рдРрдкреНрд╕ рдХреЗ рдмреАрдЪ рдЧреНрд░рд╛рд╣рдХ рд░рд┐рдХреЙрд░реНрдб рд╕рд┐рдВрдХ рдХрд░рдирд╛

рдПрдХ рд╕рд╛рдлрд╝ рд╕рд┐рдВрдХ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ
рдкрд╣рд▓реЗ рдПрдХ рдХреНрд▓реАрди рд╕рд┐рдВрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░реЗрдВ, рдлрд┐рд░ рд╡рд╣реА рдкреИрдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдЯреЗрдиреЗрдВрдЯреНрд╕ рдкрд░ рджреЛрд╣рд░рд╛рдПрдБред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░реЗрдВ

рдПрдХ рд╕рд░рд▓ рд╕реЗрдЯрдЕрдк рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рдЖрдкрдХрд╛ CRM рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП source of truth рд╣реИ, рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣реА рд▓реЛрдЧ рдПрдХ рд╕рдкреЛрд░реНрдЯ рдЯреВрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдВ (рддрд╛рдХрд┐ рдЯрд┐рдХрдЯ рдЕрд╕рд▓реА рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдореИрдк рд╣реЛрдВ) рдпрд╛ рдЧреНрд░рд╛рд╣рдХ рдкреЛрд░реНрдЯрд▓ рдореЗрдВ (рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдХрд░рдХреЗ рдЕрдкрдирд╛ рдЕрдХрд╛рдЙрдВрдЯ рджреЗрдЦ рд╕рдХреЗрдВ)ред

рдкрд╣рд▓реЗ рд░рди рдореЗрдВ, рдПрдХ рдПрдХтАСрдмрд╛рд░ рдХреА рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВред рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдСрд░реНрдбрд░ рдореЗрдВ рдЦреАрдВрдЪреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП updated_at рдФрд░ tieтАСbreaker рдХреЗ рд░реВрдк рдореЗрдВ id рдХреЗ рд╕рд╛рдеред рд╣рд░ рдмреИрдЪ рдХреЛ destination рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдЬреИрд╕реЗ: last_updated_at рдФрд░ last_id. рд╡рд╣ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╣рд░ рд░рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рд╢реБрд░реБрдЖрдд рдХреА рд▓рд╛рдЗрди рд╣реЛрдЧрд╛ред

рдСрдирдЧреЛрдЗрдВрдЧ рд░рди рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗ рдирдП рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдлреЗрдЪ рдХрд░реЗрдВред рдЕрдкрдбреЗрдЯреНрд╕ рд╕реАрдзреА рдмрд╛рдд рд╣реИрдВ: рдЕрдЧрд░ CRM рд╕рдВрдкрд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рддреЛ destination рд░рд┐рдХреЙрд░реНрдб рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ; рдпрджрд┐ рдирд╣реАрдВ рд╣реИ рддреЛ рдмрдирд╛рдПрдВред рдорд░реНрдЬреЗрд╕ рдЬрдЯрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред CRMs рдЕрдХреНрд╕рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рдорд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ "winning" рд╕рдВрдкрд░реНрдХ рд░рдЦрддреЗ рд╣реИрдВред рдЙрд╕реЗ рдПрдХ рдЕрдкрдбреЗрдЯ рдорд╛рдиреЗрдВ рдЬреЛ losing рд╕рдВрдкрд░реНрдХ рдХреЛ inactive рдорд╛рд░реНрдХ рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рдЬреЗрддрд╛ рд╕реЗ рдореИрдк рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рднреА рдХрд░реЗ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рджреЛ рдкреЛрд░реНрдЯрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рди рд╣реЛрдВред

рдбрд┐рд▓реАрд╢рдВрд╕ рдЕрдХреНрд╕рд░ рд╕рд╛рдорд╛рдиреНрдп тАЬupdated sinceтАЭ рдХреНрд╡реЗрд░рд┐рдЬрд╝ рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рд╕реНрд░реЛрдд рдореЗрдВ рд╕реЙрдлреНрдЯтАСрдбрд┐рд▓реАрдЯ рдлрд╝реНрд▓реИрдЧ, рдПрдХ рдЕрд▓рдЧ "deleted contacts" рдлрд╝реАрдб, рдпрд╛ рдПрдХ рдЖрд╡рдзрд┐рдХ рд╣рд▓реНрдХрд╛ reconciliation рдЬреЛ рдорд┐рд╕рд┐рдВрдЧ IDs рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗред

рдЕрдм рдлреЗрд▓рд┐рдпрд░ рдХреЗрд╕: рд╕рд┐рдВрдХ рдмреАрдЪ рдореЗрдВ рдХреНрд░реИрд╢ рдХрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд░рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддрд┐тАСрдмреИрдЪ рдПрдХ рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

  • рдПрдХ рд░рди рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдПрдХ run_id рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ (рдЖрдкрдХрд╛ рд░реЗрдЬрд╝реНрдпреВрдо рдЯреЛрдХрди)
  • рдПрдХ рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВ, destination рдореЗрдВ рдмрджрд▓рд╛рд╡ рд▓рд┐рдЦреЗрдВ, рдлрд┐рд░ рдПрдЯреЙрдорд┐рдХ рддрд░реАрдХреЗ рд╕реЗ run_id рд╕реЗ рдЯрд╛рдИ рдХрд┐рдпрд╛ рд╣реБрдЖ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрд╡ рдХрд░реЗрдВ
  • рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдкрд░, рдЙрд╕ run_id рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░реА рд╕реЗрд╡реНрдб рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкрд╣рдЪрд╛рдиреЗрдВ рдФрд░ рд╡рд╣реАрдВ рд╕реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВ

рд╕рдлрд▓рддрд╛ рдмреЛрд░рд┐рдВрдЧ рджрд┐рдЦрддреА рд╣реИ: рдХрд╛рдЙрдВрдЯ рджрд┐рдитАСрдкреНрд░рддрд┐рджрд┐рди рд╕реНрдерд┐рд░ рд░рд╣рддреЗ рд╣реИрдВ, рд░рдирдЯрд╛рдЗрдо рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рд╡рд┐рдВрдбреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдХреЛрдИ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддреЗред

рдЕрдЧрд▓реЗ рдХрджрдо: рдПрдХ рдкреИрдЯрд░реНрди рдЪреБрдиреЗрдВ рдФрд░ рдХрдо рд░реАрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВ

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

рдЫреЛрдЯрд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрдХ dataset рдЪреБрдиреЗрдВ (рдЬреИрд╕реЗ customers) рдФрд░ рдЗрд╕реЗ endтАСtoтАСend рдЪрд▓рд╛рдПрдБ: рдЗрдирд┐рд╢рд┐рдпрд▓ рдЗрдореНрдкреЛрд░реНрдЯ, рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рдЕрдкрдбреЗрдЯреНрд╕, рдбрд┐рд▓реАрдЯреНрд╕, рдФрд░ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдлреЗрд▓рд┐рдпрд░ рдХреЗ рдмрд╛рдж рд░реЗрдЬрд╝реНрдпреВрдоред рдЕрдм рдХреА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЛ рдмрд╛рдж рдореЗрдВ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдмрдирд┐рд╕реНрдмрдд рддрдм рдЬрдм рдЖрдкрдиреЗ рдкрд╛рдБрдЪ рдФрд░ рдЯреЗрдмрд▓ рдЬреЛрдбрд╝ рд▓рд┐рдП рд╣реЛрдВред

рдлреБрд▓ рд░реАтАСрдмрд┐рд▓реНрдб рдХрднреАтАСрдХрднреА рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред рддрдм рдХрд░реЗрдВ рдЬрдм рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдЯреЗрдЯ рдХрд░рдкреНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реЛ, identifiers рдмрджрд▓реЗ рдЧрдП рд╣реЛрдВ, рдпрд╛ рдХреЛрдИ schema рдмрджрд▓рд╛рд╡ рдЖрдкрдХреА рдЪреЗрдВрдЬ рдбрд┐рдЯреЗрдХреНрд╢рди рддреЛрдбрд╝ рджреЗ (рдЙрджрд╛рд╣рд░рдг: рдЖрдкрдиреЗ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдлреАрд▓реНрдбреНрд╕ рдХрд╛ рдорддрд▓рдм рдмрджрд▓ рдЧрдпрд╛)ред рдЕрдЧрд░ рдЖрдк рдлрд┐рд░ рд╕реЗ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдСрдкрд░реЗрд╢рди рдорд╛рдиреЗрдВ, рдЗрдорд░рдЬреЗрдВрд╕реА рдмрдЯрди рдирд╣реАрдВред

рдпрд╣рд╛рдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИ рдмрд┐рдирд╛ рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХреЗ рд░реАтАСрдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛:

  • рдПрдХ shadow рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рдкреИрд░рд▓рд▓ dataset рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ, рд╡рд░реНрддрдорд╛рди рд╡рд╛рд▓реЗ рдХреЛ рд▓рд╛рдЗрд╡ рдЫреЛрдбрд╝ рджреЗрдВред
  • рдХрд╛рдЙрдВрдЯреНрд╕ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╕реИрдВрдкрд▓ рд╕реНрдкреЙрдЯтАСрдЪреЗрдХреНрд╕ рдХрд░реЗрдВ, рдХрд┐рдирд╛рд░реЗ рдХреЗ рдХреЗрд╕реНрд╕ рднреА рджреЗрдЦреЗрдВ (nulls, merged records)ред
  • рд░рд┐рд╢реНрддреЛрдВ рдХреЛ рдмреИрдХрдлрд┐рд▓ рдХрд░реЗрдВ, рдлрд┐рд░ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдХрдЯрдУрд╡рд░ рдореЗрдВ рд░реАрдбрд░реНрд╕ рдХреЛ рдирдП dataset рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред
  • рдкреБрд░рд╛рдиреЗ dataset рдХреЛ рдереЛрдбрд╝реЗ рд░реЛрд▓рдмреИрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рд░рдЦреЗрдВ, рдлрд┐рд░ рд╕рд╛рдлрд╝ рдХрд░реЗрдВред

рдЕрдЧрд░ рдЖрдк рдмрд┐рдирд╛ рдХреЛрдб рд▓рд┐рдЦреЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ AppMaster рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ: Data Designer рдореЗрдВ PostgreSQL рдореЗрдВ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд░реЗрдВ, Business Process Editor рдореЗрдВ рд╕рд┐рдВрдХ рдирд┐рдпрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдФрд░ рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдмреНрд╕ рдЪрд▓рд╛рдПрдБ рдЬреЛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдЦреАрдВрдЪреЗрдВ, рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд░реЗрдВ рдФрд░ upsert рдХрд░реЗрдВред AppMaster рдЬрдм requirements рдмрджрд▓рддреА рд╣реИрдВ рддреЛ рдХреНрд▓реАрди рдХреЛрдб regenerate рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ "рд╣рдореЗрдВ рдПрдХ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдиреА рд╣реИ" рдХрдо рдЬреЛрдЦрд┐рдо рд╡рд╛рд▓рд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред

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

рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╕рд╛рди
рдХреБрдЫ рдмрдирд╛рдПрдВ рдЕрджреНрднреБрдд

рдлреНрд░реА рдкреНрд▓рд╛рди рдХреЗ рд╕рд╛рде рдРрдкрдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред
рдЬрдм рдЖрдк рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ рддрдм рдЖрдк рдЙрдЪрд┐рдд рд╕рджрд╕реНрдпрддрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ
рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЗрдирдХреНрд░реАрдореЗрдВрдЯрд▓ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХ: рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ | AppMaster