рдореИрдВ рдиреЗ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдЗрддрдирд╛ рднрд░реЛрд╕реЗрдордВрдж рдЖрдзрд╛рд░ рд╣реИ, рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рдЕрдкрдиреА рд╣реА рдмрд╛рдд рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛/рд░рд╣реА рд╣реВрдБред рдореИрдВ рдЕрдм рднреА рдорд╛рдирддрд╛/рдорд╛рдирддреА рд╣реВрдБ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдХреАрдорд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдирд▓ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрди рдЪреБрдирд┐рдВрджрд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬрд╣рд╛рдБ рд╕рдЦреНрдд рдиреЙрд░реНрдорд▓ рдлреЙрд░реНрдо рд╕реЗ рдЕрдзрд┐рдХ рд░реАрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ рдФрд░ рд╣рдо рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрд╕ рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд╛рддреЗ рд╣реИрдВред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рдкрд░ рддрдм рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╡реЗрд░реА, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ SLA рдпрд╣ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬреЙрдЗрди рдФрд░ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдХреИрд▓рдХреБрд▓реЗрд╢рдВрд╕ рдмрд╣реБрдд рдзреАрдореЗ рдпрд╛ рдорд╣рдВрдЧреЗ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рддреЗрдЬ рд░реАрдб рдФрд░ рд╕рд░рд▓ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЗ рдмрджрд▓реЗ рдЕрдзрд┐рдХ рд╕реНрдЯреЛрд░реЗрдЬ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд░рд╛рдЗрдЯреНрд╕ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдХрд╛рд░реНрдп рд▓реЗрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдБрдЧрд╛/рджрд┐рдЦрд╛рдКрдБрдЧреА рдХрд┐ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╣рд╛рдБ рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдХрд╣рд╛рдБ рдирд╣реАрдВ, рдФрд░ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЙрджреНрджреЗрд╢реНрдп рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЬрдм рд╡рд░реНрдХрд▓реЛрдб рдЬрд╛рдпрдЬрд╝ рдард╣рд░рд╛рдП рддреЛ рдЙрд╕рдХреЗ рдКрдкрд░ рд╢реЙрд░реНрдЯрдХрдЯреНрд╕ рдХреА рдкрд░рдд рдЪрдврд╝рд╛рдирд╛ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреНрдпрд╛ рд╣реИ?
рдпрджрд┐ рдЖрдк рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ рдпрд╣ рд╣реИ:┬а
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдкрд╣рд▓реЗ рд╕реЗ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдХреАрдорд╛ рдореЗрдВ рд░реАрдб рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдФрд░ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рджреЛрд╣рд░рд╛рд╡ (рд░реЗрдбрдВрдбреЗрдВрд╕реА) рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдпрд╣ рд▓рдХреНрд╖рд┐рдд рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рдЕрдЪреНрдЫреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдмрд╣рд╛рдирд╛ рдирд╣реАрдВ!
рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ тАЬрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдбтАЭ, тАЬрдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдбтАЭ рдФрд░ тАЬрдЕрдирдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдбтАЭ рдХреЗ рдЕрд░реНрде рдХреЛ рдЦреЛрд▓рдХрд░ рд╕рдордЭрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдпреЗ 3 рд╢рдмреНрдж рдСрдирд▓рд╛рдЗрди рдЕрдХреНрд╕рд░ рд╕реБрдирд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
Normalized: рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рдмрд╛рдБрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ 3NF/BCNF ).
Denormalized: рдЖрдк рдЙрд╕реА рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рдХреЗ рдКрдкрд░ рдЪреБрдирд┐рдВрджрд╛ рд░реЗрдбрдВрдбреЗрдВрд╕реА рджреЛрдмрд╛рд░рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВтАФрдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдо, рдкреВрд░реНрд╡-рдЧрдгрд┐рдд рдорд╛рди, рдпрд╛ рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб рдЯреЗрдмрд▓реНрд╕тАФрддрд╛рдХрд┐ рдЖрдо рд░реАрдб рддреЗрдЬ рд╣реЛрдВред рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ, рдЖрдк рдПрдХрд▓ рд╕реНрд░реЛрдд-рд╕рддреНрдп (рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯреЗрдмрд▓реНрд╕) рд░рдЦрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣реЙрдЯ рдкрд╛рдереНрд╕ рдЬреИрд╕реЗ рдбреИрд╢рдмреЛрд░реНрдб, рдкреНрд░реЛрдбрдХреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ, рд╕рд░реНрдЪ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ + рд░рд╛рдЗрдЯ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрджрд▓реЗ рд░реАрдб рд╕реНрдкреАрдб + рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рд▓реЗрддреЗ рд╣реИрдВред
Unnormalized: рдХрдЪреНрдЪрд╛, рдПрдб-рд╣реЙрдХ рдпрд╛ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ рдбреЗрдЯрд╛ рдЬрд╣рд╛рдБ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдмрд╛рдзрд╛рдПрдБ рдареАрдХ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рд╣реБрдИрдВред рд╣рдо рдпрд╣рд╛рдБ рдпрд╣ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
SQL рдореЗрдВ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдБ SQL рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдФрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рджреГрд╢реНрдп рдмрдирд╛рддрд╛ рд╣реИред
Normalized modelling
CREATE TABLE customers (
customer_id BIGINT PRIMARY KEY ,
name TEXT NOT NULL ,
tier TEXT NOT NULL
) ;
CREATE TABLE orders (
order_id BIGINT PRIMARY KEY ,
customer_id BIGINT NOT NULL REFERENCES customers( customer_id) ,
order_total NUMERIC ( 12 , 2 ) NOT NULL ,
created_at TIMESTAMP NOT NULL DEFAULT now ( )
) ;
SELECT c. name, c. tier, SUM ( o. order_total) AS revenue
FROM orders o
JOIN customers c ON c. customer_id = o. customer_id
GROUP BY c. name, c. tier; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкрд╛рде рдХреЗ рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб
ALTER TABLE orders
ADD COLUMN customer_name TEXT ,
ADD COLUMN customer_tier TEXT ;
SELECT customer_name, customer_tier, SUM ( order_total) AS revenue
FROM orders
GROUP BY customer_name, customer_tier; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк customers рдХреЛ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рд░рдЦреЗрдВрдЧреЗ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ orders.customer_name / orders.customer_tier рд╕рд┐рдВрдХ рдореЗрдВ рдмрдиреЗ рд░рд╣реЗрдВ (рдЬреИрд╕реЗ, рдЯреНрд░рд┐рдЧрд░, CDC рдЬреЙрдм, рдпрд╛ рд╢реЗрдбреНрдпреВрд▓реНрдб рдмреИрдХрдлрд┐рд▓)ред рд╡рд╣реА рд╕рддреНрдп, рджреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡тАФрд╣рд░ рдПрдХ рдЕрд▓рдЧ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдбред
рдХреНрдпрд╛ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ?
рдПрдХ рдЖрдо рдЧрд▓рддрдлрд╣рдореА рд╣реИ рдХрд┐ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдирддреАрдЬрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╛рдкрд╛-рддреМрд▓рд╛, рд╕реАрдорд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рдФрд░ рдореЗрдВрдЯреЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рдБ, рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдХреНрд╕рд░ рдЙрдЪреНрдЪрддрд░ рдиреЙрд░реНрдорд▓ рдлреЙрд░реНрдореНрд╕ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ (рдпрд╣реА рдЙрджреНрджреЗрд╢реНрдп рд╣реИ), рдкрд░ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдпрд╛ рдмрд┐рдирд╛ рд╕рд┐рдВрдХ рд░рдгрдиреАрддрд┐ рдХреЗ рдмреЗрддрд░рддреАрдм рд░реЗрдбрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рдирд╛ред
рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╣рдорд╛рд░рд╛ рд╢реБрд░реБрдЖрддреА рдХреЛрд░реНрд╕ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ!
Normalization рдмрдирд╛рдо Denormalization
рдпрд╣рд╛рдБ рд╕рд╛рдЗрдб-рдмрд╛рдп-рд╕рд╛рдЗрдб рддреБрд▓рдирд╛ рд╣реИред рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЯреНрд░реЗрдб-рдСрдл рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред
рдкрд╣рд▓реВ
Normalization
Denormalization
рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп
рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА, рдиреНрдпреВрдирддрдо рд░реЗрдбрдВрдбреЗрдВрд╕реА, рдЖрд╕рд╛рди рдФрд░ рд╕рд╣реА рдЕрдкрдбреЗрдЯ
рддреЗрдЬрд╝ рд░реАрдб, рд╣реЙрдЯ рдкрд╛рдереНрд╕ рдкрд░ рд╕рд░рд▓ рдХреНрд╡реЗрд░реА
рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░
рдмрд╛рд░рдВрдмрд╛рд░ рд░рд╛рдЗрдЯ/рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ OLTP рд╕рд┐рд╕реНрдЯрдо
рд░реАрдб-рд╣реЗрд╡реА рдбреИрд╢рдмреЛрд░реНрдб, рд╕рд░реНрдЪ/рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреЗрдЬ, рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ/рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕
рд░реАрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕
рдЕрдХреНрд╕рд░ рдЬреЙрдЗрди рдХреА рдЬрд░реВрд░рдд, рд╕рд╣реА рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛
рдХрдо рдЬреЙрдЗрди, рдмрд╣реБрдд рддреЗрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд░рд╛рдЗрдЯ рдЬрдЯрд┐рд▓рддрд╛
рд╕рд░рд▓: рдПрдХрд▓ рд╕реНрд░реЛрдд-рд╕рддреНрдп
рдЕрдзрд┐рдХ: рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрдкреА рдпрд╛ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдЕрдкрдбреЗрдЯ/рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдкрдбрд╝рддреЗ рд╣реИрдВ
рд╕реНрдЯреЛрд░реЗрдЬ
рд╣рд▓реНрдХрд╛
рдмрдбрд╝рд╛ (рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдо/рдЯреЗрдмрд▓реНрд╕, рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯреЗрдб рд╡реНрдпреВрдЬрд╝)
рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА
рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рдордЬрдмреВрдд (3NF/BCNF рдмрд╛рдзрд╛рдПрдБ)
рдбреНрд░рд┐рдлреНрдЯ рд░реЛрдХрдиреЗ рдХреЗ рддрдВрддреНрд░ рдЪрд╛рд╣рд┐рдП (рдЯреНрд░рд┐рдЧрд░реНрд╕, CDC, рдЬреЙрдмреНрд╕)
рдкрд░рд┐рд╡рд░реНрддрди рдЧрддрд┐
рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо/рдЕрдкрдбреЗрдЯ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░рд╣рддреЗ рд╣реИрдВ
рдкрд░рд┐рд╡рд░реНрддрди рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбреЗрдЯрд╛ рдореЗрдВ рдлреИрд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдСрдкрд░реЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб
рдХрдо: рдХрдо рдореВрд╡рд┐рдВрдЧ рдкрд╛рд░реНрдЯреНрд╕
рдЬреНрдпрд╛рджрд╛: рд░рд┐рдлреНрд░реЗрд╢ рдкреЙрд▓рд┐рд╕реА, рдмреИрдХрдлрд┐рд▓, рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ
рд╡рд┐рдлрд▓рддрд╛ рдореЛрдб
N+1 рдХреНрд╡реЗрд░реАрдЬрд╝, рдзреАрдореЗ рдЬреЙрдЗрдиреНрд╕, рдорд┐рд╕рд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕
рд╕реНрдЯреЗрд▓ рдбреЗрдЯрд╛, рдЕрд╕рдВрдЧрддрд┐, рд░рд╛рдЗрдЯ рдРрдореНрдкреНрд▓реАрдлрд┐рдХреЗрд╢рди
рд╕реНрдХреАрдорд╛ рдЙрддреНрдХреНрд░рд╛рдВрддрд┐
рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп, рд░рд┐рдлреИрдХреНрдЯрд░-рдлреНрд░реЗрдВрдбрд▓реА
рд░реЗрдбрдВрдбреЗрдВрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдпреЛрдЬрдирд╛рдПрдБ рдЪрд╛рд╣рд┐рдП
рдЯрд┐рдкрд┐рдХрд▓ рдЙрджрд╛рд╣рд░рдг
рдСрд░реНрдбрд░реНрд╕, рдХрд╕реНрдЯрдорд░реНрд╕, рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕
рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб рдкреНрд░реЛрдбрдХреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ; рдПрдЧреНрд░реАрдЧреЗрдЯ рд╕реЗрд▓реНрд╕ рдЯреЗрдмрд▓реНрд╕; рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб/рдЗрдВрдбреЗрдХреНрд╕реНрдб рд╡реНрдпреВрдЬрд╝
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХреНрдпреЛрдВ рдФрд░ рдХрдм рдХрд░реЗрдВ
рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╡реЗрд░реА рдЬреЙрдЗрдиреНрд╕, рдПрдЧреНрд░реАрдЧреЗрд╢рдВрд╕ рдпрд╛ рдмрд╛рд░рдВрдмрд╛рд░ рд▓реБрдХрдЕрдкреНрд╕ рдХреЗ рдХрд╛рд░рдг рдмрд╛рдзрд┐рдд рд╣реЛрдВ, рддрдм рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдЪрдореБрдЪ рдЙрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓реЗрдВ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ, рдХреНрд╡реЗрд░реА рдЯреНрдпреВрдирд┐рдВрдЧ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддрдм рдЖрдк рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдПрдХреНрд╕реЗрд╕ рдкреИрдЯрд░реНрдиреНрд╕ рдкрд░ рддреЗрдЬрд╝ рд░реАрдб рдХреЗ рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдЬрдм рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рд░реАрдб-рд╣реЗрд╡реА рд╡рд░реНрдХрд▓реЛрдбреНрд╕ : p95/p99 рд▓реИрдЯреЗрдВрд╕реА рдЬреЙрдЗрди рдпрд╛ рдПрдЧреНрд░реАрдЧреЗрд╢рди рд╕реЗ рд╣рд╛рд╡реА, CPU рд╣реИрд╢/рдорд░реНрдЬ рдЬреЙрдЗрди рдкрд░ рдЦрд░реНрдЪ, рдЙрдЪреНрдЪ рдмрдлрд░ рдХреИрд╢ рдЪрд░реНрдиред
рд╕реНрдерд┐рд░ рдХреНрд╡реЗрд░реА рдЖрдХрд╛рд░ : рд╡рд╣реА рдбреИрд╢рдмреЛрд░реНрдбреНрд╕/рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рджрд┐рдирднрд░ рд╕рдорд╛рди рдлрд╝рд┐рд▓реНрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ (рдЙрджрд╛., рдХрд▓ рдХреА рдмрд┐рдХреНрд░реА рд╢реНрд░реЗрдгреАрд╡рд╛рд░)ред
рдлреИрди-рдЖрдЙрдЯ рдЬреЙрдЗрдиреНрд╕ : рдПрдХ рд╣реЙрдЯ рдЯреЗрдмрд▓ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдб рдпрд╛ рд▓рд┐рд╕реНрдЯ рд╡реНрдпреВ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 3тАУ5 рдЕрдиреНрдп рдЯреЗрдмрд▓реНрд╕ рд╕реЗ рдЬреЙрдЗрди рдХрд░рддреА рд╣реИред
рдПрдЧреНрд░реАрдЧреЗрд╢рди рд╣реЙрдЯрд╕реНрдкреЙрдЯреНрд╕ : рдЖрдк рдмрд╛рд░-рдмрд╛рд░ рдмрдбрд╝реЗ рд░реЗрдВрдЬ рдкрд░ рдЯреЛрдЯрд▓, рдХрд╛рдЙрдВрдЯ рдпрд╛ рд▓реЗрдЯреЗрд╕реНрдЯ рд╡реИрд▓реНрдпреВ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
SLA рдХрд╛ рджрдмрд╛рд╡ : рдкреНрд░реЛрдбрдХреНрдЯ рдХреЛ 200 ms рд╕реЗ рдХрдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдЪрд╛рд╣рд┐рдП рдЬрдмрдХрд┐ рдореМрдЬреВрджрд╛ рдкреНрд▓рд╛рди рдбрд┐рд╕реНрдХ рдкрд░ рд╕реНрдкрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдмрд╣реБрдд рд╕реНрдХреИрди рдХрд░рддреЗ рд╣реИрдВред
рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ
рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ BI рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ (OLAP/рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕) : рд░реЛрдЬрд╝рд╛рдирд╛/рдорд╛рд╕рд┐рдХ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯ рдХрд░реЗрдВ, рдорд╣рдВрдЧреЗ рдЧреНрд░реБрдк-рдмрд╛рдИ рдХреЗ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ рд░рдЦреЗрдВ, рдпрд╛ рдЖрдо рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдлреИрдХреНрдЯ рдЯреЗрдмрд▓реНрд╕ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред
рдИ-рдХреЙрдорд░реНрд╕/рдХреИрдЯрд▓реЙрдЧ рдФрд░ рд╕рд░реНрдЪ/рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреЗрдЬ : рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реЗрдВ category_name , brand_name , price_with_tax , рдпрд╛ рддреЗрдЬрд╝ рд▓рд┐рд╕реНрдЯ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб рдкреНрд░реЛрдбрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрд╢рдиред
CMS/рдмреНрд▓реЙрдЧ/рдиреНрдпреВрдЬрд╝ рдлреАрдбреНрд╕ : рдЖрд░реНрдЯрд┐рдХрд▓/рдкреЛрд╕реНрдЯ рдЯреЗрдмрд▓ рдкрд░ author_name , primary_topic , рдпрд╛ rendered_excerpt рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЬреЙрдЗрдиреНрд╕ рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рд╕реЗ рдмрдЪреЗрдВред
рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдлреАрдбреНрд╕ рдФрд░ рдХрд╛рдЙрдВрдЯрд░реНрд╕ : рдмрд╛рд░-рдмрд╛рд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп like_count , follower_count, рдпрд╛ latest_comment_at рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВред
рдЗрд╡реЗрдВрдЯ/рд▓реЙрдЧ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдРрдЯ рд╕реНрдХреЗрд▓ (OLAP/NoSQL) : рдХреЙрд▓рдордирд░ рд╕реНрдЯреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЛ рдлреНрд▓реИрдЯрди рдХрд░реЗрдВ рдФрд░ рдкрд╛рд░реНрдЯрд┐рд╢рди-рдлреНрд░реЗрдВрдбрд▓реА рд╡рд╛рдЗрдб рд░реЛ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рд╕реНрдХреИрди рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд░рд╣реЗрдВред
рдХрдм рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рди рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдХреБрдЫ рдФрд░ рдЕрдкрдирд╛рдПрдБ
рд╕рдЦреНрдд рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рд╡рд╛рд▓реЗ рд░рд╛рдЗрдЯ-рд╣реЗрд╡реА OLTP (рдСрд░реНрдбрд░реНрд╕, рдкреЗрдореЗрдВрдЯреНрд╕, рдЗрдиреНрд╡реЗрдВрдЯрд░реА рдПрдбрдЬрд╕реНрдЯрдореЗрдВрдЯреНрд╕)ред
рдмреЙрдЯрд▓рдиреЗрдХ рдорд┐рд╕рд┐рдВрдЧ/рдЦрд░рд╛рдм рдЗрдВрдбреЗрдХреНрд╕, N+1 рдХреНрд╡реЗрд░реАрдЬрд╝, рдпрд╛ рд╢реЛрд░-рд╢рд░рд╛рдмреЗ рд╡рд╛рд▓рд╛ ORM рд╣реИред рдкрд╣рд▓реЗ рдЗрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░реЗрдВред
рдЙрдЪреНрдЪ-рд╡реЛрд▓реЗрдЯрд┐рд▓рд┐рдЯреА рдлреАрд▓реНрдбреНрд╕ (рдЙрджрд╛., рдкреНрд░реЛрдбрдХреНрдЯ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╣рд░ рд╕реЗрдХрдВрдб рдмрджрд▓рддреА) рдЬрд╣рд╛рдБ рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдЪрд░реНрди рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЯреАрдореЗрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рдУрдирд░рд╢рд┐рдк рдФрд░ рд╕рд┐рдВрдХ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ (рдЯреНрд░рд┐рдЧрд░реНрд╕, CDC/рдЬреЙрдмреНрд╕, рд░рд┐рдлреНрд░реЗрд╢ рдкреЙрд▓рд┐рд╕реА, рдбреНрд░рд┐рдлреНрдЯ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ)ред рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЖрдк рд▓рд╛рдн рд╕реЗ рдЕрдзрд┐рдХ рд╣рд╛рдирд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рдбреЗрдЯрд╛рд╕реЗрдЯ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрд╡рд░рд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ рдХреИрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рддреЗрдЬ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред
рдЖрдк рд╕рдЪ рдореЗрдВ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд╣реАрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдпрд╣ рд╕рдмрд╕реЗ рдХрдо рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рдирд▓ рдмреЛрдЭ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рд░реАрдб рд╕реНрдкреАрдб рджреЗрддрд╛ рд╣реИтАФрдФрд░ рдХреЗрд╡рд▓ рддрдм, рдЬрдм рд╕рд╕реНрддреЗ рдЙрдкрд╛рдп рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдБред
рдпрджрд┐ рдЖрдкрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд░реБрдХреЗрдВ! рдЕрдЧрд▓реЗ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╣рдо рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдкрдбрд╝рддрд╛рд▓ рдХрд░реЗрдВрдЧреЗред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╡рд┐рдХрд▓реНрдк
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣рд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд░реЗрдбрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрдВрдЬрди рдФрд░ рдЕрдкрдиреА рдРрдк рд╕реЗ рд╣рд░ рд╕рдВрднрд╡ рдкреНрд░рджрд░реНрд╢рди рдирд┐рдХрд╛рд▓реЗрдВред рдпреЗ рд╕реБрдзрд╛рд░ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╕реНрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рд╡рд╣реА рд▓рд╛рдн рджреЗ рджреЗрддреЗ рд╣реИрдВред
1) рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ
рдХрдореНрдкреЛрдЬрд╝рд┐рдЯ/рдХрд╡рд░рд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝: рдЕрдкрдиреА SQL рдХреНрд╡реЗрд░реАрдЬрд╝ рдореЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЙрд▓рдо рдкрд╣рд▓реЗ рд░рдЦреЗрдВ, рдлрд┐рд░ GROUP BY/ORDER BY рдХреЙрд▓рдоред рдореИрдВ рд╕реЗрд▓реЗрдХреНрдЯ-рд▓рд┐рд╕реНрдЯ рдХреЙрд▓рдо рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛/рдХрд░рддреА рд╣реВрдБ рддрд╛рдХрд┐ рдЗрдВрдЬрди рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдХреНрд╡реЗрд░реА рд╕рд░реНрд╡ рдХрд░ рд╕рдХреЗред
рдлрд╝рд┐рд▓реНрдЯрд░реНрдб/рдкрд╛рд░реНрд╢рд┐рдпрд▓ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝: рд╕рд┐рд░реНрдл рд╣реЙрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░реЗрдВ (рдЙрджрд╛., status = 'ACTIVE' ), рддрд╛рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдЫреЛрдЯрд╛ рдФрд░ рддреЗрдЬрд╝ рд░рд╣реЗред
рдПрдХреНрд╕рдкреНрд░реЗрд╢рди/рдлрдВрдХреНрд╢рдирд▓ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝: LOWER(email) рдпрд╛ date_trunc('day', created_at) рдкрд░ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдПрдБ рддрд╛рдХрд┐ рдХрдВрдкреНрдпреВрдЯреЗрдб рд╕реНрдХреИрди рд╕реЗ рдмрдЪреЗрдВред
2) рдХреНрд╡реЗрд░реА рдЯреНрдпреВрдирд┐рдВрдЧ рдФрд░ рдкреЗрдЬрд┐рдиреЗрд╢рди
SELECT * рд╕реЗ рдмрдЪреЗрдВред рдХреЗрд╡рд▓ рд╡рд╣реА рдлрд╝реЗрдЪ рдХрд░реЗрдВ рдЬреЛ рдЖрдк рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
рдЬрд╣рд╛рдБ рдХреЗрд╡рд▓ рдЙрдкрд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪрдирд╛ рд╣реЛ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬреЙрдЗрди рдХреЛ EXISTS/SEMI рд╕реЗ рдмрджрд▓реЗрдВред
рдкреНрд░реЗрдбрд┐рдХреЗрдЯреНрд╕ рдиреАрдЪреЗ рдзрдХреЗрд▓реЗрдВ: рдкрд╣рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ, рдмрд╛рдж рдореЗрдВ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХрд░реЗрдВред
рд╕реНрдерд┐рд░, рддреЗрдЬрд╝ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреА-рд╕реЗрдЯ рдкреЗрдЬрд┐рдиреЗрд╢рди рдЕрдкрдирд╛рдПрдБ (WHERE created_at < ? ORDER BY created_at DESC LIMIT 50)ред
3) рдХреИрд╢рд┐рдВрдЧ
рд╣реЙрдЯ рдХреНрд╡реЗрд░реАрдЬрд╝ рдФрд░ рд░реЗрдВрдбрд░реНрдб рдлреНрд░реИрдЧрдореЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╢ (рдЬреИрд╕реЗ, Redis) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдкрдмреНрд▓рд┐рдХ рдкреЗрдЬ рдФрд░ рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП HTTP рдХреИрд╢рд┐рдВрдЧ (ETag/Last-Modified) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХрдо-рдЬреАрд╡рди рд╡рд╛рд▓реЗ рдХреИрд╢ (30тАУ120 рд╕реЗрдХрдВрдб) рдЕрдХреНрд╕рд░ рд╕реНрдХреАрдорд╛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдЦрддреНрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВред
4) рд░реАрдб рд░рд┐рдкреНрд▓рд┐рдХрд╛рдЬрд╝
рднрд╛рд░реА рд░реАрдбреНрд╕ рдХреЛ рд░рд┐рдкреНрд▓рд┐рдХрд╛рдЬрд╝ рдкрд░ рдСрдлрд╝рд▓реЛрдб рдХрд░реЗрдВред рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ рдПрдХреНрд╕рдкреЛрд░реНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ред
5) рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рдФрд░ рдкреНрд░реВрдирд┐рдВрдЧ
рдмрдбрд╝реА рдЯреЗрдмрд▓реНрд╕ рдХреЛ рд░реЗрдВрдЬ/рд╣реИрд╢ рдкрд╛рд░реНрдЯрд┐рд╢рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рд╕реНрдХреИрди рдХреЗрд╡рд▓ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд╛рд░реНрдЯрд┐рд╢рдиреНрд╕ рдХреЛ рдЫреБрдПрдБ (рдЙрджрд╛., рдкрд┐рдЫрд▓реЗ 30 рджрд┐рди)ред рдпрд╣ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдХреИрди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдШрдЯрд╛рдирд╛ рд╣реИред
6) рдХреЙрд▓рдордирд░/OLAP рд╕реНрдЯреЛрд░реНрд╕
рднрд╛рд░реА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЛ Snowflake/BigQuery/ClickHouse рдкрд░ рднреЗрдЬреЗрдВ (ELT/dbt рдХреЗ рдЬрд░рд┐рдП)ред OLTP рдХреЛ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд░рдЦреЗрдВ рдФрд░ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЛ рдЪреМрдбрд╝реЗ, рд╕реНрдХреИрди-рдлреНрд░реЗрдВрдбрд▓реА рдЖрдХрд╛рд░ рд╕рдБрднрд╛рд▓рдиреЗ рджреЗрдВред
7) ORM рд╕реНрд╡рдЪреНрдЫрддрд╛
N+1 рдХреНрд╡реЗрд░реАрдЬрд╝ рд╣рдЯрд╛рдПрдБ (рдИрдЧрд░-рд▓реЛрдб рдпрд╛ рдмреИрдЪ), рд╕рдордЭрджрд╛рд░реА рднрд░реА рд╕реЗрд▓реЗрдХреНрдЯ рд▓рд┐рд╕реНрдЯреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдкреЗрдЬ рд╕рд╛рдЗрдЬрд╝ рд╕реАрдорд┐рдд рдХрд░реЗрдВред рдПрдХ рд╕рд╛рдл ORM рд▓реЗрдпрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЬрд░реВрд░рдд рдЦрддреНрдо рдХрд░ рд╕рдХрддреА рд╣реИред
8) рдХрдВрдкреНрдпреВрдЯреЗрдб/рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдо (DB-рдореЗрдВрдЯреЗрдиреНрдб)
рдбреЗрд░рд╛рдЗрд╡реНрдб рд╡реИрд▓реНрдпреВрдЬрд╝ (рдЙрджрд╛., price_with_tax) DB рд╕реЗ рдЬрдирд░реЗрдЯреЗрдб/рдХрдВрдкреНрдпреВрдЯреЗрдб рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рдХреЗ рдЬрд░рд┐рдП рдореЗрдВрдЯреЗрди рдХрд░рд╡рд╛рдПрдБред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдРрдк-рд▓реЗрд╡рд▓ рд╕рд┐рдВрдХ рд▓реЙрдЬрд┐рдХ рдХреЗ рдмрд┐рдирд╛ рддреЗрдЬрд╝ рд░реАрдб рдорд┐рд▓реЗрдВрдЧреЗред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рддрдХрдиреАрдХреЗрдВ
рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдЖрдо рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рд░реЗрдбрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рд░ рдПрдХ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмрддрд╛рдКрдБрдЧрд╛/рдмрддрд╛рдКрдБрдЧреА рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рд╕рд┐рдВрдХ рдХреИрд╕реЗ рд░рдЦреЗрдВред
рд╕реЗрдЯрдЕрдк: рдорд╛рди рд▓реЗрдВ рдХрд┐ рдХреЛрд░ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╣реИтАФ customers, orders, order_items, products.
1) рдлреНрд▓реИрдЯреЗрдВрдб / рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб тАЬрдкреНрд░реЛрдЬреЗрдХреНрд╢рдитАЭ рдЯреЗрдмрд▓реНрд╕
рдХреНрдпрд╛: рдПрдХ рдРрд╕реА рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВ рдЬреЛ рддреЗрдЬрд╝ рд░реАрдб рдХреЗ рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рдХреЙрд▓рдореНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЙрдЗрди рдХрд░ рджреЗ (рдЙрджрд╛., рдкреНрд░реЛрдбрдХреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдпрд╛ рдСрд░реНрдбрд░реНрд╕ рдбреИрд╢рдмреЛрд░реНрдб)ред
рдХрдм: рдЖрдкрдХрд╛ рд╣реЙрдЯ рдкрд╛рде 3 рд╕реЗ 5 рдЯреЗрдмрд▓реНрд╕ рдХреЛ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЬреЙрдЗрди рдХрд░рддрд╛ рд╣реИред
рдХреИрд╕реЗ (PostgreSQL):
CREATE TABLE orders_projection (
order_id BIGINT PRIMARY KEY ,
created_day DATE NOT NULL ,
customer_id BIGINT NOT NULL ,
customer_name TEXT NOT NULL ,
total_amount NUMERIC ( 12 , 2 ) NOT NULL
) ;
INSERT INTO orders_projection ( order_id, created_day, customer_id, customer_name, total_amount)
SELECT o. order_id,
o. created_at::date AS created_day,
c. customer_id,
c. name AS customer_name,
SUM ( oi. quantity * oi. unit_price) AS total_amount
FROM orders o
JOIN customers c ON c. customer_id = o. customer_id
JOIN order_items oi ON oi. order_id = o. order_id
GROUP BY o. order_id, created_day, c. customer_id, c. name;
CREATE INDEX ON orders_projection ( created_day, customer_id) ; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд╕рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк:
рд░рд╛рдЗрдЯ рдХреЗ рдмрд╛рдж рдЬреЙрдм ("order.updated" рдПрдирдХреНрдпреВ рдХрд░реЗрдВ тЖТ рдкрдВрдХреНрддрд┐ рдлрд┐рд░ рд╕реЗ рдХрдореНрдкреНрдпреВрдЯ рдХрд░реЗрдВ)
рдирд╛рдЗрдЯрд▓реА/15-рдорд┐рди рдмреИрдЪ рдЬреЙрдм (dbt/cron)
2) рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрд▓рдореНрд╕ (рдХреБрдЫ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЙрдкреА рдХрд░реЗрдВ)
рдХреНрдпрд╛: рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реА рдЯреЗрдмрд▓ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЬреЙрдЗрди рд╕реЗ рдмрдЪреЗрдВ (рдЙрджрд╛., orders.customer_name )ред
рдХрдм: рдЖрдкрдХреЛ рдХреЗрд╡рд▓ 1тАУ2 рд╡реИрд▓реНрдпреВ рдЪрд╛рд╣рд┐рдПрдБ рдФрд░ рдЖрдк рдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред
рдХреИрд╕реЗ (PostgreSQL рдЯреНрд░рд┐рдЧрд░ рдЙрджрд╛рд╣рд░рдг):
ALTER TABLE orders
ADD COLUMN customer_name TEXT ,
ADD COLUMN customer_tier TEXT ;
CREATE OR REPLACE FUNCTION sync_order_customer_fields( )
RETURNS TRIGGER AS $
BEGIN
SELECT name, tier INTO NEW. customer_name, NEW. customer_tier
FROM customers WHERE customer_id = NEW. customer_id;
RETURN NEW;
END ;
$ LANGUAGE plpgsql;
CREATE TRIGGER trg_orders_sync_customer
BEFORE INSERT OR UPDATE OF customer_id ON orders
FOR EACH ROW EXECUTE FUNCTION sync_order_customer_fields( ) ;
CREATE OR REPLACE FUNCTION propagate_customer_changes( )
RETURNS TRIGGER AS $
BEGIN
UPDATE orders
SET customer_name = NEW. name,
customer_tier = NEW. tier
WHERE customer_id = NEW. customer_id;
RETURN NEW;
END ;
$ LANGUAGE plpgsql;
CREATE TRIGGER trg_customer_propagate
AFTER UPDATE OF name, tier ON customers
FOR EACH ROW EXECUTE FUNCTION propagate_customer_changes( ) ; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЯреНрд░реЗрдб-рдСрдл: рд░реАрдб рд╕рд░рд▓, рдкрд░ рдХрд╕реНрдЯрдорд░ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рд░рд╛рдЗрдЯреНрд╕ рдлреИрди-рдЖрдЙрдЯ рд╣реЛрддреЗ рд╣реИрдВред
3) рдбреЗрд░рд╛рдЗрд╡реНрдб рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ (рдХрдореНрдкреНрдпреВрдЯреЗрдб рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ)
рдХреНрдпрд╛: рд╡реЗ рд╡реИрд▓реНрдпреВрдЬрд╝ рдкрд░рд╕рд┐рд╕реНрдЯ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдиреНрдпрдерд╛ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдХрдореНрдкреНрдпреВрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛., price_with_tax, latest_comment_at, item_count)ред
рдХрдм: рдЧрдгрдирд╛ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреА рд╣реИ рдФрд░ рдбрд┐рдЯрд░рдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд╣реИред
рджреЛ рдЖрдо рдкреИрдЯрд░реНрди:
рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдо (DB рд░рд╛рдЗрдЯ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдХрдореНрдкреНрдпреВрдЯ рдХрд░рддрд╛ рд╣реИ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рдирд┐рдпрдВрддреНрд░рдг, рдХреНрд░реЙрд╕-рдЯреЗрдмрд▓ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдирд╣реАрдВ)
рд╕реНрдЯреЛрд░реНрдб рдХреЙрд▓рдо + рдЯреНрд░рд┐рдЧрд░/рдЬреЙрдм (рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдм/рдХреИрд╕реЗ рдмрджрд▓реЗ)
ALTER TABLE products
ADD COLUMN price_with_tax NUMERIC ( 12 , 2 ) GENERATED ALWAYS AS ( price * 1.20 ) STORED;
ALTER TABLE posts ADD COLUMN like_count INTEGER NOT NULL DEFAULT 0 ;
CREATE OR REPLACE FUNCTION inc_like_count( ) RETURNS TRIGGER AS $
BEGIN
UPDATE posts SET like_count = like_count + 1 WHERE post_id = NEW. post_id;
RETURN NEW;
END ; $ LANGUAGE plpgsql;
CREATE TRIGGER trg_like_insert
AFTER INSERT ON post_likes
FOR EACH ROW EXECUTE FUNCTION inc_like_count( ) ;
CREATE OR REPLACE FUNCTION dec_like_count( ) RETURNS TRIGGER AS $
BEGIN
UPDATE posts SET like_count = GREATEST( like_count - 1 , 0 ) WHERE post_id = OLD. post_id;
RETURN OLD;
END ; $ LANGUAGE plpgsql;
CREATE TRIGGER trg_like_delete
AFTER DELETE ON post_likes
FOR EACH ROW EXECUTE FUNCTION dec_like_count( ) ; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
4) рдПрдЧреНрд░реАрдЧреЗрдЯ / рд╕рдорд░реА рдЯреЗрдмрд▓реНрд╕
рдХреНрдпрд╛: рдбреЗрд▓реА рд░реЗрд╡реЗрдиреНрдпреВ, рдкреНрд░рддрд┐ рджрд┐рди рдПрдХреНрдЯрд┐рд╡ рдпреВрдЬрд╝рд░реНрд╕, рдХреИрдЯреЗрдЧрд░реА-рд╡рд╛рд░ рдСрд░реНрдбрд░реНрд╕ рдЬреИрд╕реЗ рд░реЛрд▓рдЕрдкреНрд╕ рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯ рдХрд░реЗрдВред
рдХрдм: рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рд╡рд╣реА рдЧреНрд░реБрдк-рдмрд╛рдп рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рд░реЙ рд╕реНрдХреИрди рдорд╣рдВрдЧреЗ рд╣реИрдВред
CREATE TABLE daily_sales (
sales_day DATE PRIMARY KEY ,
gross_amount NUMERIC ( 14 , 2 ) NOT NULL ,
order_count INTEGER NOT NULL
) ;
INSERT INTO daily_sales ( sales_day, gross_amount, order_count)
SELECT ( o. created_at AT TIME ZONE 'UTC' ) ::date AS sales_day,
SUM ( oi. quantity * oi. unit_price) AS gross_amount,
COUNT ( DISTINCT o. order_id) AS order_count
FROM orders o
JOIN order_items oi ON oi. order_id = o. order_id
WHERE o. created_at >= date_trunc( 'day' , now ( ) - interval '1 day' )
AND o. created_at < date_trunc( 'day' , now ( ) )
GROUP BY sales_day
ON CONFLICT ( sales_day) DO UPDATE
SET gross_amount = EXCLUDED. gross_amount,
order_count = EXCLUDED. order_count; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд╕рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк: рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдм (cron/dbt), рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрдкрдбреЗрдЯреНрд╕ (CDC), рдпрд╛ рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ред
5) рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ (рдкрд░рд╕рд┐рд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реА рд░рд┐рдЬрд╝рд▓реНрдЯреНрд╕)
рдХреНрдпрд╛: рдХрд┐рд╕реА рдорд╣рдВрдЧреА рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд┐рдЬрд┐рдХрд▓ рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрдВрдбреЗрдХреНрд╕ рдХрд░ рд╕рдХреЗрдВред
рдХрдм: рд░рд┐рдЬрд╝рд▓реНрдЯ рд╕реЗрдЯ рдорд╣рдВрдЧрд╛, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реНрдерд┐рд░ рд╣реИ, рдФрд░ рдЖрдк рд░рд┐рдлреНрд░реЗрд╢ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕рд╣ рд╕рдХрддреЗ рд╣реИрдВред
CREATE MATERIALIZED VIEW mv_category_sales AS
SELECT p. category_id,
date_trunc( 'day' , o. created_at) AS day ,
SUM ( oi. quantity * oi. unit_price) AS revenue
FROM orders o
JOIN order_items oi ON oi. order_id = o. order_id
JOIN products p ON p. product_id = oi. product_id
GROUP BY p. category_id, date_trunc( 'day' , o. created_at) ;
CREATE INDEX ON mv_category_sales ( category_id, day ) ;
REFRESH MATERIALIZED VIEW mv_category_sales;
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_category_sales; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЯреНрд░реЗрдб-рдСрдл: рдЖрдкрдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХреИрдбреЗрдВрд╕ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ Postgres рдореЗрдВ рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд▓ рд░рд┐рдлреНрд░реЗрд╢ рдиреЗрдЯрд┐рд╡ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, dbt рдпрд╛ рдХрд╕реНрдЯрдо тАЬappend-only + windowed rebuildтАЭ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
6) рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯреЗрдб JSON тАЬрдбреЙрдХреНрдпреБрдореЗрдВрдЯтАЭ рдкреНрд░реЛрдЬреЗрдХреНрд╢рдВрд╕
рдХреНрдпрд╛: рдПрдХ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб JSON рдмреНрд▓реЙрдм рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреА API/UI рдЬрд╝рд░реВрд░рддреЛрдВ (рдЙрджрд╛., рдкреНрд░реЛрдбрдХреНрдЯ рдХрд╛рд░реНрдб) рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛ, рд╕рд╛рде рдореЗрдВ рд▓рдХреНрд╖рд┐рдд JSON рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рд░рдЦреЗрдВред
рдХрдм: рдЖрдкрдХреА API рдмрд╛рд░-рдмрд╛рд░ рд╡рд╣реА рдЖрдХрд╛рд░ рд╕рд░реНрд╡ рдХрд░рддреА рд╣реИ, рдФрд░ рдЖрдк рдПрдХ рд╣реА рд░реАрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВред
CREATE TABLE product_cards (
product_id BIGINT PRIMARY KEY ,
card_json JSONB NOT NULL
) ;
INSERT INTO product_cards ( product_id, card_json)
SELECT p. product_id,
jsonb_build_object(
'id' , p. product_id,
'name' , p. name,
'brand' , b. name,
'price_with_tax' , p. price * 1.20 ,
'category' , c. name
)
FROM products p
JOIN brands b ON b. brand_id = p. brand_id
JOIN categories c ON c. category_id = p. category_id
ON CONFLICT ( product_id) DO UPDATE SET card_json = EXCLUDED. card_json;
CREATE INDEX idx_product_cards_gin ON product_cards USING GIN ( card_json) ; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рд╕рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк: рдкреНрд░реЛрдбрдХреНрдЯ/рдмреНрд░рд╛рдВрдб/рдХреИрдЯреЗрдЧрд░реА рдмрджрд▓рд╛рд╡ рдкрд░ рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рд░рд┐рдмрд┐рд▓реНрдб, рдпрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реБрдП рдкреНрд░реЛрдбрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╛рд░рдВрдмрд╛рд░ рдмреИрдЪ рд░рд┐рдлреНрд░реЗрд╢ред
рд╕рд┐рдВрдХ рд░рдгрдиреАрддрд┐ рдЪреБрдирдирд╛ (рддреНрд╡рд░рд┐рдд рдЧрд╛рдЗрдб)
рдЯреНрд░рд┐рдЧрд░реНрд╕: рд╡реЗ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдирд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЫреЛрдЯреЗ рдлреИрди-рдЖрдЙрдЯ рдФрд░ рдХрдо рд░рд╛рдЗрдЯ рд╡реЙрд▓реНрдпреВрдо рдкрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдкрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рд░рд╛рдЗрдЯ рд▓реИрдЯреЗрдВрд╕реА рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреНрдпреВрд▓-рд░рд╛рдЗрдЯ: рдРрдк рд╕реНрд░реЛрдд + рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рджреЛрдиреЛрдВ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рд╕рд░рд▓ рд╣реИ рдкрд░ рдЬреЛрдЦрд┐рдо рднрд░рд╛ред рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд░рд┐рдЯреНрд░рд╛рдЗрдЬрд╝ рдФрд░ рдЖрдЙрдЯрдмреЙрдХреНрд╕/CDC рдкреИрдЯрд░реНрди рд╕реЗ рдЬреЛрдЦрд┐рдо рдШрдЯрд╛рдПрдБред
CDC тЖТ рд╡рд░реНрдХрд░: рдпрд╣ рд╕рд┐рдВрдХ рд░рдгрдиреАрддрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдкреАрдЧреЗрдЯ рдХрд░рддреА рд╣реИред рдЬрдм рдЗрд╡реЗрдВрдЯреБрдЕрд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рддреЛ рдЖрджрд░реНрд╢ред
рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдмреНрд╕: рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдФрд░ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ред рдмрд╕ рдРрд╕реЗ рд░рд┐рдлреНрд░реЗрд╢ рд╡рд┐рдВрдбреЛрдЬрд╝ рдЪреБрдиреЗрдВ рдЬреЛ рдЖрдкрдХреЗ UX рдЯреЛрд▓рд░реЗрдВрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реЛрдВред
рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдБрдЧрд╛/рджреВрдБрдЧреА рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдмрдирд╛рдПрдБред рдЗрд╕рд╕реЗ рдмреБрд░рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐ рдЖрдкрдХреЛ рдпрдХреАрди рди рд╣реЛ рдХрд┐ рдмрджрд▓рд╛рд╡ рд╕рд╣реА рддрд░рд╣ рдкреНрд░реЛрд╕реЗрд╕ рдпрд╛ рд░реЗрдкреНрд▓рд┐рдХреЗрдЯ рд╣реБрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдбреНрд░рд┐рдлреНрдЯ рдЪреЗрдХреНрд╕ рдФрд░ рдмреИрдХрдлрд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдорджрджрдЧрд╛рд░ рд╣реИред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИред рдореИрдВ рджреГрдврд╝рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реВрдБрдЧрд╛/рдХрд░реВрдБрдЧреА рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдкрд╣рд▓реЗ рдЙрд╕реА рдкрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╣реИ, рддреЛ рдФрд░ рднреА рдЕрдЪреНрдЫрд╛!
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдорд╛рдкреЗрдВ тЖТ рдЬрд┐рддрдирд╛ рдХрдо рдмрджрд▓реЗрдВ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ тЖТ рд╕рд╣реА рд░рдЦреЗрдВ тЖТ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ тЖТ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ тЖТ рджреЛрд╣рд░рд╛рдПрдБред
1) рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░реЗрдВ рдФрд░ рд╕рдлрд▓рддрд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рддрдп рдХрд░реЗрдВ
рдареАрдХ рд╡рд╣реА рдХреНрд╡реЗрд░реА (рдЯреЗрдХреНрд╕реНрдЯ + рдкреИрд░рд╛рдореАрдЯрд░реНрд╕) рдФрд░ рдЙрд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВред
рдмреЗрд╕рд▓рд╛рдЗрди рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ: EXPLAIN (ANALYZE, BUFFERS) рдкреНрд▓рд╛рди, p95 рд▓реИрдЯреЗрдВрд╕реА, CPU/IO, рд╕реНрдХреИрди рд╣реБрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБред
рд╕рдлрд▓рддрд╛ рдХрд╛ рдорд╛рдирджрдВрдб рддрдп рдХрд░реЗрдВ (рдЬреИрд╕реЗ тАЬp95 < 120 ms рдФрд░ рд░рд╛рдЗрдЯ рдХреЙрд╕реНрдЯ тЙд1.2├ЧтАЭ).
рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдЯреЛрд▓рд░реЗрдВрд╕ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ (рдЙрджрд╛., тАЬрдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ 5 рдорд┐рдирдЯ рддрдХ рд╕реНрдЯреЗрд▓ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИтАЭ).
2) рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХрд╛рд░рдЧрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЪреБрдиреЗрдВ
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХреА рдмрдЬрд╛рдп рдПрдХ рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрд▓рдо рдпрд╛ рдПрдХ рд╕рдорд░реА рдЯреЗрдмрд▓ рдЖрдЬрд╝рдорд╛рдПрдБред
рдирдП рдЖрдХрд╛рд░ рдХрд╛ рдЦрд╛рдХрд╛ рдмрдирд╛рдПрдВ:
рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрд▓рдо? (рдХреМрди рд╕реЗ, рдХреНрдпреЛрдВ)
рдПрдЧреНрд░реАрдЧреЗрдЯ рдЯреЗрдмрд▓ рдпрд╛ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ? (рдЧреНрд░реЗрди, рдХреАрдЬрд╝, рд░рд┐рдлреНрд░реЗрд╢ рд╡рд┐рдВрдбреЛ)
рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдореЙрдбрд▓ рддрдп рдХрд░реЗрдВ:
рд╕реНрдЯреНрд░реЙрдиреНрдЧ (рдЯреНрд░рд┐рдЧрд░/рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдирд▓) рдмрдирд╛рдо рдЗрд╡реЗрдВрдЯреБрдЕрд▓ (CDC/рдЬреЙрдм/рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ рд░рд┐рдлреНрд░реЗрд╢)ред
рд░рд╛рдЗрдЯ рдРрдореНрдкреНрд▓реАрдлрд┐рдХреЗрд╢рди рдмрдЬрдЯ рд▓рд┐рдЦреЗрдВ (рдкреНрд░рддрд┐ рдИрд╡реЗрдВрдЯ рдХрд┐рддрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЗрдЯ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВ)ред
3) рд╕рд┐рдВрдХ рдкрд╛рде рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВ
рдЯреНрд░рд┐рдЧрд░реНрд╕ (рд╕реНрдЯреНрд░реЙрдиреНрдЧ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА, рдЫреЛрдЯрд╛ рдлреИрди-рдЖрдЙрдЯ)ред
CDC/рдЖрдЙрдЯрдмреЙрдХреНрд╕ тЖТ рд╡рд░реНрдХрд░ (рдЕрдЪреНрдЫрд╛ рд╕реНрдХреЗрд▓, рдЗрд╡реЗрдВрдЯреБрдЕрд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА):
рдРрдк рд╕реЛрд░реНрд╕ рдЯреЗрдмрд▓реНрд╕ рдФрд░ рдЖрдЙрдЯрдмреЙрдХреНрд╕ рд░реЛ рдПрдХ рд╣реА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред
рд╡рд░реНрдХрд░ рдЖрдЙрдЯрдмреЙрдХреНрд╕ рдкрдврд╝рдХрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯрд╛рд░рдЧреЗрдЯ рдХреЛ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯрд▓реА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдмреНрд╕ / MV рд░рд┐рдлреНрд░реЗрд╢ (рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛):
рд░рд┐рдлреНрд░реЗрд╢ рдХреИрдбреЗрдВрд╕, рд╡рд┐рдВрдбреЛрдЗрдВрдЧ, рдФрд░ рдмреИрдХрдлрд┐рд▓ рд░рдгрдиреАрддрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрд╕реА рдЧреИрд░-рд╕рдордЭреМрддрд╛рдкреВрд░реНрдг рд╣реИред рдЕрдкрдбреЗрдЯреНрд╕ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдП рдЬрд╛ рд╕рдХреЗрдВ (рдЙрджрд╛., UPSERT рдХреЗ рд╕рд╛рде рдбрд┐рдЯрд░рдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд░реАрдХрдореНрдкреНрдпреВрдЯ)ред рдореБрдЭ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЗрдВ, рдмрд╛рдж рдореЗрдВ рдЖрдк рдЦреБрдж рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВрдЧреЗред
4) рдмрдирд╛рдПрдБ, рдмреИрдХрдлрд┐рд▓ рдХрд░реЗрдВ, рдФрд░ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВ
рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ (рдЯреЗрдмрд▓реНрд╕, рдХреЙрд▓рдореНрд╕, рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝, рдЯреНрд░рд┐рдЧрд░реНрд╕/рдЬреЙрдмреНрд╕) рдмрдирд╛рдПрдВ рдкрд░ рдРрдк рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦреЗрдВред
рд╕реНрд░реЛрдд-рд╕рддреНрдп рд╕реЗ рдмреИрдХрдлрд┐рд▓ рдХрд░реЗрдВред
рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ:
SELECT COUNT ( * ) AS mismatches
FROM orders_projection p
JOIN orders o ON o. order_id = p. order_id
JOIN customers c ON c. customer_id = o. customer_id
WHERE p. customer_name <> c. name
OR p. total_amount <> (
SELECT SUM ( oi. quantity * oi. unit_price)
FROM order_items oi WHERE oi. order_id = o. order_id
) ; рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
4. рдорд┐рд╕рдореИрдЪ рдареАрдХ рдХрд░реЗрдВ; рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдПрдБ рдЬрдм рддрдХ рд╢реВрдиреНрдп (рдпрд╛ рд╕рд╣рдордд рдПрд░рд░ рдмрдЬрдЯ рдХреЗ рднреАрддрд░) рди рд╣реЛред
5) рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрдЯрдУрд╡рд░ рдХрд░реЗрдВ
рдРрдк рдмрджрд▓рд╛рд╡ рдлреАрдЪрд░ рдлрд╝реНрд▓реИрдЧ рдпрд╛ рдХреИрдирд░реА рдХреЗ рдкреАрдЫреЗ рд╢рд┐рдк рдХрд░реЗрдВ (рдЙрджрд╛., 10% рдЯреНрд░реИрдлрд╝рд┐рдХ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдкрд╛рде рд╕реЗ рдкрдврд╝реЗ)ред
рд╢реИрдбреЛ рд░реАрдб рдЪрд▓рд╛рдПрдБ: рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдкреБрд░рд╛рдирд╛ рд░рд┐рдЬрд╝рд▓реНрдЯ рдХрдВрдкреНрдпреВрдЯ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИрд╢/рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рддреЗрдЬрд╝ рд░реЛрд▓рдмреИрдХ рд░рдЦреЗрдВ (рддреБрд░рдВрдд рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдкрд╛рде рдкрд░ рд▓реМрдЯреЗрдВ)ред
6) рд╕рд╣реА рдЪреАрдЬрд╝реЛрдВ рдХреА рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХрд░реЗрдВ
рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдЯреВрд▓ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдПрдВ:
рд░реАрдб : p50/p95 рд▓реИрдЯреЗрдВрд╕реА, рдкрдврд╝реА рдЧрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдмрдлрд░ рд╣рд┐рдЯреНрд╕, рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рди рд╕реНрдерд┐рд░рддрд╛ред
рд░рд╛рдЗрдЯ : рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЗрдЯ рд╕рдордп, рдЯреНрд░рд┐рдЧрд░/рдЬреЙрдм рдПрд░рд░реНрд╕, рдХреНрдпреВ рд▓реИрдЧ (CDC), MV рдХрд╛ рдЕрдВрддрд┐рдо-рд░рд┐рдлреНрд░реЗрд╢реНрдб рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдкред
рдбреЗрдЯрд╛ рдХреНрд╡рд╛рд▓рд┐рдЯреА : рдбреНрд░рд┐рдлреНрдЯ рдХрд╛рдЙрдВрдЯрд░реНрд╕ (рдбреЗрд▓реА рдкреИрд░рд┐рдЯреА рдЪреЗрдХреНрд╕), рдмреИрдХрдлрд┐рд▓реНрдб рд░реЛ рдХреА рд╕рдВрдЦреНрдпрд╛, рдорд┐рд╕рдореИрдЪ рдХрд╛ %ред
рдХреЙрд╕реНрдЯ/рдлреБрдЯрдкреНрд░рд┐рдВрдЯ : рдЯреЗрдмрд▓ рд╕рд╛рдЗрдЬрд╝, рдЗрдВрдбреЗрдХреНрд╕ рдмреНрд▓реЛрдЯ, MV рд╕рд╛рдЗрдЬрд╝ рдЧреНрд░реЛрдеред
7) рдСрдкрд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрдЯрд░реЗрдЯ рдХрд░реЗрдВ
рдУрдирд░рд╢рд┐рдк (рдЯреАрдо/рдСрди-рдХреЙрд▓ рд╕рд┐рд╕реНрдЯрдо) рдФрд░ рд░рдирдмреБрдХ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ (рдХреИрд╕реЗ рд░рд┐рдмрд┐рд▓реНрдб, рдмреИрдХрдлрд┐рд▓, рд░рд┐рдкреЗрдпрд░ рдХрд░реЗрдВ)ред рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░ рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдк рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХреЗрдВ, рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ред┬а
рддрд┐рдорд╛рд╣реА рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ: рдХреНрдпрд╛ рдЕрдм рднреА рдЬрд╝рд░реВрд░реА? рдЕрдм рднреА рд╕рд╣реА рдЖрдХрд╛рд░? рдХреНрдпрд╛ рд╣рдо рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдирд┐рд░реНрдгрдп рдХреЛ рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдХрд░реЗрдВ рдФрд░ рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди
рд╣рдордиреЗ рдкрд╣рд▓реЗ Normalization рдмрдирд╛рдо Denormalization рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдХрд╡рд░ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рддреНрд╡рд░рд┐рдд рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рд╣реИред
рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ
рддреЗрдЬрд╝ рд░реАрдб рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ p95/p99 рд▓реИрдЯреЗрдВрд╕реА
рд╣реЙрдЯ рдкрд╛рдереНрд╕ рдкрд░ рд╕рд░рд▓ рдХреНрд╡реЗрд░реАрдЬрд╝ (рдХрдо рдЬреЙрдЗрдиреНрд╕/рдПрдЧреНрд░реАрдЧреЗрд╢рдВрд╕)
рдкреНрд░рддрд┐ рд░реАрдб рдХрдо CPU/IO рдФрд░ рд╕рд╕реНрддреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреНрд╡реЗрд░реАрдЬрд╝
рдЗрд╕рдХреА рдХреАрдордд
рд░рд╛рдЗрдЯ рдРрдореНрдкреНрд▓реАрдлрд┐рдХреЗрд╢рди (рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдкрдбреЗрдЯреНрд╕/рдЗрдиреНрд╕рд░реНрдЯреНрд╕)
рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдЬреЛрдЦрд┐рдо (рдпрджрд┐ рд╕рд┐рдВрдХ рдЦрд░рд╛рдм рд╣реЛ рддреЛ рд╕реНрдЯреЗрд▓/рдбреНрд░рд┐рдлреНрдЯрд┐рдВрдЧ рдбреЗрдЯрд╛)
рд╕реНрдЯреЛрд░реЗрдЬ рд╡реГрджреНрдзрд┐ (рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЙрд▓рдо/рдЯреЗрдмрд▓реНрд╕/рд╡реНрдпреВрдЬрд╝)
рдСрдкрд░реЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб (рд░рд┐рдлреНрд░реЗрд╢, рдмреИрдХрдлрд┐рд▓, рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ)
рдЪреЗрдВрдЬ рдлреИрди-рдЖрдЙрдЯ (рд╕реНрдХреАрдорд╛/рд▓реЙрдЬрд┐рдХ рдЕрдкрдбреЗрдЯреНрд╕ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╣реЛрдирд╛ рдЬрд╝рд░реВрд░реА)
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдФрд░ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬрд╝
рд╣рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рдЬреИрд╕реЗ рддрд░реАрдХреЗ рд╕реЗ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рдХреБрдЫ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╣рдВрдЧреЗ рдХреНрд╡реЗрд░реА рд░рд┐рдЬрд╝рд▓реНрдЯреНрд╕ рдХреЛ рдкрд░рд╕рд┐рд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдлрд░реНрд╕реНрдЯ-рдХреНрд▓рд╛рд╕ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджреЗрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХреБрдЫ рдЬреЙрдмреНрд╕, рдЯреНрд░рд┐рдЧрд░реНрд╕ рдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рд╕реЗ рдЦреБрдж рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд░рдЦрддреЗ рд╣реИрдВред
PostgreSQL
Postgres рдЖрдкрдХреЛ рд░реАрдб-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рд╢реЗрдкреНрд╕ рдХреЛ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рджреЗрддрд╛ рд╣реИред┬а
рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдХрд┐рд╕реА рдХреНрд╡реЗрд░реА рдХреЗ рд░рд┐рдЬрд╝рд▓реНрдЯ рдХреЛ рдкрд░рд╕рд┐рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░реАрдб рддреБрд░рдВрдд рд╣реЛрддреА рд╣реИред рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрдм рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдирд╛ рд╣реИ (рд╢реЗрдбреНрдпреВрд▓реНрдб рдпрд╛ рдРрдб-рд╣реЙрдХ), рдФрд░ рдЖрдк рдХрдирдХрд░реЗрдВрдЯрд▓реА рднреА рд░рд┐рдлреНрд░реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд░реАрдбрд░реНрд╕ рдмреНрд▓реЙрдХ рди рд╣реЛрдВред
рд╣рд▓реНрдХреА рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдореНрд╕ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдбреЗрд░рд╛рдЗрд╡реНрдб рд╡реИрд▓реНрдпреВрдЬрд╝ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рдФрд░ рдЖрдо рдлрд╝рд┐рд▓реНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВтАФрдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд┐рдВрдХ рд▓реЙрдЬрд┐рдХ рд▓рд┐рдЦреЗред┬а
рдЬрдм рдЖрдкрдХреЛ рд╕реЛрд░реНрд╕ рдФрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдХреЙрдкреА рдХреЗ рдмреАрдЪ рд╕реНрдЯреНрд░реЙрдиреНрдЧ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдЪрд╛рд╣рд┐рдП, рддреЛ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд░ рдпрд╛рдж рд░рдЦреЗрдВ, рд╡реЗ рдЖрдкрдХреЗ рд░рд╛рдЗрдЯ рдкрд╛рде рдкрд░ рдХрд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ!)ред рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рдпрд╛ рдмреИрдЪ рд░рд┐рдлреНрд░реЗрд╢ рдХреЗ рд▓рд┐рдП, рдЖрдк Postgres рдХреЛ рд╢реЗрдбреНрдпреВрд▓рд░ (рдЙрджрд╛., pg_cron рдпрд╛ рдмрд╛рд╣рд░реА рдЬреЙрдм рд░рдирд░) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд▓реЙрдЬрд┐рдХрд▓ рд░реЗрдкреНрд▓рд┐рдХреЗрд╢рди/CDC рдХреЗ рд╕рд╛рде, рддрд╛рдХрд┐ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╡рд░реНрдХрд░ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдЖрдкрдХреЗ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯреЗрдмрд▓реНрд╕ рдХреЛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рд▓реА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд╣рд╛рдереЛрдВ-рд╣рд╛рде рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдХрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ PostgreSQL рдХреЛрд░реНрд╕ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
SQL Server
SQL Server рдЗрдВрдбреЗрдХреНрд╕реНрдб рд╡реНрдпреВрдЬрд╝ рдкрд░ рдХрд╛рдлреА рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛-рдСрди рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдЬреИрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЗрдВрдЬрди рд╣рд░ рдЗрдиреНрд╕рд░реНрдЯ/рдЕрдкрдбреЗрдЯ/рдбрд┐рд▓реАрдЯ рдкрд░ рд╡реНрдпреВ рдХреЛ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░реАрдб рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрддреА рд╣реИред рдирддреАрдЬрддрди, рдЕрдм рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рдмреЗрд╕ рдЯреЗрдмрд▓реНрд╕ рдФрд░ рд╡реНрдпреВтАФрджреЛрдиреЛрдВ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рднрд╛рд░реА OLTP рд╡рд░реНрдХрд▓реЛрдбреНрд╕ рдзреАрдореЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред┬а
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдкрд░рд╕рд┐рд╕реНрдЯреЗрдб рдХрдореНрдкреНрдпреВрдЯреЗрдб рдХреЙрд▓рдореНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рдВрдЧрд▓-рд░реЛ рдбреЗрд░рд╛рдЗрд╡реНрдб рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред┬а
рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓рдордирд╕реНрдЯреЛрд░ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╡реЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдХреЛ рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрдВрдкреНрд░реЗрд╕ рдФрд░ рд╕реНрдХреИрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╢реБрд░реВ рд╕реЗ рдбреЗрдЯрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдЦрддреНрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Oracle
Oracle рдХреЗ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдкрд░рд┐рдкрдХреНрд╡ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ FAST рд░рд┐рдлреНрд░реЗрд╢ рдЪреЗрдВрдЬрд▓реЙрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗрд╡рд▓ рдмрджрд▓рд╛ рд╣реБрдЖ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ COMPLETE рд░рд┐рдлреНрд░реЗрд╢ рдЬрд╣рд╛рдБ рдЖрдк рдкреВрд░реЗ рд╡реНрдпреВ рдХреЛ рд░реАрдмрд┐рд▓реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВред┬а
Query Rewrite рдХреЗ рд╕рд╛рде, рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЕрдВрдбрд░рд▓рд╛рдЗрдирд┐рдВрдЧ рдЯреЗрдмрд▓реНрд╕ рдкрд░ рдХреНрд╡реЗрд░реА рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯреАрдореЛрдВ рдХреЛ SQL рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╕реНрдкреАрдб-рдЕрдк рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рддреЗрдЬрд╝ рд░реАрдб рдХрд╛ рдорддрд▓рдм рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо: рд▓реЙрдЧреНрд╕ рдореЗрдВрдЯреЗрди рдХрд░рдирд╛ рдФрд░ рд╡реНрдпреВрдЬрд╝ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдирд╛ рд░рд╛рдЗрдЯ рдФрд░ рдСрдкрд░реЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
MySQL / MariaDB
MySQL рдореЗрдВ рдиреЗрдЯрд┐рд╡ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдорддреМрд░ рдкрд░ рдлрд┐рдЬрд┐рдХрд▓ рдЯреЗрдмрд▓реНрд╕ + рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдмреНрд╕ рдпрд╛ рдЯреНрд░рд┐рдЧрд░реНрд╕ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВред┬а
рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдореНрд╕ рд╕рд░рд▓ рдбреЗрд░рд╛рдЗрд╡реНрдб рд╡реИрд▓реНрдпреВрдЬрд╝ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ рд╕рдорд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд░рд┐рдлреНрд░реЗрд╢ рдХреИрдбреЗрдВрд╕ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд░рд╛рдЗрдЯ рдкрд╛рдереНрд╕ рдкрд░ рдЯреИрдХреНрд╕ рди рд▓рдЧрд╛ рджреЗрдВред рдХрдИ рдЯреАрдореЗрдВ рдЗрд╕реЗ рд░реАрдб рд░рд┐рдкреНрд▓рд┐рдХрд╛рдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреА рд╣реИрдВ рддрд╛рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреНрд╡реЗрд░реАрдЬрд╝ рдкреВрд░реА рддрд░рд╣ рдСрдлрд╝рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдБред
Snowflake / BigQuery (рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд▓реЗрдпрд░)
рдХреЙрд▓рдордирд░ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЪреМрдбрд╝реЗ, рд╕реНрдХреИрди-рдлреНрд░реЗрдВрдбрд▓реА, рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд╣реИрдВред рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рдЪреМрдбрд╝реА рдлреИрдХреНрдЯ рдЯреЗрдмрд▓реНрд╕ рдореЙрдбрд▓ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рд╕рд╣рд╛рдпрдХ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдмреЗрдХреНрдб-рдЗрди рд╣реЛрдВ, рдлрд┐рд░ рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ/рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕реНрдХреИрди рдкреНрд░реВрди рд╣реЛрдВред┬а
рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдФрд░ рд╢реЗрдбреНрдпреВрд▓реНрдб рдЯрд╛рд╕реНрдХреНрд╕/рдХреНрд╡реЗрд░реАрдЬрд╝ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ OLTP рдХреЛ рдЫреБрдП рдмрд┐рдирд╛ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рддрд╛рдЬрд╝рд╛ рд░рд╣реЗрдВред рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд░рд┐рдлреНрд░реЗрд╢ рдХреЙрд╕реНрдЯ рдХреЗ рдмрджрд▓реЗ рд╕реНрдХреЗрд▓ рдкрд░ рдмрд╣реБрдд рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓, рд╕рд╕реНрддреА рд░реАрдб рд▓реЗрддреЗ рд╣реИрдВред рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ BI рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрддреНрддрдо рд╣реИред
рдпрд╣ рд╣рдорд╛рд░реЗ PostgreSQL рдХреЛрд░реНрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдПрдбрд╡рд╛рдВрд╕реНрдб рд╣реИ, рддреЛ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣рдЬ рд╣реИрдВ, рдирд┐рдГрд╕рдВрдХреЛрдЪ рд╣рдорд╛рд░реЗ Snowflake рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдЪрдп рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБред
dbt (рдореЙрдбрд▓рд┐рдВрдЧ рдФрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди)
dbt рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП тАЬрдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдРрдЬрд╝ рдХреЛрдбтАЭ рд▓реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдПрдХ рдмрд╛рд░ рдореЙрдбрд▓реНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рдЯреЗрдмрд▓, рд╡реНрдпреВ, рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд▓) рдЪреБрдирддреЗ рд╣реИрдВ, рдФрд░ dbt рдмрд┐рд▓реНрдбреНрд╕, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдФрд░ рдЯреЗрд╕реНрдЯреНрд╕ рд╕рдБрднрд╛рд▓рддрд╛ рд╣реИред рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд▓ рдореЙрдбрд▓реНрд╕ рдЦрд╛рд╕рдХрд░ рдЙрди рд╕рдорд░реА рдЯреЗрдмрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдирдпрд╛ рдбреЗрдЯрд╛ рдЕрдкреЗрдВрдб рдФрд░ рдорд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ!
CDC рдФрд░ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕
рдЬрдм рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрджрд▓рд╛рд╡ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрдВ, рддреЛ Change Data Capture рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред Debezium (рд╕реНрд╡-рд╣реЛрд╕реНрдЯреЗрдб) рдпрд╛ рдореИрдиреЗрдЬреНрдб рдХрдиреЗрдХреНрдЯрд░реНрд╕ (Fivetran, Airbyte) рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ OLTP рд╕реЗ рд░реЛ-рд▓реЗрд╡рд▓ рдЪреЗрдВрдЬрд┐рд╕ рдХреЛ рд╡рд░реНрдХрд░реНрд╕ рдпрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕реЗрдЬрд╝ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдЯреЗрдмрд▓реНрд╕, рдХрд╛рдЙрдВрдЯрд░реНрд╕, рдпрд╛ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЗрд╡реЗрдВрдЯреБрдЕрд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ (рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ рдлреАрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛), рдФрд░ рд╕рдм рдХреБрдЫ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдореЗрдВ рдареВрдБрд╕рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИред рдЕрдкрдбреЗрдЯреНрд╕ рдХреЛ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд░рдЦреЗрдВ, рд▓реИрдЧ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ, рдФрд░ рд▓реЗрдЯ рдпрд╛ рдорд┐рд╕реНрдб рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреИрдХрдлрд┐рд▓ рдкрд╛рде рд░рдЦреЗрдВред
рдореБрдЦреНрдп рдмрд╛рддреЗрдВ рдФрд░ рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдКрдкрд░ рдкрд░рддрдмрджреНрдз рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рдЙрд╕рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВред рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд░рд╛рдЗрдЯ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрджрд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рднрд▓реА-рднрд╛рдБрддрд┐ рд╕рдордЭреЗ рдкрд╛рдереНрд╕ рдкрд░ рддреЗрдЬрд╝, рд╕рд░рд▓ рд░реАрдб рд▓реЗрддреЗ рд╣реИрдВред
рдпрд╛рдж рд░рдЦреЗрдВ:
рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗрд╡рд▓ рд╡рд╣реАрдВ рдЕрдкрдирд╛рдПрдБ рдЬрд╣рд╛рдБ рдХрд┐рд╕реА рдирд╛рдорд┐рдд, рдорд╛рдкреА рдЧрдИ рдХреНрд╡реЗрд░реА рдХреЛ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛред
рдкрд╣рд▓реЗ рд╕рд╕реНрддреЗ рдЙрдкрд╛рдп рдЦрддреНрдо рдХрд░реЗрдВ (рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝, рдХреНрд╡реЗрд░реА рд░реАрд░рд╛рдЗрдЯреНрд╕, рдХреИрд╢рд┐рдВрдЧ, рд░рд┐рдкреНрд▓рд┐рдХрд╛рдЬрд╝, OLAP)ред
рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХрд╛рд░рдЧрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЪреБрдиреЗрдВ (рдПрдХ рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрд▓рдо, рдЫреЛрдЯрд╛ рдПрдЧреНрд░реАрдЧреЗрдЯ, рдпрд╛ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ)ред
рдлреНрд░реЗрд╢рдиреЗрд╕ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░рд╣реЗрдВ (рд╕реНрдЯреНрд░реЙрдиреНрдЧ рдмрдирд╛рдо рдЗрд╡реЗрдВрдЯреБрдЕрд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА) рдФрд░ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд╕рд┐рдВрдХ рдмрдирд╛рдПрдБред
рдкрд╣рд▓реЗ/рдмрд╛рдж рдореЗрдВ рдорд╛рдкреЗрдВ, рдбреНрд░рд┐рдлреНрдЯ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ, рдФрд░ рд░реЛрд▓рдмреИрдХ рд╕реНрд╡рд┐рдЪ рдкрд╛рд╕ рд░рдЦреЗрдВред
рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯреЗрдмрд▓реНрд╕ рдХреЛ рд╕реНрд░реЛрдд-рд╕рддреНрдп рдорд╛рдиреЗрдВ! рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╣рд┐рд╕реНрд╕реЗ рд░реАрдб-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рдХреЙрдкреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдЗрддрдирд╛ рднрд░реЛрд╕реЗрдордВрдж рдЖрдзрд╛рд░ рд╣реИ, рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рдЕрдкрдиреА рд╣реА рдмрд╛рдд рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛/рд░рд╣реА рд╣реВрдБред рдореИрдВ рдЕрдм рднреА рдорд╛рдирддрд╛/рдорд╛рдирддреА рд╣реВрдБ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдХреАрдорд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдирд▓ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрди рдЪреБрдирд┐рдВрджрд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдЬрд╣рд╛рдБ рд╕рдЦреНрдд рдиреЙрд░реНрдорд▓ рдлреЙрд░реНрдо рд╕реЗ рдЕрдзрд┐рдХ рд░реАрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ рдФрд░ рд╣рдо рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрд╕ рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд╛рддреЗ рд╣реИрдВред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рдкрд░ рддрдм рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╡реЗрд░реА, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ SLA рдпрд╣ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬреЙрдЗрди рдФрд░ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдХреИрд▓рдХреБрд▓реЗрд╢рдВрд╕ рдмрд╣реБрдд рдзреАрдореЗ рдпрд╛ рдорд╣рдВрдЧреЗ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рддреЗрдЬ рд░реАрдб рдФрд░ рд╕рд░рд▓ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЗ рдмрджрд▓реЗ рдЕрдзрд┐рдХ рд╕реНрдЯреЛрд░реЗрдЬ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд░рд╛рдЗрдЯреНрд╕ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдХрд╛рд░реНрдп рд▓реЗрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдБрдЧрд╛/рджрд┐рдЦрд╛рдКрдБрдЧреА рдХрд┐ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╣рд╛рдБ рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдХрд╣рд╛рдБ рдирд╣реАрдВ, рдФрд░ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЙрджреНрджреЗрд╢реНрдп рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЬрдм рд╡рд░реНрдХрд▓реЛрдб рдЬрд╛рдпрдЬрд╝ рдард╣рд░рд╛рдП рддреЛ рдЙрд╕рдХреЗ рдКрдкрд░ рд╢реЙрд░реНрдЯрдХрдЯреНрд╕ рдХреА рдкрд░рдд рдЪрдврд╝рд╛рдирд╛ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреНрдпрд╛ рд╣реИ?
рдпрджрд┐ рдЖрдк рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ рдпрд╣ рд╣реИ:┬а
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдкрд╣рд▓реЗ рд╕реЗ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдХреАрдорд╛ рдореЗрдВ рд░реАрдб рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдФрд░ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рджреЛрд╣рд░рд╛рд╡ (рд░реЗрдбрдВрдбреЗрдВрд╕реА) рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдпрд╣ рд▓рдХреНрд╖рд┐рдд рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рдЕрдЪреНрдЫреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдмрд╣рд╛рдирд╛ рдирд╣реАрдВ!
рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ тАЬрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдбтАЭ, тАЬрдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдбтАЭ рдФрд░ тАЬрдЕрдирдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдбтАЭ рдХреЗ рдЕрд░реНрде рдХреЛ рдЦреЛрд▓рдХрд░ рд╕рдордЭрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдпреЗ 3 рд╢рдмреНрдж рдСрдирд▓рд╛рдЗрди рдЕрдХреНрд╕рд░ рд╕реБрдирд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
Normalized: рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рдмрд╛рдБрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ 3NF/BCNF).
Denormalized: рдЖрдк рдЙрд╕реА рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рдХреЗ рдКрдкрд░ рдЪреБрдирд┐рдВрджрд╛ рд░реЗрдбрдВрдбреЗрдВрд╕реА рджреЛрдмрд╛рд░рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВтАФрдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдо, рдкреВрд░реНрд╡-рдЧрдгрд┐рдд рдорд╛рди, рдпрд╛ рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб рдЯреЗрдмрд▓реНрд╕тАФрддрд╛рдХрд┐ рдЖрдо рд░реАрдб рддреЗрдЬ рд╣реЛрдВред рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ, рдЖрдк рдПрдХрд▓ рд╕реНрд░реЛрдд-рд╕рддреНрдп (рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯреЗрдмрд▓реНрд╕) рд░рдЦрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣реЙрдЯ рдкрд╛рдереНрд╕ рдЬреИрд╕реЗ рдбреИрд╢рдмреЛрд░реНрдб, рдкреНрд░реЛрдбрдХреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ, рд╕рд░реНрдЪ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ + рд░рд╛рдЗрдЯ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрджрд▓реЗ рд░реАрдб рд╕реНрдкреАрдб + рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рд▓реЗрддреЗ рд╣реИрдВред
Unnormalized: рдХрдЪреНрдЪрд╛, рдПрдб-рд╣реЙрдХ рдпрд╛ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ рдбреЗрдЯрд╛ рдЬрд╣рд╛рдБ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдмрд╛рдзрд╛рдПрдБ рдареАрдХ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рд╣реБрдИрдВред рд╣рдо рдпрд╣рд╛рдБ рдпрд╣ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
SQL рдореЗрдВ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдБ SQL рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдФрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рджреГрд╢реНрдп рдмрдирд╛рддрд╛ рд╣реИред
Normalized modelling
рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкрд╛рде рдХреЗ рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк customers рдХреЛ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рд░рдЦреЗрдВрдЧреЗ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐
orders.customer_name / orders.customer_tierрд╕рд┐рдВрдХ рдореЗрдВ рдмрдиреЗ рд░рд╣реЗрдВ (рдЬреИрд╕реЗ, рдЯреНрд░рд┐рдЧрд░, CDC рдЬреЙрдм, рдпрд╛ рд╢реЗрдбреНрдпреВрд▓реНрдб рдмреИрдХрдлрд┐рд▓)ред рд╡рд╣реА рд╕рддреНрдп, рджреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡тАФрд╣рд░ рдПрдХ рдЕрд▓рдЧ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдбредрдХреНрдпрд╛ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ?
рдПрдХ рдЖрдо рдЧрд▓рддрдлрд╣рдореА рд╣реИ рдХрд┐ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдирддреАрдЬрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╛рдкрд╛-рддреМрд▓рд╛, рд╕реАрдорд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рдФрд░ рдореЗрдВрдЯреЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рдБ, рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдХреНрд╕рд░ рдЙрдЪреНрдЪрддрд░ рдиреЙрд░реНрдорд▓ рдлреЙрд░реНрдореНрд╕ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ (рдпрд╣реА рдЙрджреНрджреЗрд╢реНрдп рд╣реИ), рдкрд░ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдпрд╛ рдмрд┐рдирд╛ рд╕рд┐рдВрдХ рд░рдгрдиреАрддрд┐ рдХреЗ рдмреЗрддрд░рддреАрдм рд░реЗрдбрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рдирд╛ред
рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╣рдорд╛рд░рд╛ рд╢реБрд░реБрдЖрддреА рдХреЛрд░реНрд╕ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ!
Normalization рдмрдирд╛рдо Denormalization
рдпрд╣рд╛рдБ рд╕рд╛рдЗрдб-рдмрд╛рдп-рд╕рд╛рдЗрдб рддреБрд▓рдирд╛ рд╣реИред рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЯреНрд░реЗрдб-рдСрдл рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред
рдкрд╣рд▓реВ
Normalization
Denormalization
рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп
рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА, рдиреНрдпреВрдирддрдо рд░реЗрдбрдВрдбреЗрдВрд╕реА, рдЖрд╕рд╛рди рдФрд░ рд╕рд╣реА рдЕрдкрдбреЗрдЯ
рддреЗрдЬрд╝ рд░реАрдб, рд╣реЙрдЯ рдкрд╛рдереНрд╕ рдкрд░ рд╕рд░рд▓ рдХреНрд╡реЗрд░реА
рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░
рдмрд╛рд░рдВрдмрд╛рд░ рд░рд╛рдЗрдЯ/рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ OLTP рд╕рд┐рд╕реНрдЯрдо
рд░реАрдб-рд╣реЗрд╡реА рдбреИрд╢рдмреЛрд░реНрдб, рд╕рд░реНрдЪ/рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреЗрдЬ, рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ/рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕
рд░реАрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕
рдЕрдХреНрд╕рд░ рдЬреЙрдЗрди рдХреА рдЬрд░реВрд░рдд, рд╕рд╣реА рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛
рдХрдо рдЬреЙрдЗрди, рдмрд╣реБрдд рддреЗрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд░рд╛рдЗрдЯ рдЬрдЯрд┐рд▓рддрд╛
рд╕рд░рд▓: рдПрдХрд▓ рд╕реНрд░реЛрдд-рд╕рддреНрдп
рдЕрдзрд┐рдХ: рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрдкреА рдпрд╛ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдЕрдкрдбреЗрдЯ/рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдкрдбрд╝рддреЗ рд╣реИрдВ
рд╕реНрдЯреЛрд░реЗрдЬ
рд╣рд▓реНрдХрд╛
рдмрдбрд╝рд╛ (рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдо/рдЯреЗрдмрд▓реНрд╕, рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯреЗрдб рд╡реНрдпреВрдЬрд╝)
рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА
рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рдордЬрдмреВрдд (3NF/BCNF рдмрд╛рдзрд╛рдПрдБ)
рдбреНрд░рд┐рдлреНрдЯ рд░реЛрдХрдиреЗ рдХреЗ рддрдВрддреНрд░ рдЪрд╛рд╣рд┐рдП (рдЯреНрд░рд┐рдЧрд░реНрд╕, CDC, рдЬреЙрдмреНрд╕)
рдкрд░рд┐рд╡рд░реНрддрди рдЧрддрд┐
рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо/рдЕрдкрдбреЗрдЯ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░рд╣рддреЗ рд╣реИрдВ
рдкрд░рд┐рд╡рд░реНрддрди рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбреЗрдЯрд╛ рдореЗрдВ рдлреИрд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдСрдкрд░реЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб
рдХрдо: рдХрдо рдореВрд╡рд┐рдВрдЧ рдкрд╛рд░реНрдЯреНрд╕
рдЬреНрдпрд╛рджрд╛: рд░рд┐рдлреНрд░реЗрд╢ рдкреЙрд▓рд┐рд╕реА, рдмреИрдХрдлрд┐рд▓, рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ
рд╡рд┐рдлрд▓рддрд╛ рдореЛрдб
N+1 рдХреНрд╡реЗрд░реАрдЬрд╝, рдзреАрдореЗ рдЬреЙрдЗрдиреНрд╕, рдорд┐рд╕рд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕
рд╕реНрдЯреЗрд▓ рдбреЗрдЯрд╛, рдЕрд╕рдВрдЧрддрд┐, рд░рд╛рдЗрдЯ рдРрдореНрдкреНрд▓реАрдлрд┐рдХреЗрд╢рди
рд╕реНрдХреАрдорд╛ рдЙрддреНрдХреНрд░рд╛рдВрддрд┐
рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп, рд░рд┐рдлреИрдХреНрдЯрд░-рдлреНрд░реЗрдВрдбрд▓реА
рд░реЗрдбрдВрдбреЗрдВрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдпреЛрдЬрдирд╛рдПрдБ рдЪрд╛рд╣рд┐рдП
рдЯрд┐рдкрд┐рдХрд▓ рдЙрджрд╛рд╣рд░рдг
рдСрд░реНрдбрд░реНрд╕, рдХрд╕реНрдЯрдорд░реНрд╕, рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕
рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб рдкреНрд░реЛрдбрдХреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ; рдПрдЧреНрд░реАрдЧреЗрдЯ рд╕реЗрд▓реНрд╕ рдЯреЗрдмрд▓реНрд╕; рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб/рдЗрдВрдбреЗрдХреНрд╕реНрдб рд╡реНрдпреВрдЬрд╝
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХреНрдпреЛрдВ рдФрд░ рдХрдм рдХрд░реЗрдВ
рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╡реЗрд░реА рдЬреЙрдЗрдиреНрд╕, рдПрдЧреНрд░реАрдЧреЗрд╢рдВрд╕ рдпрд╛ рдмрд╛рд░рдВрдмрд╛рд░ рд▓реБрдХрдЕрдкреНрд╕ рдХреЗ рдХрд╛рд░рдг рдмрд╛рдзрд┐рдд рд╣реЛрдВ, рддрдм рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдЪрдореБрдЪ рдЙрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓реЗрдВ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ, рдХреНрд╡реЗрд░реА рдЯреНрдпреВрдирд┐рдВрдЧ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддрдм рдЖрдк рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдПрдХреНрд╕реЗрд╕ рдкреИрдЯрд░реНрдиреНрд╕ рдкрд░ рддреЗрдЬрд╝ рд░реАрдб рдХреЗ рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдЬрдм рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ
рдХрдм рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рди рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдХреБрдЫ рдФрд░ рдЕрдкрдирд╛рдПрдБ
рдЖрдк рд╕рдЪ рдореЗрдВ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд╣реАрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдпрд╣ рд╕рдмрд╕реЗ рдХрдо рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рдирд▓ рдмреЛрдЭ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рд░реАрдб рд╕реНрдкреАрдб рджреЗрддрд╛ рд╣реИтАФрдФрд░ рдХреЗрд╡рд▓ рддрдм, рдЬрдм рд╕рд╕реНрддреЗ рдЙрдкрд╛рдп рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдБред
рдпрджрд┐ рдЖрдкрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд░реБрдХреЗрдВ! рдЕрдЧрд▓реЗ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╣рдо рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдкрдбрд╝рддрд╛рд▓ рдХрд░реЗрдВрдЧреЗред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╡рд┐рдХрд▓реНрдк
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣рд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд░реЗрдбрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрдВрдЬрди рдФрд░ рдЕрдкрдиреА рдРрдк рд╕реЗ рд╣рд░ рд╕рдВрднрд╡ рдкреНрд░рджрд░реНрд╢рди рдирд┐рдХрд╛рд▓реЗрдВред рдпреЗ рд╕реБрдзрд╛рд░ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╕реНрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рд╡рд╣реА рд▓рд╛рдн рджреЗ рджреЗрддреЗ рд╣реИрдВред
1) рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ
рдХрдореНрдкреЛрдЬрд╝рд┐рдЯ/рдХрд╡рд░рд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝: рдЕрдкрдиреА SQL рдХреНрд╡реЗрд░реАрдЬрд╝ рдореЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЙрд▓рдо рдкрд╣рд▓реЗ рд░рдЦреЗрдВ, рдлрд┐рд░
GROUP BY/ORDER BYрдХреЙрд▓рдоред рдореИрдВ рд╕реЗрд▓реЗрдХреНрдЯ-рд▓рд┐рд╕реНрдЯ рдХреЙрд▓рдо рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛/рдХрд░рддреА рд╣реВрдБ рддрд╛рдХрд┐ рдЗрдВрдЬрди рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдХреНрд╡реЗрд░реА рд╕рд░реНрд╡ рдХрд░ рд╕рдХреЗредрдлрд╝рд┐рд▓реНрдЯрд░реНрдб/рдкрд╛рд░реНрд╢рд┐рдпрд▓ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝: рд╕рд┐рд░реНрдл рд╣реЙрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░реЗрдВ (рдЙрджрд╛.,
status = 'ACTIVE'), рддрд╛рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдЫреЛрдЯрд╛ рдФрд░ рддреЗрдЬрд╝ рд░рд╣реЗредрдПрдХреНрд╕рдкреНрд░реЗрд╢рди/рдлрдВрдХреНрд╢рдирд▓ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝:
LOWER(email)рдпрд╛date_trunc('day', created_at)рдкрд░ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдПрдБ рддрд╛рдХрд┐ рдХрдВрдкреНрдпреВрдЯреЗрдб рд╕реНрдХреИрди рд╕реЗ рдмрдЪреЗрдВред2) рдХреНрд╡реЗрд░реА рдЯреНрдпреВрдирд┐рдВрдЧ рдФрд░ рдкреЗрдЬрд┐рдиреЗрд╢рди
SELECT *рд╕реЗ рдмрдЪреЗрдВред рдХреЗрд╡рд▓ рд╡рд╣реА рдлрд╝реЗрдЪ рдХрд░реЗрдВ рдЬреЛ рдЖрдк рджрд┐рдЦрд╛рддреЗ рд╣реИрдВредрдЬрд╣рд╛рдБ рдХреЗрд╡рд▓ рдЙрдкрд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪрдирд╛ рд╣реЛ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬреЙрдЗрди рдХреЛ
EXISTS/SEMIрд╕реЗ рдмрджрд▓реЗрдВредрдкреНрд░реЗрдбрд┐рдХреЗрдЯреНрд╕ рдиреАрдЪреЗ рдзрдХреЗрд▓реЗрдВ: рдкрд╣рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ, рдмрд╛рдж рдореЗрдВ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХрд░реЗрдВред
рд╕реНрдерд┐рд░, рддреЗрдЬрд╝ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреА-рд╕реЗрдЯ рдкреЗрдЬрд┐рдиреЗрд╢рди рдЕрдкрдирд╛рдПрдБ (
WHERE created_at < ? ORDER BY created_at DESC LIMIT 50)ред3) рдХреИрд╢рд┐рдВрдЧ
4) рд░реАрдб рд░рд┐рдкреНрд▓рд┐рдХрд╛рдЬрд╝
5) рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рдФрд░ рдкреНрд░реВрдирд┐рдВрдЧ
6) рдХреЙрд▓рдордирд░/OLAP рд╕реНрдЯреЛрд░реНрд╕
7) ORM рд╕реНрд╡рдЪреНрдЫрддрд╛
8) рдХрдВрдкреНрдпреВрдЯреЗрдб/рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдо (DB-рдореЗрдВрдЯреЗрдиреНрдб)
рдбреЗрд░рд╛рдЗрд╡реНрдб рд╡реИрд▓реНрдпреВрдЬрд╝ (рдЙрджрд╛.,
price_with_tax) DB рд╕реЗ рдЬрдирд░реЗрдЯреЗрдб/рдХрдВрдкреНрдпреВрдЯреЗрдб рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рдХреЗ рдЬрд░рд┐рдП рдореЗрдВрдЯреЗрди рдХрд░рд╡рд╛рдПрдБред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдРрдк-рд▓реЗрд╡рд▓ рд╕рд┐рдВрдХ рд▓реЙрдЬрд┐рдХ рдХреЗ рдмрд┐рдирд╛ рддреЗрдЬрд╝ рд░реАрдб рдорд┐рд▓реЗрдВрдЧреЗредрдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рддрдХрдиреАрдХреЗрдВ
рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдЖрдо рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рд░реЗрдбрдВрдбреЗрдВрд╕реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рд░ рдПрдХ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмрддрд╛рдКрдБрдЧрд╛/рдмрддрд╛рдКрдБрдЧреА рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдХрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рд╕рд┐рдВрдХ рдХреИрд╕реЗ рд░рдЦреЗрдВред
рд╕реЗрдЯрдЕрдк: рдорд╛рди рд▓реЗрдВ рдХрд┐ рдХреЛрд░ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╣реИтАФcustomers, orders, order_items, products.
1) рдлреНрд▓реИрдЯреЗрдВрдб / рдкреНрд░реА-рдЬреЙрдЗрдиреНрдб тАЬрдкреНрд░реЛрдЬреЗрдХреНрд╢рдитАЭ рдЯреЗрдмрд▓реНрд╕
рдХреНрдпрд╛: рдПрдХ рдРрд╕реА рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВ рдЬреЛ рддреЗрдЬрд╝ рд░реАрдб рдХреЗ рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рдХреЙрд▓рдореНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЙрдЗрди рдХрд░ рджреЗ (рдЙрджрд╛., рдкреНрд░реЛрдбрдХреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдпрд╛ рдСрд░реНрдбрд░реНрд╕ рдбреИрд╢рдмреЛрд░реНрдб)ред
рдХрдм: рдЖрдкрдХрд╛ рд╣реЙрдЯ рдкрд╛рде 3 рд╕реЗ 5 рдЯреЗрдмрд▓реНрд╕ рдХреЛ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЬреЙрдЗрди рдХрд░рддрд╛ рд╣реИред
рдХреИрд╕реЗ (PostgreSQL):
рд╕рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк:
2) рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрд▓рдореНрд╕ (рдХреБрдЫ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЙрдкреА рдХрд░реЗрдВ)
рдХреНрдпрд╛: рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реА рдЯреЗрдмрд▓ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЬреЙрдЗрди рд╕реЗ рдмрдЪреЗрдВ (рдЙрджрд╛., orders.customer_name)ред
рдХрдм: рдЖрдкрдХреЛ рдХреЗрд╡рд▓ 1тАУ2 рд╡реИрд▓реНрдпреВ рдЪрд╛рд╣рд┐рдПрдБ рдФрд░ рдЖрдк рдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред
рдХреИрд╕реЗ (PostgreSQL рдЯреНрд░рд┐рдЧрд░ рдЙрджрд╛рд╣рд░рдг):
рдЯреНрд░реЗрдб-рдСрдл: рд░реАрдб рд╕рд░рд▓, рдкрд░ рдХрд╕реНрдЯрдорд░ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рд░рд╛рдЗрдЯреНрд╕ рдлреИрди-рдЖрдЙрдЯ рд╣реЛрддреЗ рд╣реИрдВред
3) рдбреЗрд░рд╛рдЗрд╡реНрдб рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ (рдХрдореНрдкреНрдпреВрдЯреЗрдб рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ)
рдХреНрдпрд╛: рд╡реЗ рд╡реИрд▓реНрдпреВрдЬрд╝ рдкрд░рд╕рд┐рд╕реНрдЯ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдиреНрдпрдерд╛ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдХрдореНрдкреНрдпреВрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛.,
price_with_tax,latest_comment_at,item_count)редрдХрдм: рдЧрдгрдирд╛ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреА рд╣реИ рдФрд░ рдбрд┐рдЯрд░рдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд╣реИред
рджреЛ рдЖрдо рдкреИрдЯрд░реНрди:
4) рдПрдЧреНрд░реАрдЧреЗрдЯ / рд╕рдорд░реА рдЯреЗрдмрд▓реНрд╕
рдХреНрдпрд╛: рдбреЗрд▓реА рд░реЗрд╡реЗрдиреНрдпреВ, рдкреНрд░рддрд┐ рджрд┐рди рдПрдХреНрдЯрд┐рд╡ рдпреВрдЬрд╝рд░реНрд╕, рдХреИрдЯреЗрдЧрд░реА-рд╡рд╛рд░ рдСрд░реНрдбрд░реНрд╕ рдЬреИрд╕реЗ рд░реЛрд▓рдЕрдкреНрд╕ рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯ рдХрд░реЗрдВред
рдХрдм: рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рд╡рд╣реА рдЧреНрд░реБрдк-рдмрд╛рдп рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рд░реЙ рд╕реНрдХреИрди рдорд╣рдВрдЧреЗ рд╣реИрдВред
рд╕рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк: рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдм (cron/dbt), рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрдкрдбреЗрдЯреНрд╕ (CDC), рдпрд╛ рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ред
5) рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ (рдкрд░рд╕рд┐рд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реА рд░рд┐рдЬрд╝рд▓реНрдЯреНрд╕)
рдХреНрдпрд╛: рдХрд┐рд╕реА рдорд╣рдВрдЧреА рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд┐рдЬрд┐рдХрд▓ рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрдВрдбреЗрдХреНрд╕ рдХрд░ рд╕рдХреЗрдВред
рдХрдм: рд░рд┐рдЬрд╝рд▓реНрдЯ рд╕реЗрдЯ рдорд╣рдВрдЧрд╛, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реНрдерд┐рд░ рд╣реИ, рдФрд░ рдЖрдк рд░рд┐рдлреНрд░реЗрд╢ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдЯреНрд░реЗрдб-рдСрдл: рдЖрдкрдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХреИрдбреЗрдВрд╕ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ Postgres рдореЗрдВ рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд▓ рд░рд┐рдлреНрд░реЗрд╢ рдиреЗрдЯрд┐рд╡ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, dbt рдпрд╛ рдХрд╕реНрдЯрдо тАЬappend-only + windowed rebuildтАЭ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
6) рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯреЗрдб JSON тАЬрдбреЙрдХреНрдпреБрдореЗрдВрдЯтАЭ рдкреНрд░реЛрдЬреЗрдХреНрд╢рдВрд╕
рдХреНрдпрд╛: рдПрдХ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб JSON рдмреНрд▓реЙрдм рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреА API/UI рдЬрд╝рд░реВрд░рддреЛрдВ (рдЙрджрд╛., рдкреНрд░реЛрдбрдХреНрдЯ рдХрд╛рд░реНрдб) рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛ, рд╕рд╛рде рдореЗрдВ рд▓рдХреНрд╖рд┐рдд JSON рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рд░рдЦреЗрдВред
рдХрдм: рдЖрдкрдХреА API рдмрд╛рд░-рдмрд╛рд░ рд╡рд╣реА рдЖрдХрд╛рд░ рд╕рд░реНрд╡ рдХрд░рддреА рд╣реИ, рдФрд░ рдЖрдк рдПрдХ рд╣реА рд░реАрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк: рдкреНрд░реЛрдбрдХреНрдЯ/рдмреНрд░рд╛рдВрдб/рдХреИрдЯреЗрдЧрд░реА рдмрджрд▓рд╛рд╡ рдкрд░ рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рд░рд┐рдмрд┐рд▓реНрдб, рдпрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реБрдП рдкреНрд░реЛрдбрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╛рд░рдВрдмрд╛рд░ рдмреИрдЪ рд░рд┐рдлреНрд░реЗрд╢ред
рд╕рд┐рдВрдХ рд░рдгрдиреАрддрд┐ рдЪреБрдирдирд╛ (рддреНрд╡рд░рд┐рдд рдЧрд╛рдЗрдб)
рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдБрдЧрд╛/рджреВрдБрдЧреА рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдмрдирд╛рдПрдБред рдЗрд╕рд╕реЗ рдмреБрд░рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐ рдЖрдкрдХреЛ рдпрдХреАрди рди рд╣реЛ рдХрд┐ рдмрджрд▓рд╛рд╡ рд╕рд╣реА рддрд░рд╣ рдкреНрд░реЛрд╕реЗрд╕ рдпрд╛ рд░реЗрдкреНрд▓рд┐рдХреЗрдЯ рд╣реБрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдбреНрд░рд┐рдлреНрдЯ рдЪреЗрдХреНрд╕ рдФрд░ рдмреИрдХрдлрд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдорджрджрдЧрд╛рд░ рд╣реИред
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИред рдореИрдВ рджреГрдврд╝рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реВрдБрдЧрд╛/рдХрд░реВрдБрдЧреА рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдкрд╣рд▓реЗ рдЙрд╕реА рдкрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╣реИ, рддреЛ рдФрд░ рднреА рдЕрдЪреНрдЫрд╛!
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдорд╛рдкреЗрдВ тЖТ рдЬрд┐рддрдирд╛ рдХрдо рдмрджрд▓реЗрдВ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ тЖТ рд╕рд╣реА рд░рдЦреЗрдВ тЖТ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ тЖТ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ тЖТ рджреЛрд╣рд░рд╛рдПрдБред
1) рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░реЗрдВ рдФрд░ рд╕рдлрд▓рддрд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рддрдп рдХрд░реЗрдВ
2) рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХрд╛рд░рдЧрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЪреБрдиреЗрдВ
3) рд╕рд┐рдВрдХ рдкрд╛рде рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВ
рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрд╕реА рдЧреИрд░-рд╕рдордЭреМрддрд╛рдкреВрд░реНрдг рд╣реИред рдЕрдкрдбреЗрдЯреНрд╕ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдП рдЬрд╛ рд╕рдХреЗрдВ (рдЙрджрд╛.,
UPSERTрдХреЗ рд╕рд╛рде рдбрд┐рдЯрд░рдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд░реАрдХрдореНрдкреНрдпреВрдЯ)ред рдореБрдЭ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЗрдВ, рдмрд╛рдж рдореЗрдВ рдЖрдк рдЦреБрдж рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВрдЧреЗред4) рдмрдирд╛рдПрдБ, рдмреИрдХрдлрд┐рд▓ рдХрд░реЗрдВ, рдФрд░ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВ
4. рдорд┐рд╕рдореИрдЪ рдареАрдХ рдХрд░реЗрдВ; рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдПрдБ рдЬрдм рддрдХ рд╢реВрдиреНрдп (рдпрд╛ рд╕рд╣рдордд рдПрд░рд░ рдмрдЬрдЯ рдХреЗ рднреАрддрд░) рди рд╣реЛред
5) рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрдЯрдУрд╡рд░ рдХрд░реЗрдВ
6) рд╕рд╣реА рдЪреАрдЬрд╝реЛрдВ рдХреА рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХрд░реЗрдВ
рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдЯреВрд▓ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдПрдВ:
7) рдСрдкрд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрдЯрд░реЗрдЯ рдХрд░реЗрдВ
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди
рд╣рдордиреЗ рдкрд╣рд▓реЗ Normalization рдмрдирд╛рдо Denormalization рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдХрд╡рд░ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рддреНрд╡рд░рд┐рдд рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рд╣реИред
рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ
рдЗрд╕рдХреА рдХреАрдордд
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдФрд░ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬрд╝
рд╣рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рдЬреИрд╕реЗ рддрд░реАрдХреЗ рд╕реЗ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рдХреБрдЫ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╣рдВрдЧреЗ рдХреНрд╡реЗрд░реА рд░рд┐рдЬрд╝рд▓реНрдЯреНрд╕ рдХреЛ рдкрд░рд╕рд┐рд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдлрд░реНрд╕реНрдЯ-рдХреНрд▓рд╛рд╕ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджреЗрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХреБрдЫ рдЬреЙрдмреНрд╕, рдЯреНрд░рд┐рдЧрд░реНрд╕ рдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рд╕реЗ рдЦреБрдж рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд░рдЦрддреЗ рд╣реИрдВред
PostgreSQL
Postgres рдЖрдкрдХреЛ рд░реАрдб-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рд╢реЗрдкреНрд╕ рдХреЛ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рджреЗрддрд╛ рд╣реИред┬а
рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдХрд┐рд╕реА рдХреНрд╡реЗрд░реА рдХреЗ рд░рд┐рдЬрд╝рд▓реНрдЯ рдХреЛ рдкрд░рд╕рд┐рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░реАрдб рддреБрд░рдВрдд рд╣реЛрддреА рд╣реИред рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрдм рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдирд╛ рд╣реИ (рд╢реЗрдбреНрдпреВрд▓реНрдб рдпрд╛ рдРрдб-рд╣реЙрдХ), рдФрд░ рдЖрдк рдХрдирдХрд░реЗрдВрдЯрд▓реА рднреА рд░рд┐рдлреНрд░реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд░реАрдбрд░реНрд╕ рдмреНрд▓реЙрдХ рди рд╣реЛрдВред
рд╣рд▓реНрдХреА рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдореНрд╕ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдбреЗрд░рд╛рдЗрд╡реНрдб рд╡реИрд▓реНрдпреВрдЬрд╝ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рдФрд░ рдЖрдо рдлрд╝рд┐рд▓реНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВтАФрдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд┐рдВрдХ рд▓реЙрдЬрд┐рдХ рд▓рд┐рдЦреЗред┬а
рдЬрдм рдЖрдкрдХреЛ рд╕реЛрд░реНрд╕ рдФрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдХреЙрдкреА рдХреЗ рдмреАрдЪ рд╕реНрдЯреНрд░реЙрдиреНрдЧ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдЪрд╛рд╣рд┐рдП, рддреЛ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд░ рдпрд╛рдж рд░рдЦреЗрдВ, рд╡реЗ рдЖрдкрдХреЗ рд░рд╛рдЗрдЯ рдкрд╛рде рдкрд░ рдХрд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ!)ред рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡рди рдпрд╛ рдмреИрдЪ рд░рд┐рдлреНрд░реЗрд╢ рдХреЗ рд▓рд┐рдП, рдЖрдк Postgres рдХреЛ рд╢реЗрдбреНрдпреВрд▓рд░ (рдЙрджрд╛., pg_cron рдпрд╛ рдмрд╛рд╣рд░реА рдЬреЙрдм рд░рдирд░) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд▓реЙрдЬрд┐рдХрд▓ рд░реЗрдкреНрд▓рд┐рдХреЗрд╢рди/CDC рдХреЗ рд╕рд╛рде, рддрд╛рдХрд┐ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╡рд░реНрдХрд░ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдЖрдкрдХреЗ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯреЗрдмрд▓реНрд╕ рдХреЛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рд▓реА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд╣рд╛рдереЛрдВ-рд╣рд╛рде рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдХрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ PostgreSQL рдХреЛрд░реНрд╕ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
SQL Server
SQL Server рдЗрдВрдбреЗрдХреНрд╕реНрдб рд╡реНрдпреВрдЬрд╝ рдкрд░ рдХрд╛рдлреА рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛-рдСрди рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдЬреИрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЗрдВрдЬрди рд╣рд░ рдЗрдиреНрд╕рд░реНрдЯ/рдЕрдкрдбреЗрдЯ/рдбрд┐рд▓реАрдЯ рдкрд░ рд╡реНрдпреВ рдХреЛ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░реАрдб рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрддреА рд╣реИред рдирддреАрдЬрддрди, рдЕрдм рд░рд╛рдЗрдЯреНрд╕ рдХреЛ рдмреЗрд╕ рдЯреЗрдмрд▓реНрд╕ рдФрд░ рд╡реНрдпреВтАФрджреЛрдиреЛрдВ рдореЗрдВрдЯреЗрди рдХрд░рдиреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рднрд╛рд░реА OLTP рд╡рд░реНрдХрд▓реЛрдбреНрд╕ рдзреАрдореЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред┬а
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдкрд░рд╕рд┐рд╕реНрдЯреЗрдб рдХрдореНрдкреНрдпреВрдЯреЗрдб рдХреЙрд▓рдореНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рдВрдЧрд▓-рд░реЛ рдбреЗрд░рд╛рдЗрд╡реНрдб рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред┬а
рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓рдордирд╕реНрдЯреЛрд░ рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╡реЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдХреЛ рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрдВрдкреНрд░реЗрд╕ рдФрд░ рд╕реНрдХреИрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╢реБрд░реВ рд╕реЗ рдбреЗрдЯрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдЦрддреНрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Oracle
Oracle рдХреЗ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдкрд░рд┐рдкрдХреНрд╡ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ
FASTрд░рд┐рдлреНрд░реЗрд╢ рдЪреЗрдВрдЬрд▓реЙрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗрд╡рд▓ рдмрджрд▓рд╛ рд╣реБрдЖ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдпрд╛COMPLETEрд░рд┐рдлреНрд░реЗрд╢ рдЬрд╣рд╛рдБ рдЖрдк рдкреВрд░реЗ рд╡реНрдпреВ рдХреЛ рд░реАрдмрд┐рд▓реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВред┬аQuery Rewrite рдХреЗ рд╕рд╛рде, рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЕрдВрдбрд░рд▓рд╛рдЗрдирд┐рдВрдЧ рдЯреЗрдмрд▓реНрд╕ рдкрд░ рдХреНрд╡реЗрд░реА рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯреАрдореЛрдВ рдХреЛ SQL рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╕реНрдкреАрдб-рдЕрдк рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рддреЗрдЬрд╝ рд░реАрдб рдХрд╛ рдорддрд▓рдм рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо: рд▓реЙрдЧреНрд╕ рдореЗрдВрдЯреЗрди рдХрд░рдирд╛ рдФрд░ рд╡реНрдпреВрдЬрд╝ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдирд╛ рд░рд╛рдЗрдЯ рдФрд░ рдСрдкрд░реЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
MySQL / MariaDB
MySQL рдореЗрдВ рдиреЗрдЯрд┐рд╡ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдорддреМрд░ рдкрд░ рдлрд┐рдЬрд┐рдХрд▓ рдЯреЗрдмрд▓реНрд╕ + рд╢реЗрдбреНрдпреВрд▓реНрдб рдЬреЙрдмреНрд╕ рдпрд╛ рдЯреНрд░рд┐рдЧрд░реНрд╕ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВред┬а
рдЬрдирд░реЗрдЯреЗрдб рдХреЙрд▓рдореНрд╕ рд╕рд░рд▓ рдбреЗрд░рд╛рдЗрд╡реНрдб рд╡реИрд▓реНрдпреВрдЬрд╝ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ рд╕рдорд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд░рд┐рдлреНрд░реЗрд╢ рдХреИрдбреЗрдВрд╕ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд░рд╛рдЗрдЯ рдкрд╛рдереНрд╕ рдкрд░ рдЯреИрдХреНрд╕ рди рд▓рдЧрд╛ рджреЗрдВред рдХрдИ рдЯреАрдореЗрдВ рдЗрд╕реЗ рд░реАрдб рд░рд┐рдкреНрд▓рд┐рдХрд╛рдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреА рд╣реИрдВ рддрд╛рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреНрд╡реЗрд░реАрдЬрд╝ рдкреВрд░реА рддрд░рд╣ рдСрдлрд╝рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдБред
Snowflake / BigQuery (рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд▓реЗрдпрд░)
рдХреЙрд▓рдордирд░ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЪреМрдбрд╝реЗ, рд╕реНрдХреИрди-рдлреНрд░реЗрдВрдбрд▓реА, рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд╣реИрдВред рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рдЪреМрдбрд╝реА рдлреИрдХреНрдЯ рдЯреЗрдмрд▓реНрд╕ рдореЙрдбрд▓ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рд╕рд╣рд╛рдпрдХ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдмреЗрдХреНрдб-рдЗрди рд╣реЛрдВ, рдлрд┐рд░ рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ/рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕реНрдХреИрди рдкреНрд░реВрди рд╣реЛрдВред┬а
рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ рдФрд░ рд╢реЗрдбреНрдпреВрд▓реНрдб рдЯрд╛рд╕реНрдХреНрд╕/рдХреНрд╡реЗрд░реАрдЬрд╝ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ OLTP рдХреЛ рдЫреБрдП рдмрд┐рдирд╛ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рддрд╛рдЬрд╝рд╛ рд░рд╣реЗрдВред рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд░рд┐рдлреНрд░реЗрд╢ рдХреЙрд╕реНрдЯ рдХреЗ рдмрджрд▓реЗ рд╕реНрдХреЗрд▓ рдкрд░ рдмрд╣реБрдд рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓, рд╕рд╕реНрддреА рд░реАрдб рд▓реЗрддреЗ рд╣реИрдВред рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ BI рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрддреНрддрдо рд╣реИред
рдпрд╣ рд╣рдорд╛рд░реЗ PostgreSQL рдХреЛрд░реНрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдПрдбрд╡рд╛рдВрд╕реНрдб рд╣реИ, рддреЛ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣рдЬ рд╣реИрдВ, рдирд┐рдГрд╕рдВрдХреЛрдЪ рд╣рдорд╛рд░реЗ Snowflake рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдЪрдп рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБред
dbt (рдореЙрдбрд▓рд┐рдВрдЧ рдФрд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди)
dbt рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП тАЬрдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдРрдЬрд╝ рдХреЛрдбтАЭ рд▓реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдПрдХ рдмрд╛рд░ рдореЙрдбрд▓реНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рдЯреЗрдмрд▓, рд╡реНрдпреВ, рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд▓) рдЪреБрдирддреЗ рд╣реИрдВ, рдФрд░ dbt рдмрд┐рд▓реНрдбреНрд╕, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдФрд░ рдЯреЗрд╕реНрдЯреНрд╕ рд╕рдБрднрд╛рд▓рддрд╛ рд╣реИред рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯрд▓ рдореЙрдбрд▓реНрд╕ рдЦрд╛рд╕рдХрд░ рдЙрди рд╕рдорд░реА рдЯреЗрдмрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдирдпрд╛ рдбреЗрдЯрд╛ рдЕрдкреЗрдВрдб рдФрд░ рдорд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ!
CDC рдФрд░ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕
рдЬрдм рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрджрд▓рд╛рд╡ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрдВ, рддреЛ Change Data Capture рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред Debezium (рд╕реНрд╡-рд╣реЛрд╕реНрдЯреЗрдб) рдпрд╛ рдореИрдиреЗрдЬреНрдб рдХрдиреЗрдХреНрдЯрд░реНрд╕ (Fivetran, Airbyte) рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ OLTP рд╕реЗ рд░реЛ-рд▓реЗрд╡рд▓ рдЪреЗрдВрдЬрд┐рд╕ рдХреЛ рд╡рд░реНрдХрд░реНрд╕ рдпрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕реЗрдЬрд╝ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдЯреЗрдмрд▓реНрд╕, рдХрд╛рдЙрдВрдЯрд░реНрд╕, рдпрд╛ рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЗрд╡реЗрдВрдЯреБрдЕрд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ (рдбреИрд╢рдмреЛрд░реНрдбреНрд╕ рдФрд░ рдлреАрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛), рдФрд░ рд╕рдм рдХреБрдЫ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдореЗрдВ рдареВрдБрд╕рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИред рдЕрдкрдбреЗрдЯреНрд╕ рдХреЛ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд░рдЦреЗрдВ, рд▓реИрдЧ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ, рдФрд░ рд▓реЗрдЯ рдпрд╛ рдорд┐рд╕реНрдб рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреИрдХрдлрд┐рд▓ рдкрд╛рде рд░рдЦреЗрдВред
рдореБрдЦреНрдп рдмрд╛рддреЗрдВ рдФрд░ рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░
рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдКрдкрд░ рдкрд░рддрдмрджреНрдз рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рдЙрд╕рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВред рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд░рд╛рдЗрдЯ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрджрд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рднрд▓реА-рднрд╛рдБрддрд┐ рд╕рдордЭреЗ рдкрд╛рдереНрд╕ рдкрд░ рддреЗрдЬрд╝, рд╕рд░рд▓ рд░реАрдб рд▓реЗрддреЗ рд╣реИрдВред
рдпрд╛рдж рд░рдЦреЗрдВ: