ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื”ื“ื•"ื— ืžืฆื™ื’ ื›ืžื” ื’ื™ืฉื•ืช ื”ืžืืคืฉืจื•ืช ืขืงื•ื‘ ืื—ืจ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืฉืื™ืœืชื•ืช SQL ื›ืืฉืจ ื™ืฉ ืžื™ืœื™ื•ื ื™ ืฉืื™ืœืชื•ืช ืžื”ืŸ ื‘ื™ื•ื, ื•ื™ืฉ ืžืื•ืช ืฉืจืชื™ PostgreSQL ืžื ื•ื˜ืจื™ื.

ืื™ืœื• ืคืชืจื•ื ื•ืช ื˜ื›ื ื™ื™ื ืžืืคืฉืจื™ื ืœื ื• ืœืขื‘ื“ ื‘ื™ืขื™ืœื•ืช ื›ืžื•ืช ื›ื–ื• ืฉืœ ืžื™ื“ืข, ื•ื›ื™ืฆื“ ื–ื” ืžืงืœ ืขืœ ื—ื™ื™ื• ืฉืœ ืžืคืชื— ืจื’ื™ืœ?


ืืช ืžื™ ื–ื” ืžืขื ื™ื™ืŸ? ื ื™ืชื•ื— ืฉืœ ื‘ืขื™ื•ืช ืกืคืฆื™ืคื™ื•ืช ื•ื˜ื›ื ื™ืงื•ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉื•ื ื•ืช ืฉืื™ืœืชื•ืช SQL ื•ืคืชืจื•ืŸ ื‘ืขื™ื•ืช DBA ื˜ื™ืคื•ืกื™ื•ืช ื‘-PostgreSQL - ืืชื” ื™ื›ื•ืœ ื’ื ืœืงืจื•ื ืกื“ืจืช ืžืืžืจื™ื ื‘ื ื•ืฉื ื–ื”.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)
ืฉืžื™ ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘, ืื ื™ ืžื™ื™ืฆื’ ื—ื‘ืจืช ื˜ื ืกื•ืจ. ื‘ืื•ืคืŸ ืกืคืฆื™ืคื™, ืื ื™ ืžืชืžื—ื” ื‘ืขื‘ื•ื“ื” ืขื ืžืื’ืจื™ ืžื™ื“ืข ื‘ื—ื‘ืจื” ืฉืœื ื•.

ื”ื™ื•ื ืืกืคืจ ืœื›ื ื›ื™ืฆื“ ืื ื• ืžื™ื™ืขืœื™ื ืฉืื™ืœืชื•ืช, ื›ืืฉืจ ืื™ื ื›ื ืฆืจื™ื›ื™ื "ืœื‘ืจื•ืจ" ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืฉืื™ืœืชื” ื‘ื•ื“ื“ืช, ืืœื ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ื”ืžื•ื ื™ื”ื. ื›ืฉื™ืฉ ืžื™ืœื™ื•ื ื™ ื‘ืงืฉื•ืช, ื•ืืชื” ืฆืจื™ืš ืœืžืฆื•ื ื›ืžื” ื’ื™ืฉื•ืช ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื” ื”ื’ื“ื•ืœื” ื”ื–ื•.

ื‘ืื•ืคืŸ ื›ืœืœื™, Tensor ืขื‘ื•ืจ ืžื™ืœื™ื•ืŸ ื”ืœืงื•ื—ื•ืช ืฉืœื ื• ื”ื•ื VLSI ื”ื•ื ื”ื™ื™ืฉื•ื ืฉืœื ื•: ืจืฉืช ื—ื‘ืจืชื™ืช ืืจื’ื•ื ื™ืช, ืคืชืจื•ื ื•ืช ืœืชืงืฉื•ืจืช ื•ื™ื“ืื•, ืœื–ืจื™ืžืช ืžืกืžื›ื™ื ืคื ื™ืžื™ืช ื•ื—ื™ืฆื•ื ื™ืช, ืžืขืจื›ื•ืช ื”ื ื”ืœืช ื—ืฉื‘ื•ื ื•ืช ืœื—ืฉื‘ื•ื ืื•ืช ื•ืžื—ืกื ื™ื,... ื›ืœื•ืžืจ, "ืžื’ื” ืงื•ืžื‘ื™ื ื”" ื›ื–ื• ืœื ื™ื”ื•ืœ ืขืกืงื™ ืžืฉื•ืœื‘, ื‘ื• ื™ืฉ ื™ื•ืชืจ ืž-100 ืฉื•ื ื•ืช ืคืจื•ื™ืงื˜ื™ื ืคื ื™ืžื™ื™ื.

ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉื›ื•ืœื ื™ืขื‘ื“ื• ื•ื™ืชืคืชื—ื• ื›ืจื’ื™ืœ, ื™ืฉ ืœื ื• 10 ืžืจื›ื–ื™ ืคื™ืชื•ื— ื‘ืจื—ื‘ื™ ื”ืืจืฅ, ื•ื‘ื”ื ืขื•ื“ 1000 ืžืคืชื—ื™ื.

ืื ื• ืขื•ื‘ื“ื™ื ืขื PostgreSQL ืžืื– 2008 ื•ืฆื‘ืจื ื• ื›ืžื•ืช ื’ื“ื•ืœื” ืžืžื” ืฉืื ื• ืžืขื‘ื“ื™ื - ื ืชื•ื ื™ ืœืงื•ื—ื•ืช, ืกื˜ื˜ื™ืกื˜ื™ื™ื, ืื ืœื™ื˜ื™ื™ื, ื ืชื•ื ื™ื ืžืžืขืจื›ื•ืช ืžื™ื“ืข ื—ื™ืฆื•ื ื™ื•ืช - ื™ื•ืชืจ ืž-400TB. ื™ืฉ ื›-250 ืฉืจืชื™ื ื‘ื™ื™ืฆื•ืจ ื‘ืœื‘ื“, ื•ื‘ืกืš ื”ื›ืœ ื™ืฉ ื›-1000 ืฉืจืชื™ ืžืกื“ ื ืชื•ื ื™ื ืฉืื ื—ื ื• ืžืคืงื—ื™ื ืขืœื™ื”ื.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

SQL ื”ื™ื ืฉืคื” ื”ืฆื”ืจืชื™ืช. ืืชื” ืœื ืžืชืืจ "ืื™ืš" ืžืฉื”ื• ืฆืจื™ืš ืœืขื‘ื•ื“, ืืœื "ืžื”" ืืชื” ืจื•ืฆื” ืœื”ืฉื™ื’. ื”-DBMS ื™ื•ื“ืข ื˜ื•ื‘ ื™ื•ืชืจ ืื™ืš ืœืขืฉื•ืช JOIN - ืื™ืš ืœื—ื‘ืจ ืืช ื”ื˜ื‘ืœืื•ืช ืฉืœืš, ืื™ืœื• ืชื ืื™ื ืœื”ืฆื™ื‘, ืžื” ื™ืขื‘ื•ืจ ื‘ืื™ื ื“ืงืก, ืžื” ืœื...

ื›ืžื” DBMSs ืžืงื‘ืœื™ื ืจืžื–ื™ื: "ืœื, ื—ื‘ืจ ืืช ืฉืชื™ ื”ื˜ื‘ืœืื•ืช ื”ืืœื” ื‘ืชื•ืจ ื›ื–ื” ื•ืื—ืจ", ืื‘ืœ PostgreSQL ืœื ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช. ื–ื• ื”ืขืžื“ื” ื”ืžื•ื“ืขืช ืฉืœ ืžืคืชื—ื™ื ืžื•ื‘ื™ืœื™ื: "ืื ื—ื ื• ืžืขื“ื™ืคื™ื ืœืกื™ื™ื ืืช ื›ืœื™ ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื”ืฉืื™ืœืชื•ืช ืžืืฉืจ ืœืืคืฉืจ ืœืžืคืชื—ื™ื ืœื”ืฉืชืžืฉ ื‘ืกื•ื’ ืฉืœ ืจืžื–ื™ื."

ืื‘ืœ, ืœืžืจื•ืช ื”ืขื•ื‘ื“ื” ืฉ-PostgreSQL ืื™ื ื• ืžืืคืฉืจ ืœ"ื—ื•ืฅ" ืœืฉืœื•ื˜ ื‘ืขืฆืžื•, ื”ื•ื ืžืืคืฉืจ ื‘ืื•ืคืŸ ืžื•ืฉืœื ืœืจืื•ืช ืžื” ืงื•ืจื” ื‘ืชื•ื›ื•ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ ืืช ื”ืฉืื™ืœืชื” ืฉืœืš, ื•ื”ื™ื›ืŸ ื”ื™ื ื ืชืงืœืช ื‘ื‘ืขื™ื•ืช.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื‘ืื•ืคืŸ ื›ืœืœื™, ืขื ืื™ืœื• ื‘ืขื™ื•ืช ืงืœืืกื™ื•ืช ืžื’ื™ืข ื‘ื“ืจืš ื›ืœืœ ืžืคืชื— [ืœ-DBA]? "ื›ืืŸ ืžื™ืœืื ื• ืืช ื”ื‘ืงืฉื”, ื• ื”ื›ืœ ืื™ื˜ื™ ืืฆืœื ื•, ื”ื›ืœ ืชืœื•ื™, ืžืฉื”ื• ืงื•ืจื”... ืื™ื–ื• ืฆืจื•ืช!โ€

ื”ืกื™ื‘ื•ืช ื›ืžืขื˜ ืชืžื™ื“ ื–ื”ื•ืช:

  • ืืœื’ื•ืจื™ืชื ืฉืื™ืœืชื” ืœื ื™ืขื™ืœ
    ืžืคืชื—: "ืขื›ืฉื™ื• ืื ื™ ื ื•ืชืŸ ืœื• 10 ื˜ื‘ืœืื•ืช ื‘-SQL ื“ืจืš JOIN..." - ื•ืžืฆืคื” ืฉื”ืชื ืื™ื ืฉืœื• ื‘ืื•ืจื— ืคืœื "ื™ืชื™ืจื•" ื‘ื™ืขื™ืœื•ืช ื•ื”ื•ื ื™ืงื‘ืœ ื”ื›ืœ ื‘ืžื”ื™ืจื•ืช. ืื‘ืœ ื ื™ืกื™ื ืœื ืงื•ืจื™ื, ื•ื›ืœ ืžืขืจื›ืช ืขื ืฉื•ื ื•ืช ื›ื–ื• (10 ื˜ื‘ืœืื•ืช ื‘-FROM ืื—ื“) ืชืžื™ื“ ื ื•ืชื ืช ืื™ื–ื•ืฉื”ื™ ืฉื’ื™ืื”. [ืžืืžืจ]
  • ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžื™ื•ืฉื ืช
    ื ืงื•ื“ื” ื–ื• ืจืœื•ื•ื ื˜ื™ืช ืžืื•ื“ ืกืคืฆื™ืคื™ืช ืขื‘ื•ืจ PostgreSQL, ื›ืืฉืจ "ืฉืคื›ืช" ืžืขืจืš ื ืชื•ื ื™ื ื’ื“ื•ืœ ืขืœ ื”ืฉืจืช, ืฉืœื— ื‘ืงืฉื”, ื•ื”ื•ื "ืžืกืงืก" ืืช ื”ื˜ืื‘ืœื˜ ืฉืœืš. ื›ื™ ืืชืžื•ืœ ื”ื™ื• ื‘ื• 10 ืจืฉื•ืžื•ืช, ื•ื”ื™ื•ื ื™ืฉ 10 ืžื™ืœื™ื•ืŸ, ืื‘ืœ PostgreSQL ืขื“ื™ื™ืŸ ืœื ืžื•ื“ืข ืœื–ื”, ื•ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืกืคืจ ืืช ื–ื” ืขืœ ื–ื”. [ืžืืžืจ]
  • "ืชืงืข" ืžืฉืื‘ื™ื
    ื”ืชืงื ืช ืžืกื“ ื ืชื•ื ื™ื ื’ื“ื•ืœ ื•ืขืžื•ืก ื‘ื›ื‘ื“ื•ืช ืขืœ ืฉืจืช ื—ืœืฉ ืฉืื™ืŸ ืœื• ืžืกืคื™ืง ื‘ื™ืฆื•ืขื™ ื“ื™ืกืง, ื–ื™ื›ืจื•ืŸ ืื• ืžืขื‘ื“. ื•ื–ื” ื”ื›ืœ... ืื™ืคืฉื”ื• ื™ืฉ ืชืงืจืช ื‘ื™ืฆื•ืขื™ื ืฉืžืขืœื™ื” ื›ื‘ืจ ืื™ ืืคืฉืจ ืœืงืคื•ืฅ.
  • ื—ืกื™ืžื”
    ื–ื• ื ืงื•ื“ื” ืงืฉื”, ืื‘ืœ ื”ืŸ ืจืœื•ื•ื ื˜ื™ื•ืช ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ืฉืื™ืœืชื•ืช ืฉื™ื ื•ื™ ืฉื•ื ื•ืช (INSERT, UPDATE, DELETE) - ื–ื” ื ื•ืฉื ื’ื“ื•ืœ ื ืคืจื“.

ืžืงื‘ืœ ืชื•ื›ื ื™ืช

...ื•ืœื›ืœ ื”ืฉืืจ ืื ื—ื ื• ืฆืจื™ืš ืชื•ื›ื ื™ืช! ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืจืื•ืช ืžื” ืงื•ืจื” ื‘ืชื•ืš ื”ืฉืจืช.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืชื•ื›ื ื™ืช ื‘ื™ืฆื•ืข ืฉืื™ืœืชื” ืขื‘ื•ืจ PostgreSQL ื”ื™ื ืขืฅ ืฉืœ ืืœื’ื•ืจื™ืชื ื‘ื™ืฆื•ืข ืฉืื™ืœืชื” ื‘ื™ื™ืฆื•ื’ ื˜ืงืกื˜. ื“ื•ื•ืงื ื”ืืœื’ื•ืจื™ืชื, ื›ืชื•ืฆืื” ืžื ื™ืชื•ื— ืฉืœ ื”ืžืชื›ื ืŸ, ื ืžืฆื ื›ื™ืขื™ืœ ื‘ื™ื•ืชืจ.

ื›ืœ ืฆื•ืžืช ืขืฅ ื”ื•ื ืคืขื•ืœื”: ืฉืœื™ืคืช ื ืชื•ื ื™ื ืžื˜ื‘ืœื” ืื• ืื™ื ื“ืงืก, ื‘ื ื™ื™ืช ืžืคืช ืกื™ื‘ื™ื•ืช, ืฆื™ืจื•ืฃ ืฉืชื™ ื˜ื‘ืœืื•ืช, ื”ืฆื˜ืจืคื•ืช, ื”ืฆืœื‘ื” ืื• ืื™ ื”ื›ืœืœื” ืฉืœ ื‘ื—ื™ืจื•ืช. ื‘ื™ืฆื•ืข ืฉืื™ืœืชื” ื›ืจื•ืš ื‘ื”ืœื™ื›ื” ื‘ืฆืžืชื™ื ืฉืœ ืขืฅ ื–ื”.

ื›ื“ื™ ืœืงื‘ืœ ืืช ืชื•ื›ื ื™ืช ื”ืฉืื™ืœืชื•ืช, ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ื”ื™ื ืœื‘ืฆืข ืืช ื”ื”ืฆื”ืจื” EXPLAIN. ื›ื“ื™ ืœืงื‘ืœ ืืช ื›ืœ ื”ืชื›ื•ื ื•ืช ื”ืืžื™ืชื™ื•ืช, ื›ืœื•ืžืจ ืœื‘ืฆืข ืฉืื™ืœืชื” ืขืœ ื”ื‘ืกื™ืก ื‘ืคื•ืขืœ - EXPLAIN (ANALYZE, BUFFERS) SELECT ....

ื”ื—ืœืง ื”ืจืข: ื›ืฉืืชื” ืžืคืขื™ืœ ืืช ื–ื”, ื–ื” ืงื•ืจื” "ื›ืืŸ ื•ืขื›ืฉื™ื•", ืื– ื–ื” ืžืชืื™ื ืจืง ืœื ื™ืคื•ื™ ื‘ืื’ื™ื ืžืงื•ืžื™. ืื ืืชื” ืœื•ืงื— ืฉืจืช ื˜ืขื•ืŸ ืžืื•ื“ ืฉื ืžืฆื ืชื—ืช ื–ืจื™ืžื” ื—ื–ืงื” ืฉืœ ืฉื™ื ื•ื™ื™ื ื‘ื ืชื•ื ื™ื, ื•ืชืจืื”: "ืื•ื™! ื›ืืŸ ื™ืฉ ืœื ื• ื‘ื™ืฆื•ืข ืื™ื˜ื™ืกื™ื” ื‘ึผึทืงึธืฉืึธื”." ืœืคื ื™ ื—ืฆื™ ืฉืขื”, ืฉืขื” - ื‘ื–ืžืŸ ืฉื”ืจืฆืช ื•ืงื™ื‘ืœืช ืืช ื”ื‘ืงืฉื” ื”ื–ื• ืžื”ืœื•ื’ื™ื, ื•ื”ื—ื–ืจืช ืื•ืชื” ืœืฉืจืช, ื›ืœ ืžืขืจืš ื”ื ืชื•ื ื™ื ื•ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ืฉืœืš ื”ืฉืชื ื•. ืืชื” ืžืคืขื™ืœ ืื•ืชื• ื›ื“ื™ ืœืืชืจ ื‘ืื’ื™ื - ื•ื”ื•ื ืคื•ืขืœ ื‘ืžื”ื™ืจื•ืช! ื•ืืชื” ืœื ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืœืžื”, ืœืžื” ื–ื” ื”ื™ื” ืœืื˜.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืขืœ ืžื ืช ืœื”ื‘ื™ืŸ ืžื” ืงืจื” ื‘ื“ื™ื•ืง ื‘ืจื’ืข ืฉื‘ื• ื‘ื•ืฆืขื” ื”ื‘ืงืฉื” ื‘ืฉืจืช, ื›ืชื‘ื• ืื ืฉื™ื ื—ื›ืžื™ื ืžื•ื“ื•ืœ auto_explain. ื”ื•ื ืงื™ื™ื ื›ืžืขื˜ ื‘ื›ืœ ื”ื”ืคืฆื•ืช ื”ื ืคื•ืฆื•ืช ื‘ื™ื•ืชืจ ืฉืœ PostgreSQL, ื•ื ื™ืชืŸ ืคืฉื•ื˜ ืœื”ืคืขื™ืœ ืื•ืชื• ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”.

ืื ื”ื•ื ืžื‘ื™ืŸ ืฉื‘ืงืฉื” ื›ืœืฉื”ื™ ืคื•ืขืœืช ื™ื•ืชืจ ืžื”ืžื’ื‘ืœื” ืฉืืžืจืช ืœื”, ื”ื™ื ืขื•ืฉื” ื–ืืช "ืชืžื•ื ื”" ืฉืœ ื”ืชื•ื›ื ื™ืช ืฉืœ ื‘ืงืฉื” ื–ื• ื•ื›ื•ืชื‘ืช ืื•ืชื ื™ื—ื“ ื‘ื™ื•ืžืŸ.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื”ื›ืœ ื ืจืื” ื‘ืกื“ืจ ืขื›ืฉื™ื•, ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœื™ื•ืžืŸ ื•ืจื•ืื™ื ืฉื... [ื˜ืงืกื˜ ื›ืฃ ืจื’ืœ]. ืื‘ืœ ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœื”ื’ื™ื“ ืฉื•ื ื“ื‘ืจ ืขืœ ื–ื”, ืžืœื‘ื“ ื”ืขื•ื‘ื“ื” ืฉื–ื• ืชื•ื›ื ื™ืช ืžืฆื•ื™ื ืช ื›ื™ ื–ื” ืœืงื— 11ms ืœื‘ื™ืฆื•ืข.

ื”ื›ืœ ื ืจืื” ื‘ืกื“ืจ - ืื‘ืœ ืฉื•ื ื“ื‘ืจ ืœื ื‘ืจื•ืจ ืžื” ื‘ืืžืช ืงืจื”. ื—ื•ืฅ ืžื”ื–ืžืŸ ื”ื›ืœืœื™, ืื ื—ื ื• ืœื ืžืžืฉ ืจื•ืื™ื ื›ืœื•ื. ืžื›ื™ื•ื•ืŸ ืฉื”ืกืชื›ืœื•ืช ืขืœ "ื›ื‘ืฉ" ื›ื–ื” ืฉืœ ื˜ืงืกื˜ ืจื’ื™ืœ ื”ื™ื ื‘ื“ืจืš ื›ืœืœ ืœื ื•ื™ื–ื•ืืœื™ืช.

ืื‘ืœ ื’ื ืื ื–ื” ืœื ื‘ืจื•ืจ, ื’ื ืื ื–ื” ืœื ื ื•ื—, ื™ืฉ ื‘ืขื™ื•ืช ืขืงืจื•ื ื™ื•ืช ื™ื•ืชืจ:

  • ื”ืฆื•ืžืช ืžืฆื™ื™ืŸ ืกื›ื•ื ื”ืžืฉืื‘ื™ื ืฉืœ ื›ืœ ื”ืžืฉื ื” ืžืชื—ืชื™ื•. ื›ืœื•ืžืจ, ืืชื” ืœื ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื’ืœื•ืช ื›ืžื” ื–ืžืŸ ื”ื•ืฉืงืข ื‘ืกืจื™ืงืช ื”ืื™ื ื“ืงืก ื”ืกืคืฆื™ืคื™ืช ื”ื–ื• ืื ื™ืฉ ืชื ืื™ ืžืงื•ื ืŸ ืชื—ืชื™ื”. ืขืœื™ื ื• ืœื”ืกืชื›ืœ ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ื›ื“ื™ ืœืจืื•ืช ืื ื™ืฉ "ื™ืœื“ื™ื" ื•ืžืฉืชื ื™ื ืžื•ืชื ื™ื, CTEs ื‘ืคื ื™ื - ื•ืœื”ืคื—ื™ืช ืืช ื›ืœ ื–ื” "ื‘ืžื•ื— ืฉืœื ื•".
  • ื ืงื•ื“ื” ืฉื ื™ื™ื”: ื”ื–ืžืŸ ืฉืžืฆื•ื™ืŸ ืขืœ ื”ืฆื•ืžืช ื”ื•ื ื–ืžืŸ ื‘ื™ืฆื•ืข ืฉืœ ืฆื•ืžืช ื‘ื•ื“ื“. ืื ื”ืฆื•ืžืช ื”ื–ื” ื‘ื•ืฆืข ื›ืชื•ืฆืื”, ืœืžืฉืœ, ืžืœื•ืœืื” ื“ืจืš ืจืฉื•ืžื•ืช ื˜ื‘ืœื” ืžืกืคืจ ืคืขืžื™ื, ืื–ื™ ืžืกืคืจ ื”ืœื•ืœืื•ืช - ืžื—ื–ื•ืจื™ื ืฉืœ ืฆื•ืžืช ื–ื” - ื’ื“ืœ ื‘ืชื•ื›ื ื™ืช. ืื‘ืœ ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ื”ืื˜ื•ืžื™ ืขืฆืžื• ื ืฉืืจ ื–ื”ื” ืžื‘ื—ื™ื ืช ื”ืชื•ื›ื ื™ืช. ื›ืœื•ืžืจ, ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ืžื” ื–ืžืŸ ื”ืฆื•ืžืช ื”ื–ื” ื‘ื•ืฆืข ื‘ืกืš ื”ื›ืœ, ืืชื” ืฆืจื™ืš ืœื”ื›ืคื™ืœ ื“ื‘ืจ ืื—ื“ ื‘ืฉื ื™ - ืฉื•ื‘, "ื‘ืจืืฉ ืฉืœืš."

ื‘ืžืฆื‘ื™ื ื›ืืœื”, ื”ื‘ื™ื ื• "ืžื™ ื”ื—ื•ืœื™ื” ื”ื—ืœืฉื” ื‘ื™ื•ืชืจ?" ื›ืžืขื˜ ื‘ืœืชื™ ืืคืฉืจื™. ืœื›ืŸ, ืืคื™ืœื• ื”ืžืคืชื—ื™ื ืขืฆืžื ื›ื•ืชื‘ื™ื ื‘"ืžื“ืจื™ืš" ืืช ื–ื” "ื”ื‘ื ืช ืชื•ื›ื ื™ืช ื”ื™ื ืืžื ื•ืช ืฉื™ืฉ ืœืœืžื•ื“, ืœื”ืชื ืกื•ืช...".

ืื‘ืœ ื™ืฉ ืœื ื• 1000 ืžืคืชื—ื™ื, ื•ืืชื” ืœื ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืช ื”ื—ื•ื•ื™ื” ื”ื–ื• ืœื›ืœ ืื—ื“ ืžื”ื. ืื ื™, ืืชื”, ื”ื•ื ื™ื•ื“ืข, ืื‘ืœ ืžื™ืฉื”ื• ืฉื ื›ื‘ืจ ืœื ื™ื•ื“ืข. ืื•ืœื™ ื”ื•ื ื™ืœืžื“, ืื• ืื•ืœื™ ืœื, ืื‘ืœ ื”ื•ื ืฆืจื™ืš ืœืขื‘ื•ื“ ืขื›ืฉื™ื• - ื•ืžืื™ืคื” ื”ื•ื ื™ืงื‘ืœ ืืช ื”ื ื™ืกื™ื•ืŸ ื”ื–ื”?

ืชื›ื ื•ืŸ ื”ื“ืžื™ื”

ืœื›ืŸ, ื”ื‘ื ื• ืฉื›ื“ื™ ืœื”ืชืžื•ื“ื“ ืขื ื”ื‘ืขื™ื•ืช ื”ืœืœื•, ืื ื—ื ื• ืฆืจื™ื›ื™ื ื”ื“ืžื™ื” ื˜ื•ื‘ื” ืฉืœ ื”ืชื•ื›ื ื™ืช. [ืžืืžืจ]

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืงื•ื“ื ื›ืœ ืขื‘ืจื ื• "ื“ืจืš ื”ืฉื•ืง" - ื‘ื•ืื• ื ืกืชื›ืœ ื‘ืื™ื ื˜ืจื ื˜ ื›ื“ื™ ืœืจืื•ืช ืžื” ื‘ื›ืœืœ ืงื™ื™ื.

ืื‘ืœ ื”ืชื‘ืจืจ ืฉื™ืฉ ืžืขื˜ ืžืื•ื“ ืคืชืจื•ื ื•ืช "ื—ื™ื™ื" ื™ื—ืกื™ืช ืฉืžืชืคืชื—ื™ื ืคื—ื•ืช ืื• ื™ื•ืชืจ - ืคืฉื•ื˜ื• ื›ืžืฉืžืขื•, ืจืง ืื—ื“: ืœื”ืกื‘ื™ืจ.depesz.com ืžืืช ื”ื•ื‘ืจื˜ ืœื•ื‘ืฆ'ื‘ืกืงื™. ื›ืืฉืจ ืืชื” ืžื–ื™ืŸ ืืช ื”ืฉื“ื” "ืคื™ื“" ื™ื™ืฆื•ื’ ื˜ืงืกื˜ ืฉืœ ื”ืชื•ื›ื ื™ืช, ื”ื•ื ืžืฆื™ื’ ืœืš ื˜ื‘ืœื” ืขื ื”ื ืชื•ื ื™ื ื”ืžื ืชื—ื™ื:

  • ื–ืžืŸ ื”ืขื™ื‘ื•ื“ ืฉืœ ื”ืฆื•ืžืช ืขืฆืžื•
  • ื”ื–ืžืŸ ื”ื›ื•ืœืœ ืขื‘ื•ืจ ื›ืœ ื”ืžืฉื ื”
  • ืžืกืคืจ ื”ืจืฉื•ืžื•ืช ืฉืื•ื—ื–ืจื• ืฉื”ื™ื• ืฆืคื•ื™ื•ืช ืกื˜ื˜ื™ืกื˜ื™ืช
  • ื’ื•ืฃ ื”ืฆื•ืžืช ืขืฆืžื•

ืœืฉื™ืจื•ืช ื–ื” ื™ืฉ ื’ื ืืช ื”ื™ื›ื•ืœืช ืœืฉืชืฃ ืืจื›ื™ื•ืŸ ืฉืœ ืงื™ืฉื•ืจื™ื. ื–ืจืงืช ืœืฉื ืืช ื”ืชื•ื›ื ื™ืช ืฉืœืš ื•ืืžืจืช: "ื”ื™ื™, ื•ืืกื™ื”, ื”ื ื” ืงื™ืฉื•ืจ, ืžืฉื”ื• ืœื ื‘ืกื“ืจ ืฉื."

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืื‘ืœ ื™ืฉ ื’ื ื‘ืขื™ื•ืช ืงื˜ื ื•ืช.

ืจืืฉื™ืช, ื›ืžื•ืช ืขืฆื•ืžื” ืฉืœ "ื”ืขืชืง-ื”ื“ื‘ืง". ืืชื” ืœื•ืงื— ื—ืชื™ื›ื” ืžื”ื‘ื•ืœ, ืชื•ืงืข ืื•ืชื” ืฉื, ื•ืฉื•ื‘, ื•ืฉื•ื‘.

ืฉื ื™ืช, ืื™ืŸ ื ื™ืชื•ื— ืฉืœ ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ื ืงืจืื™ื - ืื•ืชื ืžืื’ืจื™ื ืฉืžื•ืฆื™ืื™ื EXPLAIN (ANALYZE, BUFFERS), ืื ื—ื ื• ืœื ืจื•ืื™ื ืืช ื–ื” ื›ืืŸ. ื”ื•ื ืคืฉื•ื˜ ืœื ื™ื•ื“ืข ืื™ืš ืœืคืจืง ืื•ืชื, ืœื”ื‘ื™ืŸ ืื•ืชื ื•ืœืขื‘ื•ื“ ืื™ืชื. ื›ืืฉืจ ืืชื” ืงื•ืจื ื”ืจื‘ื” ื ืชื•ื ื™ื ื•ืžื‘ื™ืŸ ืฉืื•ืœื™ ืืชื” ืžืงืฆื” ืœื ื ื›ื•ืŸ ืืช ื”ื“ื™ืกืง ื•ืืช ืžื˜ืžื•ืŸ ื”ื–ื™ื›ืจื•ืŸ, ืžื™ื“ืข ื–ื” ื—ืฉื•ื‘ ืžืื•ื“.

ื”ื ืงื•ื“ื” ื”ืฉืœื™ืœื™ืช ื”ืฉืœื™ืฉื™ืช ื”ื™ื ื”ืคื™ืชื•ื— ื”ื—ืœืฉ ืžืื•ื“ ืฉืœ ื”ืคืจื•ื™ืงื˜ ื”ื–ื”. ื”ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ืงื˜ื ื•ืช ืžืื•ื“, ื–ื” ื˜ื•ื‘ ืื ืคืขื ื‘ื—ืฆื™ ืฉื ื”, ื•ื”ืงื•ื“ ื ืžืฆื ื‘ืคืจืœ.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืื‘ืœ ื–ื” ื”ื›ืœ "ืžื™ืœื™ื", ืื™ื›ืฉื”ื• ื™ื›ื•ืœื ื• ืœื—ื™ื•ืช ืขื ื–ื”, ืื‘ืœ ื™ืฉ ื“ื‘ืจ ืื—ื“ ืฉื”ืจื—ื™ืง ืื•ืชื ื• ืžืื•ื“ ืžื”ืฉื™ืจื•ืช ื”ื–ื”. ืืœื• ื”ืŸ ืฉื’ื™ืื•ืช ื‘ื ื™ืชื•ื— ืฉืœ Common Table Expression (CTE) ื•ืฆืžืชื™ื ื“ื™ื ืžื™ื™ื ืฉื•ื ื™ื ื›ืžื• InitPlan/SubPlan.

ืื ืืชื” ืžืืžื™ืŸ ืœืชืžื•ื ื” ื”ื–ื•, ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ื”ื›ื•ืœืœ ืฉืœ ื›ืœ ืฆื•ืžืช ื‘ื•ื“ื“ ื’ื“ื•ืœ ืžื–ืžืŸ ื”ื‘ื™ืฆื•ืข ื”ื›ื•ืœืœ ืฉืœ ื”ื‘ืงืฉื” ื›ื•ืœื”. ื–ื” ืคืฉื•ื˜ - ื–ืžืŸ ื”ื™ืฆื™ืจื” ืฉืœ CTE ื–ื” ืœื ื”ื•ืคื—ืช ืžืฆื•ืžืช ื”-CTE Scan. ืœื›ืŸ, ืื ื—ื ื• ื›ื‘ืจ ืœื ื™ื•ื“ืขื™ื ืืช ื”ืชืฉื•ื‘ื” ื”ื ื›ื•ื ื” ืœื›ืžื” ื–ืžืŸ ืืจื›ื” ืกืจื™ืงืช ื”-CTE ืขืฆืžื”.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื•ืื– ื”ื‘ื ื• ืฉื”ื’ื™ืข ื”ื–ืžืŸ ืœื›ืชื•ื‘ ื‘ืขืฆืžื ื• - ื™ื•ื”ืจื”! ื›ืœ ืžืคืชื— ืื•ืžืจ: "ืขื›ืฉื™ื• ื ื›ืชื•ื‘ ืžืฉืœื ื•, ื–ื” ื™ื”ื™ื” ืกื•ืคืจ ืงืœ!"

ืœืงื—ื ื• ืขืจื™ืžื” ืื•ืคื™ื™ื ื™ืช ืœืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜: ืœื™ื‘ื” ื”ืžื‘ื•ืกืกืช ืขืœ Node.js + Express, ืขืžื•ืกื” ื‘-Bootstrap ื•-D3.js ืขื‘ื•ืจ ื“ื™ืื’ืจืžื•ืช ื™ืคื•ืช. ื•ื”ืฆื™ืคื™ื•ืช ืฉืœื ื• ื”ื™ื• ืžื•ืฆื“ืงื•ืช ืœื—ืœื•ื˜ื™ืŸ - ืงื™ื‘ืœื ื• ืืช ืื‘ ื”ื˜ื™ืคื•ืก ื”ืจืืฉื•ืŸ ืชื•ืš ืฉื‘ื•ืขื™ื™ื:

  • ืžื ืชื— ืชื•ื›ื ื™ืช ืžื•ืชืืžืช ืื™ืฉื™ืช
    ื›ืœื•ืžืจ, ื›ืขืช ืื ื• ื™ื›ื•ืœื™ื ืœื ืชื— ื›ืœ ืชื•ื›ื ื™ืช ืžืืœื• ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ PostgreSQL.
  • ื ื™ืชื•ื— ื ื›ื•ืŸ ืฉืœ ืฆืžืชื™ื ื“ื™ื ืžื™ื™ื - ืกืจื™ืงืช CTE, InitPlan, SubPlan
  • ื ื™ืชื•ื— ื”ืชืคืœื’ื•ืช ืžืื’ืจื™ื - ืื™ืคื” ื“ืคื™ ื ืชื•ื ื™ื ื ืงืจืื™ื ืžื”ื–ื™ื›ืจื•ืŸ, ืื™ืคื” ืžื”ืžื˜ืžื•ืŸ ื”ืžืงื•ืžื™, ืื™ืคื” ืžื”ื“ื™ืกืง
  • ืงื™ื‘ืœ ื‘ื”ื™ืจื•ืช
    ื›ื“ื™ ืœื "ืœื—ืคื•ืจ" ืืช ื›ืœ ื–ื” ื‘ื™ื•ืžืŸ, ืืœื ืœืจืื•ืช ืืช "ื”ื—ื•ืœื™ื” ื”ื—ืœืฉื”" ืžื™ื“ ื‘ืชืžื•ื ื”.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื™ืฉ ืœื ื• ืžืฉื”ื• ื›ื–ื”, ืขื ื”ื“ื’ืฉืช ืชื—ื‘ื™ืจ ื›ืœื•ืœื”. ืื‘ืœ ื‘ื“ืจืš ื›ืœืœ ื”ืžืคืชื—ื™ื ืฉืœื ื• ื›ื‘ืจ ืœื ืขื•ื‘ื“ื™ื ืขื ื™ื™ืฆื•ื’ ืžืœื ืฉืœ ื”ืชื•ื›ื ื™ืช, ืืœื ืขื ืื—ื“ ืงืฆืจ ื™ื•ืชืจ. ื”ืจื™ ื›ื‘ืจ ืคืจืฉื ื• ืืช ื›ืœ ื”ืžืกืคืจื™ื ื•ื–ืจืงื ื• ืื•ืชื ื™ืžื™ื ื” ื•ืฉืžืืœื”, ื•ื‘ืืžืฆืข ื”ืฉืืจื ื• ืจืง ืืช ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื”, ืื™ื–ื” ืกื•ื’ ืฉืœ ืฆื•ืžืช ื–ื”: CTE Scan, CTE generation ืื• Seq Scan ืœืคื™ ืกื™ืžืŸ ื›ืœืฉื”ื•.

ื–ื”ื• ื”ื™ื™ืฆื•ื’ ื”ืžืงื•ืฆืจ ืฉืื ื• ืงื•ืจืื™ื ืœื• ืชื‘ื ื™ืช ืชื•ื›ื ื™ืช.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืžื” ืขื•ื“ ื™ื”ื™ื” ื ื•ื—? ื–ื” ื™ื”ื™ื” ื ื•ื— ืœืจืื•ืช ืื™ื–ื” ื—ืœืง ืžื”ื–ืžืŸ ื”ื›ื•ืœืœ ืฉืœื ื• ืžื•ืงืฆื” ืœืื™ื–ื” ืฆื•ืžืช - ื•ืคืฉื•ื˜ "ืชื“ื‘ื™ืง ืื•ืชื•" ื‘ืฆื“ ืชืจืฉื™ื ืขื•ื’ื”.

ืื ื—ื ื• ืžืฆื‘ื™ืขื™ื ืขืœ ื”ืฆื•ืžืช ื•ืจื•ืื™ื - ืžืกืชื‘ืจ ืฉ-Seq Scan ืœืงื— ืคื—ื•ืช ืžืจื‘ืข ืžื”ื–ืžืŸ ื”ื›ื•ืœืœ, ื•ืืช ื”-3/4 ื”ื ื•ืชืจื™ื ืฆื•ืœืžื• ืขืœ ื™ื“ื™ CTE Scan. ื—ึฒืจึธื“ึธื”! ื–ื•ื”ื™ ื”ืขืจื” ืงื˜ื ื” ืœื’ื‘ื™ "ืงืฆื‘ ื”ืืฉ" ืฉืœ CTE Scan ืื ืืชื” ืžืฉืชืžืฉ ื‘ื”ื ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืฉืื™ืœืชื•ืช ืฉืœืš. ื”ื ืœื ืžื”ื™ืจื™ื ื‘ืžื™ื•ื—ื“ - ื”ื ื ื—ื•ืชื™ื ืืคื™ืœื• ืžืกืจื™ืงืช ืฉื•ืœื—ืŸ ืจื’ื™ืœื”. [ืžืืžืจ] [ืžืืžืจ]

ืื‘ืœ ื‘ื“ืจืš ื›ืœืœ ื“ื™ืื’ืจืžื•ืช ื›ืืœื” ืžืขื ื™ื™ื ื•ืช ื™ื•ืชืจ, ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ, ื›ืืฉืจ ืื ื• ืžื™ื“ ืžืฆื‘ื™ืขื™ื ืขืœ ืงื˜ืข ื•ืจื•ืื™ื, ืœืžืฉืœ, ืฉื™ื•ืชืจ ืžืžื—ืฆื™ืช ืžื”ื–ืžืŸ ืื™ื–ื• Seq Scan "ืื›ืœื”". ื™ืชืจื” ืžื›ืš, ื”ื™ื” ื‘ืคื ื™ื ืกื•ื’ ืฉืœ ืคื™ืœื˜ืจ, ื”ืจื‘ื” ืจืฉื•ืžื•ืช ื ื–ืจืงื• ืœืคื™ื•... ืืชื” ื™ื›ื•ืœ ื™ืฉื™ืจื•ืช ืœื–ืจื•ืง ืืช ื”ืชืžื•ื ื” ื”ื–ื• ืœืžืคืชื— ื•ืœื”ื’ื™ื“: "ื•ืืกื™ื”, ื”ื›ืœ ืจืข ื›ืืŸ ื‘ืฉื‘ื™ืœืš! ืชื‘ื™ืŸ, ืชืจืื” - ืžืฉื”ื• ืœื ื‘ืกื“ืจ!"

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื‘ืื•ืคืŸ ื˜ื‘ืขื™, ื”ื™ื• ืžืขื•ืจื‘ื™ื ื›ืžื” "ืžื’ืจืคื•ืช".

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉื ืชืงืœื ื• ื‘ื• ื”ื™ื” ื‘ืขื™ื™ืช ื”ืขื™ื’ื•ืœ. ื”ื–ืžืŸ ืฉืœ ื›ืœ ืฆื•ืžืช ื‘ื•ื“ื“ ื‘ืชื•ื›ื ื™ืช ืžืฆื•ื™ืŸ ื‘ื“ื™ื•ืง ืฉืœ 1 ืžื™ืงืจื•ืกื•ืคื˜. ื•ื›ืืฉืจ ืžืกืคืจ ืžื—ื–ื•ืจื™ ื”ืฆื•ืžืช ืขื•ืœื” ืขืœ, ืœืžืฉืœ, 1000 - ืœืื—ืจ ื‘ื™ืฆื•ืข PostgreSQL ืžื—ื•ืœืงืช "ื‘ื“ื™ื•ืง", ืื– ื›ืฉืžื—ืฉื‘ื™ื ื‘ื—ื–ืจื” ื ืงื‘ืœ ืืช ื”ื–ืžืŸ ื”ื›ื•ืœืœ "ืื™ืคืฉื”ื• ื‘ื™ืŸ 0.95ms ืœ-1.05ms". ื›ืฉื”ืกืคื™ืจื” ืขื•ื‘ืจืช ืœืžื™ืงืจื•-ืฉื ื™ื•ืช, ื–ื” ื‘ืกื“ืจ, ืื‘ืœ ื›ืฉื–ื” ื›ื‘ืจ [ืžื™ืœื™]ืฉื ื™ื•ืช, ืืชื” ืฆืจื™ืš ืœืงื—ืช ืืช ื”ืžื™ื“ืข ื”ื–ื” ื‘ื—ืฉื‘ื•ืŸ ื›ืฉืืชื” "ืžืคืจืง" ืžืฉืื‘ื™ื ืœืฆืžืชื™ื ืฉืœ ืชื•ื›ื ื™ืช "ืžื™ ืฆืจืš ื›ืžื”".

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื”ื ืงื•ื“ื” ื”ืฉื ื™ื™ื”, ืžื•ืจื›ื‘ืช ื™ื•ืชืจ, ื”ื™ื ื—ืœื•ืงืช ื”ืžืฉืื‘ื™ื (ืื•ืชื ืžืื’ืจื™ื) ื‘ื™ืŸ ืฆืžืชื™ื ื“ื™ื ืžื™ื™ื. ื–ื” ืขืœื” ืœื ื• ื‘ืฉื‘ื•ืขื™ื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ืื‘ ื”ื˜ื™ืคื•ืก ื•ืขื•ื“ 2 ืฉื‘ื•ืขื•ืช.

ื–ื” ื“ื™ ืงืœ ืœืงื‘ืœ ืกื•ื’ ื›ื–ื” ืฉืœ ื‘ืขื™ื” - ืื ื—ื ื• ืขื•ืฉื™ื CTE ื•ื›ื‘ื™ื›ื•ืœ ืงื•ืจืื™ื ื‘ื• ืžืฉื”ื•. ืœืžืขืฉื”, PostgreSQL ื”ื•ื "ื—ื›ื" ื•ืœื ื™ืงืจื ืฉื•ื ื“ื‘ืจ ื™ืฉื™ืจื•ืช ืฉื. ื•ืื– ื ื™ืงื— ืžืžื ื• ืืช ื”ืจืฉื•ืžื” ื”ืจืืฉื•ื ื”, ื•ืืœื™ื• ืืช ื”ืžืื” ื•ื”ืจืืฉื•ืŸ ืžืื•ืชื• CTE.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ื”ืชื•ื›ื ื™ืช ื•ืžื‘ื™ื ื™ื - ื–ื” ืžื•ื–ืจ, ื™ืฉ ืœื ื• 3 ืžืื’ืจื™ื (ื“ืคื™ ื ืชื•ื ื™ื) "ื ืฆืจื›ื™ื" ื‘-Seq Scan, 1 ื ื•ืกืฃ ื‘-CTE Scan, ื•ืขื•ื“ 2 ื‘ืกืจื™ืงืช CTE ื”ืฉื ื™ื™ื”. ื›ืœื•ืžืจ, ืื ืคืฉื•ื˜ ื ืกื›ื ื”ื›ืœ ื ืงื‘ืœ 6, ืื‘ืœ ืžื”ื˜ืื‘ืœื˜ ื ืงืจื ืจืง 3! CTE Scan ืœื ืงื•ืจื ืฉื•ื ื“ื‘ืจ ืžื›ืœ ืžืงื•ื, ืืœื ืขื•ื‘ื“ ื™ืฉื™ืจื•ืช ืขื ื–ื™ื›ืจื•ืŸ ื”ืชื”ืœื™ืš. ื›ืœื•ืžืจ, ื‘ืจื•ืจ ืฉืžืฉื”ื• ื›ืืŸ ืœื ื‘ืกื“ืจ!

ืœืžืขืฉื”, ืžืกืชื‘ืจ ืฉื”ื ื” ื›ืœ ืื•ืชื 3 ืขืžื•ื“ื™ ื ืชื•ื ื™ื ืฉื”ืชื‘ืงืฉื• ืž-Seq Scan, ืชื—ื™ืœื” 1 ื‘ื™ืงืฉ ืืช ืกืจื™ืงืช ื”-CTE ื”-1, ื•ืœืื—ืจ ืžื›ืŸ ื”ื•ืงืจืื• ืœื• ืืช ื”-2, ื•ืขื•ื“ 2. ื›ืœื•ืžืจ, ืกืš ื”ื›ืœ 3 ืขืžื•ื“ื™ื ื ืงืจืื• ื ืชื•ื ื™ื, ืœื 6.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื•ื”ืชืžื•ื ื” ื”ื–ื• ื”ื•ื‘ื™ืœื” ืื•ืชื ื• ืœื”ื‘ื ื” ืฉื‘ื™ืฆื•ืข ืชื›ื ื™ืช ืื™ื ื• ืขื•ื“ ืขืฅ, ืืœื ืคืฉื•ื˜ ืื™ื–ื” ื’ืจืฃ ื-ืฆื™ืงืœื™. ื•ืงื™ื‘ืœื ื• ืชืจืฉื™ื ื›ื–ื”, ื›ื“ื™ ืฉื ื‘ื™ืŸ "ืžื” ื‘ื ืžืื™ืคื” ืžืœื›ืชื—ื™ืœื”". ื›ืœื•ืžืจ, ื›ืืŸ ื™ืฆืจื ื• CTE ืž-pg_class, ื•ื‘ื™ืงืฉื ื• ืื•ืชื• ืคืขืžื™ื™ื, ื•ื›ืžืขื˜ ื›ืœ ื”ื–ืžืŸ ืฉืœื ื• ื”ื•ืฉืงืข ื‘ืกื ื™ืฃ ื›ืฉื‘ื™ืงืฉื ื• ืื•ืชื• ื‘ืคืขื ื”-2. ื‘ืจื•ืจ ืฉืงืจื™ืืช ื”ืขืจืš ื”-101 ื”ื™ื ื”ืจื‘ื” ื™ื•ืชืจ ื™ืงืจื” ืžืกืชื ืงืจื™ืืช ื”ืขืจืš ื”-1 ืžื”ื˜ืื‘ืœื˜.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื ืฉืคื ื• ืœื–ืžืŸ ืžื”. ื”ื ืืžืจื•: "ืขื›ืฉื™ื•, ื ื™ืื•, ืืชื” ื™ื•ื“ืข ืงื•ื ื’ ืคื•! ืขื›ืฉื™ื• ื”ื—ื•ื•ื™ื” ืฉืœื ื• ื ืžืฆืืช ืžืžืฉ ืขืœ ื”ืžืกืš ืฉืœืš. ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื•." [ืžืืžืจ]

ืื™ื—ื•ื“ ื™ื•ืžื ื™ื

1000 ื”ืžืคืชื—ื™ื ืฉืœื ื• ื ืฉืžื• ืœืจื•ื•ื—ื”. ืื‘ืœ ื”ื‘ื ื• ืฉื™ืฉ ืœื ื• ืจืง ืžืื•ืช ืฉืจืชื™ื "ืงืจื‘ื™ื™ื", ื•ื›ืœ ื”"ื”ืขืชืง-ื”ื“ื‘ืง" ื”ื–ื” ืžืฆื“ ื”ืžืคืชื—ื™ื ืœื ื ื•ื— ื‘ื›ืœืœ. ื”ื‘ื ื• ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืืกื•ืฃ ืืช ื–ื” ื‘ืขืฆืžื ื•.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื‘ืื•ืคืŸ ื›ืœืœื™, ื™ืฉ ืžื•ื“ื•ืœ ืกื˜ื ื“ืจื˜ื™ ืฉื™ื›ื•ืœ ืœืืกื•ืฃ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื, ืื‘ืœ ืฆืจื™ืš ืœื”ืคืขื™ืœ ืื•ืชื• ื’ื ื‘ืชืฆื•ืจื” - ื–ื” ืžื•ื“ื•ืœ pg_stat_statements. ืื‘ืœ ื”ื•ื ืœื ื”ืชืื™ื ืœื ื•.

ืจืืฉื™ืช, ื”ื•ื ืžืงืฆื” ืœืื•ืชืŸ ืฉืื™ืœืชื•ืช ื‘ืืžืฆืขื•ืช ืกื›ืžื•ืช ืฉื•ื ื•ืช ื‘ืชื•ืš ืื•ืชื• ืžืกื“ ื ืชื•ื ื™ื QueryIds ืฉื•ื ื™ื. ื›ืœื•ืžืจ, ืื ืชืขืฉื” ื–ืืช ืงื•ื“ื SET search_path = '01'; SELECT * FROM user LIMIT 1;ื•ืื– SET search_path = '02'; ื•ื‘ืื•ืชื” ื‘ืงืฉื”, ืื– ืœืกื˜ื˜ื™ืกื˜ื™ืงื” ืฉืœ ืžื•ื“ื•ืœ ื–ื” ื™ื”ื™ื• ืจืฉื•ืžื•ืช ืฉื•ื ื•ืช, ื•ืœื ืื•ื›ืœ ืœืืกื•ืฃ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ื›ืœืœื™ื™ื ืกืคืฆื™ืคื™ืช ื‘ื”ืงืฉืจ ืฉืœ ืคืจื•ืคื™ืœ ื‘ืงืฉื” ื–ื”, ืžื‘ืœื™ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืกื›ืžื•ืช.

ื”ื ืงื•ื“ื” ื”ืฉื ื™ื™ื” ืฉืžื ืขื” ืžืื™ืชื ื• ืœื”ืฉืชืžืฉ ื‘ื• ื”ื™ื ื—ื•ืกืจ ืชื•ื›ื ื™ื•ืช. ื›ืœื•ืžืจ, ืื™ืŸ ืชื•ื›ื ื™ืช, ื™ืฉ ืจืง ืืช ื”ื‘ืงืฉื” ืขืฆืžื”. ืื ื—ื ื• ืจื•ืื™ื ืžื” ื”ืื˜, ืื‘ืœ ืื ื—ื ื• ืœื ืžื‘ื™ื ื™ื ืœืžื”. ื•ื›ืืŸ ืื ื• ื—ื•ื–ืจื™ื ืœื‘ืขื™ื” ืฉืœ ืžืขืจืš ื ืชื•ื ื™ื ื”ืžืฉืชื ื” ื‘ืžื”ื™ืจื•ืช.

ื•ื”ืจื’ืข ื”ืื—ืจื•ืŸ - ื—ื•ืกืจ "ืขื•ื‘ื“ื•ืช". ื›ืœื•ืžืจ, ืœื ื ื™ืชืŸ ืœื”ืชื™ื™ื—ืก ืœืžืงืจื” ืกืคืฆื™ืคื™ ืฉืœ ื‘ื™ืฆื•ืข ืฉืื™ืœืชื” - ืื™ืŸ ื›ื–ื”, ื™ืฉ ืจืง ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžืฆื˜ื‘ืจืช. ืœืžืจื•ืช ืฉืืคืฉืจ ืœืขื‘ื•ื“ ืขื ื–ื”, ื–ื” ืคืฉื•ื˜ ืžืื•ื“ ืงืฉื”.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืœื›ืŸ, ื”ื—ืœื˜ื ื• ืœื”ื™ืœื—ื ื‘ื”ืขืชืง-ื”ื“ื‘ืง ื•ื”ืชื—ืœื ื• ืœื›ืชื•ื‘ ืืกืคืŸ.

ื”ืืกืคืŸ ืžืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช SSH, ื™ื•ืฆืจ ื—ื™ื‘ื•ืจ ืžืื•ื‘ื˜ื— ืœืฉืจืช ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช ืชืขื•ื“ื”, ื•ื›ืŸ tail -F "ื ืื—ื–" ืืœื™ื• ื‘ืงื•ื‘ืฅ ื”ื™ื•ืžืŸ. ืื– ื‘ืคื’ื™ืฉื” ื”ื–ื• ืื ื• ืžืงื‘ืœื™ื "ืžืจืื”" ืžืœืื” ืฉืœ ืงื•ื‘ืฅ ื”ื™ื•ืžืŸ ื›ื•ืœื•, ืฉื”ืฉืจืช ืžื™ื™ืฆืจ. ื”ืขื•ืžืก ืขืœ ื”ืฉืจืช ืขืฆืžื• ื”ื•ื ืžื™ื ื™ืžืœื™, ื›ื™ ืื ื—ื ื• ืœื ืžื ืชื—ื™ื ืฉื•ื ื“ื‘ืจ ืฉื, ืื ื—ื ื• ืจืง ืžืฉืงืคื™ื ืืช ื”ืชืขื‘ื•ืจื”.

ืžื›ื™ื•ื•ืŸ ืฉื›ื‘ืจ ื”ืชื—ืœื ื• ืœื›ืชื•ื‘ ืืช ื”ืžืžืฉืง ื‘-Node.js, ื”ืžืฉื›ื ื• ืœื›ืชื•ื‘ ื‘ื• ืืช ื”ืืกืคืŸ. ื•ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ื• ื”ืฆื“ื™ืงื” ืืช ืขืฆืžื”, ื›ื™ ื–ื” ืžืื•ื“ ื ื•ื— ืœื”ืฉืชืžืฉ ื‘-JavaScript ื›ื“ื™ ืœืขื‘ื•ื“ ืขื ื ืชื•ื ื™ ื˜ืงืกื˜ ื‘ืคื•ืจืžื˜ ื—ืœืฉ, ืฉื”ื ื”ื™ื•ืžืŸ. ื•ืชืฉืชื™ืช ื”-Node.js ืขืฆืžื” ื›ืคืœื˜ืคื•ืจืžื” ืขื•ืจืคื™ืช ืžืืคืฉืจืช ืœืš ืœืขื‘ื•ื“ ื‘ืงืœื•ืช ื•ื‘ื ื•ื—ื•ืช ืขื ื—ื™ื‘ื•ืจื™ ืจืฉืช, ื•ืื›ืŸ ืขื ื›ืœ ื–ืจืžื™ ื ืชื•ื ื™ื.

ื‘ื”ืชืื, ืื ื• "ืžื•ืชื—ื™ื" ืฉื ื™ ืงืฉืจื™ื: ื”ืจืืฉื•ืŸ "ืœื”ืงืฉื™ื‘" ืœื™ื•ืžืŸ ืขืฆืžื• ื•ืœืงื—ืช ืื•ืชื• ืœืขืฆืžื ื•, ื•ื”ืฉื ื™ ืœืฉืื•ืœ ืžืขืช ืœืขืช ืืช ื”ื‘ืกื™ืก. "ืื‘ืœ ื”ื™ื•ืžืŸ ืžืจืื” ืฉื”ืกื™ืžืŸ ืขื oid 123 ื—ืกื•ื", ืื‘ืœ ื–ื” ืœื ืื•ืžืจ ื›ืœื•ื ืœืžืคืชื—, ื•ื–ื” ื™ื”ื™ื” ื ื—ืžื“ ืœืฉืื•ืœ ืืช ืžืกื“ ื”ื ืชื•ื ื™ื, "ืžื” ื–ื” OID = 123 ื‘ื›ืœืœ?" ื•ืœื›ืŸ ืื ื—ื ื• ืฉื•ืืœื™ื ืžื“ื™ ืคืขื ืืช ื”ื‘ืกื™ืก ืžื” ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืขื™ื ืขืœ ืขืฆืžื ื•.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

"ื™ืฉ ืจืง ื“ื‘ืจ ืื—ื“ ืฉืœื ืœืงื—ืชื ื‘ื—ืฉื‘ื•ืŸ, ื™ืฉ ื–ืŸ ืฉืœ ื“ื‘ื•ืจื™ื ื“ืžื•ื™ื™ ืคื™ืœ!.." ื”ืชื—ืœื ื• ืœืคืชื— ืืช ื”ืžืขืจื›ืช ื”ื–ื• ื›ืฉืจืฆื™ื ื• ืœื ื˜ืจ 10 ืฉืจืชื™ื. ื”ื›ื™ ืงืจื™ื˜ื™ ื‘ื”ื‘ื ืชื ื•, ืฉื ื”ืชืขื•ืจืจื• ื›ืžื” ื‘ืขื™ื•ืช ืฉืงืฉื” ืœื”ืชืžื•ื“ื“ ืื™ืชืŸ. ืื‘ืœ ื‘ืžื”ืœืš ื”ืจื‘ืขื•ืŸ ื”ืจืืฉื•ืŸ ืงื™ื‘ืœื ื• ืžืื” ืœื ื™ื˜ื•ืจ - ื›ื™ ื”ืžืขืจื›ืช ืขื‘ื“ื”, ื›ื•ืœื ืจืฆื•, ืœื›ื•ืœื ื”ื™ื” ื ื•ื—.

ืืช ื›ืœ ื–ื” ืฆืจื™ืš ืœื”ื•ืกื™ืฃ, ื–ืจื™ืžืช ื”ื ืชื•ื ื™ื ื’ื“ื•ืœื” ื•ืคืขื™ืœื”. ืœืžืขืฉื”, ืžื” ืฉืื ื—ื ื• ืžืคืงื—ื™ื, ืžื” ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืชืžื•ื“ื“ ืื™ืชื•, ื–ื” ืžื” ืฉืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ื•. ืื ื• ืžืฉืชืžืฉื™ื ื’ื ื‘-PostgreSQL ื›ืื—ืกื•ืŸ ื ืชื•ื ื™ื. ื•ืฉื•ื ื“ื‘ืจ ืื™ื ื• ืžื”ื™ืจ ื™ื•ืชืจ "ืœืฆืงืช" ืœืชื•ื›ื• ื ืชื•ื ื™ื ืžืืฉืจ ื”ืžืคืขื™ืœ COPY ืขื“ื™ื™ืŸ ืœื.

ืื‘ืœ ืคืฉื•ื˜ "ืœืฉืคื•ืš" ื ืชื•ื ื™ื ื–ื” ืœื ื‘ืืžืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืœื ื•. ื›ื™ ืื ื™ืฉ ืœืš ื‘ืขืจืš 50 ื‘ืงืฉื•ืช ืœืฉื ื™ื™ื” ื‘ืžืื” ืฉืจืชื™ื, ืื– ื–ื” ื™ืคื™ืง 100-150GB ืฉืœ ื™ื•ืžื ื™ื ืœื™ื•ื. ืœื›ืŸ, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ื‘ื–ื”ื™ืจื•ืช "ืœื—ืชื•ืš" ืืช ื”ื‘ืกื™ืก.

ืจืืฉื™ืช, ืขืฉื™ื ื• ื–ืืช ื—ืœื•ืงื” ืœืคื™ ื™ื•ื, ื›ื™ ื‘ื’ื“ื•ืœ, ืืฃ ืื—ื“ ืœื ืžืชืขื ื™ื™ืŸ ื‘ืงื•ืจืœืฆื™ื” ื‘ื™ืŸ ื™ืžื™ื. ืžื” ื–ื” ืžืฉื ื” ืžื” ื”ื™ื” ืœืš ืืชืžื•ืœ, ืื ื”ืœื™ืœื” ืคืจืกืžืช ื’ืจืกื” ื—ื“ืฉื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื” - ื•ื›ื‘ืจ ื›ืžื” ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ื—ื“ืฉื•ืช.

ืฉื ื™ืช, ืœืžื“ื ื• (ื ืืœืฆื ื•) ืžืื•ื“ ืžืื•ื“ ืžื”ื™ืจ ืœื›ืชื•ื‘ ื‘ืืžืฆืขื•ืช COPY. ื›ืœื•ืžืจ, ืœื ืจืง COPYื›ื™ ื”ื•ื ืžื”ื™ืจ ื™ื•ืชืจ ืž INSERT, ื•ืืคื™ืœื• ืžื”ืจ ื™ื•ืชืจ.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื”ื ืงื•ื“ื” ื”ืฉืœื™ืฉื™ืช - ื”ื™ื™ืชื™ ื—ื™ื™ื‘ืช ืœื ื˜ื•ืฉ ื˜ืจื™ื’ืจื™ื, ื‘ื”ืชืืžื”, ื•ืžืคืชื—ื•ืช ื–ืจื™ื. ื›ืœื•ืžืจ, ืื™ืŸ ืœื ื• ื›ืœืœ ืฉืœืžื•ืช ื”ืชื™ื™ื—ืกื•ืชื™ืช. ื›ื™ ืื ื™ืฉ ืœืš ื˜ื‘ืœื” ืฉื™ืฉ ืœื” ื–ื•ื’ FKs, ื•ืืชื” ืื•ืžืจ ื‘ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื ืฉ"ื”ื ื” ืจืฉื•ืžืช ื™ื•ืžืŸ ืฉืžืคื ื” ืขืœ ื™ื“ื™ FK, ืœืžืฉืœ, ืœืงื‘ื•ืฆืช ืจืฉื•ืžื•ืช", ืื– ื›ืฉืืชื” ืžื›ื ื™ืก ืื•ืชื”, PostgreSQL ืœื ื ืฉืืจ ื“ื‘ืจ ืžืœื‘ื“ ืื™ืš ืœืงื—ืช ืืช ื–ื” ื•ืœืขืฉื•ืช ืืช ื–ื” ื‘ื™ื•ืฉืจ SELECT 1 FROM master_fk1_table WHERE ... ืขื ื”ืžื–ื”ื” ืฉืืชื” ืžื ืกื” ืœื”ื›ื ื™ืก - ืจืง ื›ื“ื™ ืœื‘ื“ื•ืง ืฉื”ืจืฉื•ืžื” ื”ื–ื• ืงื™ื™ืžืช ืฉื, ืฉืœื "ืชื ืชืง" ืืช ื”ืžืคืชื— ื”ื–ืจ ื”ื–ื” ืขื ื”ื›ื ืกืชืš.

ื‘ืžืงื•ื ืจืฉื•ืžื” ืื—ืช ืœื˜ื‘ืœืช ื”ื™ืขื“ ื•ื”ืื™ื ื“ืงืกื™ื ืฉืœื”, ืื ื—ื ื• ืžืงื‘ืœื™ื ืืช ื”ื™ืชืจื•ืŸ ื”ื ื•ืกืฃ ืฉืœ ืงืจื™ืื” ืžื›ืœ ื”ื˜ื‘ืœืื•ืช ืฉื”ื™ื ืžืชื™ื™ื—ืกืช ืืœื™ื”ืŸ. ืื‘ืœ ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืืช ื–ื” ื‘ื›ืœืœ - ื”ืžืฉื™ืžื” ืฉืœื ื• ื”ื™ื ืœื”ืงืœื™ื˜ ื›ืžื” ืฉื™ื•ืชืจ ื•ื›ืžื” ืฉื™ื•ืชืจ ืžื”ืจ ืขื ื”ื›ื™ ืคื—ื•ืช ืขื•ืžืก. ืื– FK - ืœืžื˜ื”!

ื”ื ืงื•ื“ื” ื”ื‘ืื” ื”ื™ื ืฆื‘ื™ืจื” ื•ื’ื™ื‘ื•ื‘. ื‘ืชื—ื™ืœื”, ื”ื˜ืžืขื ื• ืื•ืชื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื - ืื—ืจื™ ื”ื›ืœ, ื–ื” ื ื•ื— ืžื™ื“, ื›ืฉืžื’ื™ืขื” ืจืฉื•ืžื”, ืœืขืฉื•ืช ืืช ื–ื” ื‘ืื™ื–ื” ื˜ืื‘ืœื˜ "ืคืœื•ืก ืื—ื“" ืžืžืฉ ื‘ื”ื“ืง. ื•ื‘ื›ืŸ, ื–ื” ื ื•ื—, ืื‘ืœ ืื•ืชื• ื“ื‘ืจ ืจืข - ืืชื” ืžื›ื ื™ืก ืจืฉื•ืžื” ืื—ืช, ืื‘ืœ ื ืืœืฅ ืœืงืจื•ื ื•ืœื›ืชื•ื‘ ืžืฉื”ื• ืื—ืจ ืžื˜ื‘ืœื” ืื—ืจืช. ื™ืชืจื” ืžื›ืš, ืœื ืจืง ืฉืืชื” ืงื•ืจื ื•ื›ื•ืชื‘, ืืชื” ื’ื ืขื•ืฉื” ื–ืืช ื‘ื›ืœ ืคืขื.

ื›ืขืช ื“ืžื™ื™ื ื• ืฉื™ืฉ ืœื›ื ื˜ื‘ืœื” ืฉื‘ื” ืืชื ืคืฉื•ื˜ ืกื•ืคืจื™ื ืืช ืžืกืคืจ ื”ื‘ืงืฉื•ืช ืฉืขื‘ืจื• ื“ืจืš ืžืืจื— ืกืคืฆื™ืคื™: +1, +1, +1, ..., +1. ื•ืืชื”, ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืœื ืฆืจื™ืš ืืช ื–ื” - ื”ื›ืœ ืืคืฉืจื™ ืกื›ื•ื ื‘ื–ื™ื›ืจื•ืŸ ืขืœ ื”ืืกืคืŸ ื•ืœืฉืœื•ื— ืœืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืžื›ื” ืื—ืช +10.

ื›ืŸ, ื‘ืžืงืจื” ืฉืœ ื‘ืขื™ื•ืช ืžืกื•ื™ืžื•ืช, ื”ืฉืœืžื•ืช ื”ืœื•ื’ื™ืช ืฉืœืš ืขืฉื•ื™ื” "ืœื”ืชืคืจืง", ืื‘ืœ ื–ื” ืžืงืจื” ื›ืžืขื˜ ืœื ืžืฆื™ืื•ืชื™ - ื›ื™ ื™ืฉ ืœืš ืฉืจืช ืจื’ื™ืœ, ื™ืฉ ืœื• ืกื•ืœืœื” ื‘ื‘ืงืจ, ื™ืฉ ืœืš ื™ื•ืžืŸ ืขืกืงืื•ืช, ื™ื•ืžืŸ ื‘- ืžืขืจื›ืช ืงื‘ืฆื™ื... ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื ื–ื” ืฉื•ื•ื” ืืช ื–ื”. ืื•ื‘ื“ืŸ ื”ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืฉืืชื” ืžืงื‘ืœ ืžื”ืคืขืœืช ื˜ืจื™ื’ืจื™ื/FK ืื™ื ื• ืฉื•ื•ื” ืืช ื”ื”ื•ืฆืื” ืฉืืชื” ืœื•ืงื—.

ื–ื” ืื•ืชื• ื“ื‘ืจ ืขื hashing. ื‘ืงืฉื” ืžืกื•ื™ื™ืžืช ืขืคื” ืœืš, ืืชื” ืžื—ืฉื‘ ืžื–ื” ืžื–ื”ื” ืžืกื•ื™ื ื‘ืžืื’ืจ, ื›ื•ืชื‘ ืืช ื–ื” ืœืžืื’ืจ ื•ืื– ืžืกืคืจ ืืช ื–ื” ืœื›ื•ืœื. ื”ื›ืœ ื‘ืกื“ืจ ืขื“ ืฉื‘ื–ืžืŸ ื”ื”ืงืœื˜ื” ืžื’ื™ืข ืืœื™ื›ื ืื“ื ืฉื ื™ ืฉืจื•ืฆื” ืœื”ืงืœื™ื˜ ืืช ืื•ืชื• ื”ื“ื‘ืจ - ื•ืืชื ื ื—ืกืžื™ื, ื•ื–ื” ื›ื‘ืจ ืจืข. ืœื›ืŸ, ืื ืืชื” ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืช ื”ื™ืฆื™ืจื” ืฉืœ ื›ืžื” ืžื–ื”ื™ื ืœืœืงื•ื— (ื‘ื™ื—ืก ืœืžืกื“ ื”ื ืชื•ื ื™ื), ืขื“ื™ืฃ ืœืขืฉื•ืช ื–ืืช.

ื–ื” ื”ื™ื” ืคืฉื•ื˜ ืžื•ืฉืœื ืขื‘ื•ืจื ื• ืœื”ืฉืชืžืฉ ื‘-MD5 ืžื”ื˜ืงืกื˜ - ื‘ืงืฉื”, ืชื•ื›ื ื™ืช, ืชื‘ื ื™ืช,... ืื ื—ื ื• ืžื—ืฉื‘ื™ื ืืช ื–ื” ื‘ืฆื“ ื”ืืกืคืŸ, ื•"ืฉื•ืคื›ื™ื" ืืช ื”ืžื–ื”ื” ื”ืžื•ื›ืŸ ืœืžืกื“ ื”ื ืชื•ื ื™ื. ืื•ืจืš ื”-MD5 ื•ื”ืžื—ื™ืฆื” ื”ื™ื•ืžื™ืช ืžืืคืฉืจื™ื ืœื ื• ืœื ืœื“ืื•ื’ ืžื”ืชื ื’ืฉื•ื™ื•ืช ืืคืฉืจื™ื•ืช.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืื‘ืœ ื›ื“ื™ ืœื”ืงืœื™ื˜ ืืช ื›ืœ ื–ื” ื‘ืžื”ื™ืจื•ืช, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœืฉื ื•ืช ืืช ื”ืœื™ืš ื”ื”ืงืœื˜ื” ืขืฆืžื•.

ืื™ืš ื‘ื“ืจืš ื›ืœืœ ืืชื” ื›ื•ืชื‘ ื ืชื•ื ื™ื? ื™ืฉ ืœื ื• ืื™ื–ืฉื”ื• ืžืขืจืš ื ืชื•ื ื™ื, ืื ื—ื ื• ืžื—ืœืงื™ื ืื•ืชื• ืœื›ืžื” ื˜ื‘ืœืื•ืช, ื•ืื– ืขื•ืชืง ืื•ืชื• - ืชื—ื™ืœื” ืœืจืืฉื•ืŸ, ื•ืื– ืœืฉื ื™, ืœืฉืœื™ืฉื™... ื–ื” ืœื ื ื•ื—, ื›ื™ ื ืจืื” ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื ื–ืจื ื ืชื•ื ื™ื ืื—ื“ ื‘ืฉืœื•ืฉื” ืฉืœื‘ื™ื ื‘ืจืฆืฃ. ืœื ื ืขื™ื. ื”ืื ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ืžื”ืจ ื™ื•ืชืจ? ืคื—ื™ืช!

ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื–ื” ืžืกืคื™ืง ืจืง ืœืคืจืง ืืช ื”ื–ืจื™ืžื•ืช ื”ืœืœื• ื‘ืžืงื‘ื™ืœ ื–ื” ืœื–ื”. ืžืกืชื‘ืจ ืฉื™ืฉ ืœื ื• ืฉื’ื™ืื•ืช, ื‘ืงืฉื•ืช, ืชื‘ื ื™ื•ืช, ื—ืกื™ืžื•ืช, ... ืขืคื•ืช ื‘ืฉืจืฉื•ืจื™ื ื ืคืจื“ื™ื - ื•ืื ื—ื ื• ื›ื•ืชื‘ื™ื ื”ื›ืœ ื‘ืžืงื‘ื™ืœ. ืžืกืคื™ืง ื‘ืฉื‘ื™ืœ ื–ื” ืฉืžื•ืจ ืขืœ ืขืจื•ืฅ COPY ืคืชื•ื— ื›ืœ ื”ื–ืžืŸ ืขื‘ื•ืจ ื›ืœ ื˜ื‘ืœืช ื™ืขื“ ื‘ื ืคืจื“.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื›ืœื•ืžืจ, ืืฆืœ ื”ืืกืคืŸ ืชืžื™ื“ ื™ืฉ ื ื—ืœ, ืฉืœืชื•ื›ื• ืื ื™ ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืืช ื”ื ืชื•ื ื™ื ืฉืื ื™ ืฆืจื™ืš. ืื‘ืœ ื›ื“ื™ ืฉืžืกื“ ื”ื ืชื•ื ื™ื ื™ืจืื” ืืช ื”ื ืชื•ื ื™ื ื”ืืœื”, ื•ืžื™ืฉื”ื• ืœื ื™ืชืงืข ื‘ื”ืžืชื ื” ืœื›ืชื™ื‘ื” ืฉืœ ื”ื ืชื•ื ื™ื ื”ืืœื”, ื™ืฉ ืœื”ืคืกื™ืง ืืช ื”ื”ืขืชืงื” ื‘ืžืจื•ื•ื—ื™ ื–ืžืŸ ืžืกื•ื™ืžื™ื. ืžื‘ื—ื™ื ืชื ื• ื”ืชืงื•ืคื” ื”ื™ืขื™ืœื” ื‘ื™ื•ืชืจ ื”ื™ื™ืชื” ื‘ืขืจืš 100ms - ืื ื—ื ื• ืกื•ื’ืจื™ื ืื•ืชื” ื•ืžื™ื“ ืคื•ืชื—ื™ื ืื•ืชื” ืฉื•ื‘ ืœืื•ืชื” ืฉื•ืœื—ืŸ. ื•ืื ืื™ืŸ ืœื ื• ืžืกืคื™ืง ื–ืจื™ืžื” ืื—ืช ื‘ืžื”ืœืš ื›ืžื” ืฉื™ืื™ื, ืื– ืื ื—ื ื• ืขื•ืฉื™ื ืื’ื™ืจื” ืขื“ ื’ื‘ื•ืœ ืžืกื•ื™ื.

ื‘ื ื•ืกืฃ, ื’ื™ืœื™ื ื• ืฉืขื‘ื•ืจ ืคืจื•ืคื™ืœ ืขื•ืžืก ื›ื–ื”, ื›ืœ ืฆื‘ื™ืจื”, ื›ืืฉืจ ืจืฉื•ืžื•ืช ื ืืกืคื•ืช ื‘ืงื‘ื•ืฆื•ืช, ื”ื™ื ืจืขื”. ื”ืจื•ืข ื”ืงืœืืกื™ ื”ื•ื INSERT ... VALUES ื•ืขื•ื“ 1000 ืจืฉื•ืžื•ืช. ื›ื™ ื‘ืฉืœื‘ ื”ื–ื” ื™ืฉ ืœืš ืฉื™ื ื›ืชื™ื‘ื” ื‘ืžื“ื™ื”, ื•ื›ืœ ื”ืฉืืจ ืฉืžื ืกื™ื ืœื›ืชื•ื‘ ืžืฉื”ื• ืœื“ื™ืกืง ื™ื—ื›ื•.

ื›ื“ื™ ืœื”ื™ืคื˜ืจ ืžื—ืจื™ื’ื•ืช ื›ืืœื”, ืคืฉื•ื˜ ืืœ ืชืฆื‘ื•ืจ ืฉื•ื ื“ื‘ืจ, ืœื ืœื—ืฆืฅ ื‘ื›ืœืœ. ื•ืื ืื›ืŸ ืžืชืจื—ืฉ ื—ืฆื™ืฆื” ืœื“ื™ืกืง (ืœืžืจื‘ื” ื”ืžื–ืœ, ื”-Stream API ื‘-Node.js ืžืืคืฉืจ ืœืš ืœื’ืœื•ืช ื–ืืช) - ื“ื—ื• ืืช ื”ื—ื™ื‘ื•ืจ ื”ื–ื”. ื›ืฉืชืงื‘ืœื• ืื™ืจื•ืข ืฉื”ื•ื ืฉื•ื‘ ื‘ื—ื™ื ื, ื›ืชื‘ื• ืœื• ืžื”ืชื•ืจ ืฉื ืฆื‘ืจ. ื•ื‘ื–ืžืŸ ืฉื”ื•ื ืขืžื•ืก, ืงื— ืืช ื”ืคื ื•ื™ ื”ื‘ื ืžื”ื‘ืจื™ื›ื” ื•ื›ืชื•ื‘ ืœื•.

ืœืคื ื™ ืฉื”ืฆื’ื ื• ื’ื™ืฉื” ื–ื• ืœืจื™ืฉื•ื ื ืชื•ื ื™ื, ื”ื™ื• ืœื ื• ืคืขื•ืœื•ืช ื›ืชื™ื‘ื” ืฉืœ ื›-4K, ื•ื‘ื“ืจืš ื–ื• ื”ื•ืจื“ื ื• ืืช ื”ืขื•ืžืก ืคื™ 4. ื›ืขืช ื”ื ื’ื“ืœื• ืขื•ื“ ืคื™ 6 ื‘ื’ืœืœ ืžืกื“ื™ ื ืชื•ื ื™ื ืžื ื•ื˜ืจื™ื ื—ื“ืฉื™ื - ืขื“ 100MB/s. ื•ื›ืขืช ืื ื• ืžืื—ืกื ื™ื ื™ื•ืžื ื™ื ืœ-3 ื”ื—ื•ื“ืฉื™ื ื”ืื—ืจื•ื ื™ื ื‘ื ืคื— ืฉืœ ื›-10-15TB, ื‘ืชืงื•ื•ื” ืฉืชื•ืš ืฉืœื•ืฉื” ื—ื•ื“ืฉื™ื ื‘ืœื‘ื“ ื›ืœ ืžืคืชื— ื™ื•ื›ืœ ืœืคืชื•ืจ ื›ืœ ื‘ืขื™ื”.

ืื ื—ื ื• ืžื‘ื™ื ื™ื ืืช ื”ื‘ืขื™ื•ืช

ืื‘ืœ ืคืฉื•ื˜ ืœืืกื•ืฃ ืืช ื›ืœ ื”ื ืชื•ื ื™ื ื”ืืœื” ื–ื” ื˜ื•ื‘, ืฉื™ืžื•ืฉื™, ืจืœื•ื•ื ื˜ื™, ืื‘ืœ ืœื ืžืกืคื™ืง - ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืื•ืชื•. ื›ื™ ืืœื• ืžื™ืœื™ื•ื ื™ ืชื•ื›ื ื™ื•ืช ืฉื•ื ื•ืช ื‘ื™ื•ื.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืื‘ืœ ืžื™ืœื™ื•ื ื™ื ื”ื ื‘ืœืชื™ ื ื™ืชื ื™ื ืœื ื™ื”ื•ืœ, ืขืœื™ื ื• ืงื•ื“ื ื›ืœ ืœืขืฉื•ืช "ืงื˜ืŸ ื™ื•ืชืจ". ื•ืงื•ื“ื ื›ืœ, ืืชื” ืฆืจื™ืš ืœื”ื—ืœื™ื˜ ืื™ืš ืชืืจื’ืŸ ืืช ื”ื“ื‘ืจ "ื”ืงื˜ืŸ" ื”ื–ื”.

ื–ื™ื”ื™ื ื• ืฉืœื•ืฉ ื ืงื•ื“ื•ืช ืžืคืชื—:

  • ืžื™ ืฉืœื— ื‘ืงืฉื” ื–ื•
    ื›ืœื•ืžืจ ืžืื™ื–ื” ืืคืœื™ืงืฆื™ื” ื”ื™ื "ื”ื’ื™ืขื”": ืžืžืฉืง ืื™ื ื˜ืจื ื˜, ืื—ื•ืจื™, ืžืขืจื›ืช ืชืฉืœื•ื ืื• ืžืฉื”ื• ืื—ืจ.
  • ืื™ืคื” ื–ื” ืงืจื”
    ื‘ืื™ื–ื” ืฉืจืช ืกืคืฆื™ืคื™? ื›ื™ ืื ื™ืฉ ืœืš ื›ืžื” ืฉืจืชื™ื ืชื—ืช ืืคืœื™ืงืฆื™ื” ืื—ืช, ื•ืคืชืื•ื ืื—ื“ "ื”ืœืš ื˜ื™ืคืฉ" (ื›ื™ "ื”ื“ื™ืกืง ืจืงื•ื‘", "ื”ื–ื™ื›ืจื•ืŸ ื“ืœืฃ", ื‘ืขื™ื” ืื—ืจืช), ืื– ืืชื” ืฆืจื™ืš ืœื˜ืคืœ ืกืคืฆื™ืคื™ืช ื‘ืฉืจืช.
  • ืื™ืš ื”ื‘ืขื™ื” ื‘ืื” ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ื‘ืฆื•ืจื” ื›ื–ื• ืื• ืื—ืจืช

ื›ื“ื™ ืœื”ื‘ื™ืŸ "ืžื™" ืฉืœื— ืœื ื• ื‘ืงืฉื”, ืื ื• ืžืฉืชืžืฉื™ื ื‘ื›ืœื™ ืกื˜ื ื“ืจื˜ื™ - ื”ื’ื“ืจืช ืžืฉืชื ื” ื”ืคืขืœื”: SET application_name = '{bl-host}:{bl-method}'; - ืื ื• ืฉื•ืœื—ื™ื ืืช ืฉื ืžืืจื— ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืžืžื ื• ืžื’ื™ืขื” ื”ื‘ืงืฉื”, ื•ืืช ืฉื ื”ืฉื™ื˜ื” ืื• ื”ืืคืœื™ืงืฆื™ื” ืฉื™ื–ืžื• ืื•ืชื”.

ืœืื—ืจ ืฉืขื‘ืจื ื• ืืช "ื”ื‘ืขืœื™ื" ืฉืœ ื”ื‘ืงืฉื”, ื™ืฉ ืœื”ื•ืฆื™ื ืื•ืชื” ืœืœื•ื’ - ืœืฉื ื›ืš ืื ื• ืžื’ื“ื™ืจื™ื ืืช ื”ืžืฉืชื ื” log_line_prefix = ' %m [%p:%v] [%d] %r %a'. ืœืžืขื•ื ื™ื™ื ื™ื, ืื•ืœื™ ืชืกืชื›ืœ ื‘ืžื“ืจื™ืšืžื” ื›ืœ ื–ื” ืื•ืžืจ. ืžืกืชื‘ืจ ืฉืื ื• ืจื•ืื™ื ื‘ื™ื•ืžืŸ:

  • ื–ืžืŸ
  • ืžื–ื”ื™ ืชื”ืœื™ืš ื•ืขืกืงืื•ืช
  • ืฉื ื‘ืกื™ืก ื”ื ืชื•ื ื™ื
  • IP ืฉืœ ื”ืื“ื ืฉืฉืœื— ื‘ืงืฉื” ื–ื•
  • ื•ืฉื ื”ืฉื™ื˜ื”

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื•ืื– ื”ื‘ื ื• ืฉื–ื” ืœื ืžืื•ื“ ืžืขื ื™ื™ืŸ ืœื”ืกืชื›ืœ ืขืœ ื”ืžืชืื ืขื‘ื•ืจ ื‘ืงืฉื” ืื—ืช ื‘ื™ืŸ ืฉืจืชื™ื ืฉื•ื ื™ื. ืœื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ืฉ ืœืš ืžืฆื‘ ืฉื‘ื• ื™ื™ืฉื•ื ืื—ื“ ืžืชืงืœืงืœ ื‘ืื•ืชื” ืžื™ื“ื” ืคื” ื•ืฉื. ืื‘ืœ ื’ื ืื ื–ื” ืื•ืชื• ื”ื“ื‘ืจ, ืชืกืชื›ืœ ืขืœ ื›ืœ ืื—ื“ ืžื”ืฉืจืชื™ื ื”ืืœื”.

ืื– ื”ื ื” ื”ื’ื–ืจื” "ืฉืจืช ืื—ื“ - ื™ื•ื ืื—ื“" ื”ืชื‘ืจืจ ืฉื–ื” ื”ืกืคื™ืง ืœื ื• ืœื›ืœ ื ื™ืชื•ื—.

ื”ื—ืœืง ื”ืื ืœื™ื˜ื™ ื”ืจืืฉื•ืŸ ื–ื”ื” "ืœึดื˜ืขื•ึนื" - ืฆื•ืจื” ืžืงื•ืฆืจืช ืฉืœ ื”ืฆื’ืช ื”ืชื•ื›ื ื™ืช, ื ืงื™ื™ื” ืžื›ืœ ื”ืื™ื ื“ื™ืงื˜ื•ืจื™ื ื”ืžืกืคืจื™ื™ื. ื”ื—ื™ืชื•ืš ื”ืฉื ื™ ื”ื•ื ื”ื™ื™ืฉื•ื ืื• ื”ืฉื™ื˜ื”, ื•ื”ื—ืชืš ื”ืฉืœื™ืฉื™ ื”ื•ื ืฆื•ืžืช ื”ืชื•ื›ื ื™ืช ื”ืกืคืฆื™ืคื™ืช ืฉื’ืจื ืœื ื• ืœื‘ืขื™ื•ืช.

ื›ืฉืขื‘ืจื ื• ืžืžื•ืคืขื™ื ืกืคืฆื™ืคื™ื™ื ืœืชื‘ื ื™ื•ืช, ืงื™ื‘ืœื ื• ืฉื ื™ ื™ืชืจื•ื ื•ืช ื‘ื‘ืช ืื—ืช:

  • ื”ืคื—ืชื” ืžืจื•ื‘ื” ื‘ืžืกืคืจ ื”ืื•ื‘ื™ื™ืงื˜ื™ื ืœื ื™ืชื•ื—
    ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื ืชื— ืืช ื”ื‘ืขื™ื” ื›ื‘ืจ ืœื ืœืคื™ ืืœืคื™ ืฉืื™ืœืชื•ืช ืื• ืชื•ื›ื ื™ื•ืช, ืืœื ืœืคื™ ืขืฉืจื•ืช ืชื‘ื ื™ื•ืช.
  • ืฆื™ืจ ื–ืžืŸ
    ื›ืœื•ืžืจ, ืขืœ ื™ื“ื™ ืกื™ื›ื•ื ื”"ืขื•ื‘ื“ื•ืช" ื‘ืชื•ืš ืกืขื™ืฃ ืžืกื•ื™ื, ื ื™ืชืŸ ืœื”ืฆื™ื’ ืืช ื”ืžืจืื” ืฉืœื”ืŸ ื‘ืžื”ืœืš ื”ื™ื•ื. ื•ื›ืืŸ ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืฉืื ื™ืฉ ืœืš ืื™ื–ืฉื”ื• ื“ืคื•ืก ืฉืงื•ืจื”, ืœืžืฉืœ, ืคืขื ื‘ืฉืขื”, ืื‘ืœ ื–ื” ืฆืจื™ืš ืœืงืจื•ืช ืคืขื ื‘ื™ื•ื, ืืชื” ืฆืจื™ืš ืœื—ืฉื•ื‘ ืžื” ื”ืฉืชื‘ืฉ - ืžื™ ื’ืจื ืœื–ื” ื•ืœืžื”, ืื•ืœื™ ื–ื” ืฆืจื™ืš ืœื”ื™ื•ืช ื›ืืŸ ืœื ืฆืจื™ืš. ื–ื•ื”ื™ ืขื•ื“ ืฉื™ื˜ืช ื ื™ืชื•ื— ืœื ืžืกืคืจื™ืช, ื•ื™ื–ื•ืืœื™ืช ื’ืจื™ื“ื.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ื”ืฉื™ื˜ื•ืช ื”ื ื•ืชืจื•ืช ืžื‘ื•ืกืกื•ืช ืขืœ ื”ืื™ื ื“ื™ืงื˜ื•ืจื™ื ืฉืื ื• ืžื—ืœืฆื™ื ืžื”ืชื•ื›ื ื™ืช: ื›ืžื” ืคืขืžื™ื ื”ืชืจื—ืฉ ื“ืคื•ืก ื›ื–ื”, ื”ื–ืžืŸ ื”ื›ื•ืœืœ ื•ื”ืžืžื•ืฆืข, ื›ืžื” ื ืชื•ื ื™ื ื ืงืจืื• ืžื”ื“ื™ืกืง ื•ื›ืžื” ืžื”ื–ื™ื›ืจื•ืŸ...

ื›ื™, ืœืžืฉืœ, ืืชื” ืžื’ื™ืข ืœื“ืฃ ื”ื ื™ืชื•ื— ืฉืœ ื”ืžืืจื—, ืชืจืื” - ืžืฉื”ื• ืžืชื—ื™ืœ ืœืงืจื•ื ื™ื•ืชืจ ืžื“ื™ ื‘ื“ื™ืกืง. ื”ื“ื™ืกืง ื‘ืฉืจืช ืœื ื™ื›ื•ืœ ืœื”ืชืžื•ื“ื“ ืขื ื–ื” - ืžื™ ืงื•ืจื ืžืžื ื•?

ื•ืชื•ื›ืœื• ืœืžื™ื™ืŸ ืœืคื™ ื›ืœ ืขืžื•ื“ื” ื•ืœื”ื—ืœื™ื˜ ื‘ืžื” ืชืชืžื•ื“ื“ื• ืขื›ืฉื™ื• - ื”ืขื•ืžืก ืขืœ ื”ืžืขื‘ื“ ืื• ื”ื“ื™ืกืง, ืื• ืกืš ื”ื‘ืงืฉื•ืช... ืžื™ื™ื ื• ืืช ื–ื”, ื”ืกืชื›ืœื ื• ืขืœ "ื”ืขืœื™ื•ืŸ", ืชื™ืงื ื• ื• ื”ื•ืฆื™ืื” ื’ืจืกื” ื—ื“ืฉื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื”.
[ื”ืจืฆืื” ื•ื™ื“ืื•]

ื•ืžื™ื“ ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืคืœื™ืงืฆื™ื•ืช ืฉื•ื ื•ืช ืฉืžื’ื™ืขื•ืช ืขื ืื•ืชื” ืชื‘ื ื™ืช ืžืชื•ืš ื‘ืงืฉื” ื›ืžื• SELECT * FROM users WHERE login = 'Vasya'. Frontend, Backend, Processing... ื•ืืชื” ืชื•ื”ื” ืžื“ื•ืข ื”ืขื™ื‘ื•ื“ ื™ืงืจื ืืช ื”ืžืฉืชืžืฉ ืื ื”ื•ื ืœื ื™ื•ืฆืจ ืื™ืชื• ืื™ื ื˜ืจืืงืฆื™ื”.

ื”ื“ืจืš ื”ื”ืคื•ื›ื” ื”ื™ื ืœืจืื•ืช ืžื™ื“ ืžื”ืืคืœื™ืงืฆื™ื” ืžื” ื”ื™ื ืขื•ืฉื”. ืœื“ื•ื’ืžื”, ื”-frontend ื”ื•ื ื–ื”, ื–ื”, ื–ื”, ื•ื–ื” ืคืขื ื‘ืฉืขื” (ืฆื™ืจ ื”ื–ืžืŸ ืขื•ื–ืจ). ื•ืžื™ื“ ื ืฉืืœืช ื”ืฉืืœื”: ื ืจืื” ืฉื–ื” ืœื ื”ืชืคืงื™ื“ ืฉืœ ื”-frontend ืœืขืฉื•ืช ืžืฉื”ื• ืคืขื ื‘ืฉืขื”...

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืœืื—ืจ ื–ืžืŸ ืžื”, ื”ื‘ื ื• ืฉื—ืกืจ ืœื ื• ืžืฆื˜ื‘ืจ ืกื˜ื˜ื™ืกื˜ื™ืงื” ืœืคื™ ืฆืžืชื™ ืชื•ื›ื ื™ืช. ื‘ื•ื“ื“ื ื• ืžื”ืชื•ื›ื ื™ื•ืช ืจืง ืืช ืื•ืชื ืฆืžืชื™ื ืฉืขื•ืฉื™ื ืžืฉื”ื• ืขื ื”ื ืชื•ื ื™ื ืฉืœ ื”ื˜ื‘ืœืื•ืช ืขืฆืžืŸ (ืงื•ืจืื™ื/ื›ื•ืชื‘ื™ื ืื•ืชื ืœืคื™ ืื™ื ื“ืงืก ืื• ืœื). ืœืžืขืฉื”, ืจืง ื”ื™ื‘ื˜ ืื—ื“ ื ื•ืกืฃ ื™ื—ืกื™ืช ืœืชืžื•ื ื” ื”ืงื•ื“ืžืช - ื›ืžื” ืฉื™ืื™ื ื”ืฆื•ืžืช ื”ื–ื” ื”ื‘ื™ื ืœื ื•?, ื•ื›ืžื” ื ืžื—ืงื• (ืฉื•ืจื•ืช ื”ื•ืกืจื• ืขืœ ื™ื“ื™ ืžืกื ืŸ).

ืื™ืŸ ืœืš ืื™ื ื“ืงืก ืžืชืื™ื ืขืœ ื”ืฆืœื—ืช, ืืชื” ืžื’ื™ืฉ ื‘ืงืฉื” ืืœื™ื•, ื”ื•ื ืขืฃ ืขืœ ืคื ื™ ื”ืื™ื ื“ืงืก, ื ื•ืคืœ ืœ-Seq Scan... ืกื™ื ื ืช ืืช ื›ืœ ื”ืจืฉื•ืžื•ืช ืžืœื‘ื“ ืื—ืช. ืœืžื” ืืชื” ืฆืจื™ืš 100 ืžื™ืœื™ื•ืŸ ืจืฉื•ืžื•ืช ืžืกื•ื ื ื•ืช ื‘ื™ื•ื? ื”ืื ืœื ืขื“ื™ืฃ ืœื”ืขืœื•ืช ืืช ื”ืื™ื ื“ืงืก?

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืœืื—ืจ ืฉื ื™ืชื—ื ื• ืืช ื›ืœ ื”ืชื•ื›ื ื™ื•ืช ืฆื•ืžืช ืื—ืจ ืฆื•ืžืช, ื”ื‘ื ื• ืฉื™ืฉ ื›ืžื” ืžื‘ื ื™ื ื˜ื™ืคื•ืกื™ื™ื ื‘ืชื•ื›ื ื™ื•ืช ืฉืกื‘ื™ืจ ืžืื•ื“ ืฉื™ื™ืจืื• ื—ืฉื•ื“ื™ื. ื•ื–ื” ื™ื”ื™ื” ื ื—ืžื“ ืœื•ืžืจ ืœืžืคืชื—: "ื—ื‘ืจ, ื›ืืŸ ืืชื” ืงื•ื“ื ื›ืœ ืงื•ืจื ืœืคื™ ืื™ื ื“ืงืก, ื•ืื– ืžืžื™ื™ืŸ ื•ืื– ืžื ื•ืชืง" - ื›ื›ืœืœ, ื™ืฉ ืจืฉื•ืžื” ืื—ืช.

ื›ืœ ืžื™ ืฉื›ืชื‘ ืฉืื™ืœืชื•ืช ื›ื ืจืื” ื ืชืงืœ ื‘ื“ืคื•ืก ื”ื–ื”: "ืชืŸ ืœื™ ืืช ื”ื”ื–ืžื ื” ื”ืื—ืจื•ื ื” ืฉืœ ื•ืืกื™ื”, ื”ืชืืจื™ืš ืฉืœื”." ื•ืื ืื™ืŸ ืœืš ืื™ื ื“ืงืก ืœืคื™ ืชืืจื™ืš, ืื• ืฉืื™ืŸ ืชืืจื™ืš ื‘ืื™ื ื“ืงืก ืฉื‘ื• ื”ืฉืชืžืฉืช, ืื– ืืชื” ืœื“ืจื•ืš ื‘ื“ื™ื•ืง ืขืœ ืื•ืชื” "ืžื’ืจืคื”".

ืื‘ืœ ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉืžื“ื•ื‘ืจ ื‘"ื’ืจืคื”" - ืื– ืœืžื” ืœื ืœื•ืžืจ ืžื™ื“ ืœืžืคืชื— ืžื” ืขืœื™ื• ืœืขืฉื•ืช. ื‘ื”ืชืื, ื›ืฉืคื•ืชื—ื™ื ืชื•ื›ื ื™ืช ืขื›ืฉื™ื•, ื”ื™ื–ื ืฉืœื ื• ืจื•ืื” ืžื™ื“ ืชืžื•ื ื” ื™ืคื” ืขื ื˜ื™ืคื™ื, ืฉื‘ื” ื”ื ืžื™ื“ ืื•ืžืจื™ื ืœื•: "ื™ืฉ ืœืš ื‘ืขื™ื•ืช ืคื” ื•ืฉื, ืื‘ืœ ื”ืŸ ื ืคืชืจื•ืช ื›ื›ื” ื•ื›ื›ื”".

ื›ืชื•ืฆืื” ืžื›ืš, ื›ืžื•ืช ื”ื ื™ืกื™ื•ืŸ ืฉื”ื™ื” ืฆื•ืจืš ืœืคืชื•ืจ ื‘ืขื™ื•ืช ื‘ื”ืชื—ืœื” ื•ื›ืขืช ื™ืจื“ื” ืžืฉืžืขื•ืชื™ืช. ื–ื” ืกื•ื’ ื”ื›ืœื™ื ืฉื™ืฉ ืœื ื•.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืฉืื™ืœืชื•ืช PostgreSQL. ืงื™ืจื™ืœ ื‘ื•ืจื•ื‘ื™ืงื•ื‘ (ื˜ื ื–ื•ืจ)

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”