рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

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

рдЬрд╛рдиреЗрдВ рдХрд┐ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреИрд╕реЗ рдЬреЙрдЗрдиреНрд╕ рдХрдо рдХрд░рдХреЗ рдФрд░ рдХреНрд╡реЗрд░реАрдЬрд╝ рд╕рд░рд▓ рдмрдирд╛рдХрд░ рд░реАрдб рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЯреНрд░реЗрдб-рдСрдл, рддрдХрдиреАрдХреЗрдВ, рдФрд░ рд╡реЗ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ рд╕рдордЭреЗрдВ рдЬреЛ рдЗрд╕реЗ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЗ рд▓рд┐рдП рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рддреЗ рд╣реИрдВред
┬╖ 15 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

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

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

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

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреНрдпрд╛ рд╣реИ?

рдпрджрд┐ рдЖрдк рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ рдпрд╣ рд╣реИ:┬а

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

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

Normalized: рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рдмрд╛рдБрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ 3NF/BCNF).

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

Unnormalized: рдХрдЪреНрдЪрд╛, рдПрдб-рд╣реЙрдХ рдпрд╛ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ рдбреЗрдЯрд╛ рдЬрд╣рд╛рдБ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдмрд╛рдзрд╛рдПрдБ рдареАрдХ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рд╣реБрдИрдВред рд╣рдо рдпрд╣рд╛рдБ рдпрд╣ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

SQL рдореЗрдВ рдЙрджрд╛рд╣рд░рдг

рдпрд╣рд╛рдБ SQL рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдФрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рджреГрд╢реНрдп рдмрдирд╛рддрд╛ рд╣реИред

Normalized modelling

-- Source of truth
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()
);

-- Typical report needs a join
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;

рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкрд╛рде рдХреЗ рд▓рд┐рдП рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб

-- Add redundant fields for faster reads
ALTER TABLE orders
  ADD COLUMN customer_name TEXT,
  ADD COLUMN customer_tier TEXT;

-- Now most reports avoid the join
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):

-- Read-optimised projection for a typical orders list
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
);

-- Initial backfill
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;

-- Index for fast filtering by day/customer
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;

-- Keep the redundant fields correct on insert/update
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();

-- Propagate customer name/tier changes to existing orders
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 рд░рд╛рдЗрдЯ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдХрдореНрдкреНрдпреВрдЯ рдХрд░рддрд╛ рд╣реИ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рдирд┐рдпрдВрддреНрд░рдг, рдХреНрд░реЙрд╕-рдЯреЗрдмрд▓ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдирд╣реАрдВ)
  • рд╕реНрдЯреЛрд░реНрдб рдХреЙрд▓рдо + рдЯреНрд░рд┐рдЧрд░/рдЬреЙрдм (рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдм/рдХреИрд╕реЗ рдмрджрд▓реЗ)
-- Generated column example (Postgres 12+; same-table expressions)
ALTER TABLE products
  ADD COLUMN price_with_tax NUMERIC(12,2) GENERATED ALWAYS AS (price * 1.20) STORED;

-- Counter maintained by triggers (likes per post)
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
);

-- Incremental upsert for "yesterday" (run hourly/15-min)
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) рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВрдЬрд╝ (рдкрд░рд╕рд┐рд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реА рд░рд┐рдЬрд╝рд▓реНрдЯреНрд╕)

рдХреНрдпрд╛: рдХрд┐рд╕реА рдорд╣рдВрдЧреА рдХреНрд╡реЗрд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд┐рдЬрд┐рдХрд▓ рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрдВрдбреЗрдХреНрд╕ рдХрд░ рд╕рдХреЗрдВред

рдХрдм: рд░рд┐рдЬрд╝рд▓реНрдЯ рд╕реЗрдЯ рдорд╣рдВрдЧрд╛, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реНрдерд┐рд░ рд╣реИ, рдФрд░ рдЖрдк рд░рд┐рдлреНрд░реЗрд╢ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕рд╣ рд╕рдХрддреЗ рд╣реИрдВред

-- Expensive report
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);

-- Make it fast to query
CREATE INDEX ON mv_category_sales (category_id, day);

-- Refresh patterns
-- Full, blocking:
REFRESH MATERIALIZED VIEW mv_category_sales;

-- Non-blocking reads (requires unique index on the MV):
-- 1) ensure a unique index exists (e.g., (category_id, day))
-- 2) then:
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
);

-- Build or rebuild card documents
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;

-- GIN index for JSON queries if needed
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) рдмрдирд╛рдПрдБ, рдмреИрдХрдлрд┐рд▓ рдХрд░реЗрдВ, рдФрд░ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВ

  1. рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ (рдЯреЗрдмрд▓реНрд╕, рдХреЙрд▓рдореНрд╕, рдЗрдВрдбреЗрдХреНрд╕реЗрдЬрд╝, рдЯреНрд░рд┐рдЧрд░реНрд╕/рдЬреЙрдмреНрд╕) рдмрдирд╛рдПрдВ рдкрд░ рдРрдк рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦреЗрдВред
  2. рд╕реНрд░реЛрдд-рд╕рддреНрдп рд╕реЗ рдмреИрдХрдлрд┐рд▓ рдХрд░реЗрдВред
  3. рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ:
-- Example parity check: orders_projection vs live join
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)ред
  • рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХрд╛рд░рдЧрд░ рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЪреБрдиреЗрдВ (рдПрдХ рд░реЗрдбрдВрдбреЗрдВрдЯ рдХреЙрд▓рдо, рдЫреЛрдЯрд╛ рдПрдЧреНрд░реАрдЧреЗрдЯ, рдпрд╛ рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╡реНрдпреВ)ред
  • рдлреНрд░реЗрд╢рдиреЗрд╕ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░рд╣реЗрдВ (рд╕реНрдЯреНрд░реЙрдиреНрдЧ рдмрдирд╛рдо рдЗрд╡реЗрдВрдЯреБрдЕрд▓ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА) рдФрд░ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд╕рд┐рдВрдХ рдмрдирд╛рдПрдБред
  • рдкрд╣рд▓реЗ/рдмрд╛рдж рдореЗрдВ рдорд╛рдкреЗрдВ, рдбреНрд░рд┐рдлреНрдЯ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ, рдФрд░ рд░реЛрд▓рдмреИрдХ рд╕реНрд╡рд┐рдЪ рдкрд╛рд╕ рд░рдЦреЗрдВред
  • рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рдЯреЗрдмрд▓реНрд╕ рдХреЛ рд╕реНрд░реЛрдд-рд╕рддреНрдп рдорд╛рдиреЗрдВ! рдбреАрдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реНрдб рд╣рд┐рд╕реНрд╕реЗ рд░реАрдб-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рдХреЙрдкреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
Marie Fayard

рд▓реЗрдЦрдХ

Marie Fayard

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

рд╡рд┐рд╖рдп