ΠΠΈΠ³ΡΠ°ΡΠΈΡ Ρ SSIS/ETL Π½Π° Python ΠΈ PostgreSQL: ΡΡΠΎ Π»ΠΎΠΌΠ°Π΅ΡΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ
ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ SSIS ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΠ²ΠΎΠΈ ETL-ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° Python ΠΈ PostgreSQL. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΡΠ°Π³ΠΎΠΌ: ΠΌΠ΅Π½ΡΡΠ΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΉ, Π±ΠΎΠ»ΡΡΠ΅ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ Π²ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ. ΠΠΎΡ ΡΡΠΎ Ρ Π²ΠΈΠ΄Π΅Π» Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
Π§ΡΠΎ Π»ΠΎΠΌΠ°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ΄Π΅
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ Ρ SSIS Π½Π° Python ΠΈ PostgreSQL ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° ΡΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΉ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²:
- ΠΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ: Python-ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ , Π½Π°ΡΠΈΠ½Π°ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠ°ΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΡΠΌΠ°Ρ . ΠΡΠΈΡΠΈΠ½Π° ΡΠ°ΡΡΠΎ ΠΊΡΠΎΠ΅ΡΡΡ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π°ΠΏΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ.
- ΠΠΎΡΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ : ΠΡΠ»ΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎΡΡΡ, Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ΅ΡΡΡΡΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΈΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ°Π±Π»ΠΈΡΡ Π±Π΅Π· ΠΎΡΠΊΠ°ΡΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Python.
- ΠΡΠΈΠ±ΠΊΠΈ Π² ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΡ : Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ SSIS, Π³Π΄Π΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ Π½Π°Π³Π»ΡΠ΄Π½Ρ, Π² Python ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠ±ΠΊΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ΅, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΈΡΠΊΠ°ΠΆΡΠ½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ.
- ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ: ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: Π³Π΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ°
ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python-ΡΠΊΡΠΈΠΏΡΡ ΡΠ°ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ Π½Π΅Π²Π΅Π»ΠΈΠΊ. ΠΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠΎΡ, ΡΡΠΎ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ:
- ΠΠ½Π΄Π΅ΠΊΡΡ: ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π½Π° ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ°Π±Π»ΠΈΡΠ°Ρ
ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡΠΌ (sequential scans). ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
EXPLAINΠΈEXPLAIN ANALYZEΠ΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² PostgreSQL. - ΠΠ°ΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°: ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ
executemany()ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Pandas, ΡΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. - Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ: ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Apache Arrow ΠΈΠ»ΠΈ Parquet Π²ΠΌΠ΅ΡΡΠΎ CSV).
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ: Python Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΈΠ·-Π·Π° GIL (Global Interpreter Lock). Π Π°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
multiprocessingΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Dask, Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
"EXPLAIN ANALYZE Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ°Ρ ΡΠ°ΡΡΠΎ Π²ΡΡΠ²Π»ΡΠ΅Ρ, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ seq scan Π²ΠΌΠ΅ΡΡΠΎ index scan. ΠΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠ³Π½Π°Π», ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π·Π°ΠΏΡΠΎΡ."
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ : ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ ΠΎΡΠΊΠ°ΡΡ
SSIS ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Python ΠΈ PostgreSQL ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΠΎΡ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ:
- Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
BEGIN,COMMITΠΈROLLBACKΠ΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ. Π Python ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ΅Π·psycopg2ΠΈΠ»ΠΈSQLAlchemy. - ΠΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΡ: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ
INSERT ... ON CONFLICT. - ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠΎΠ³ΠΈΡΡΠΉΡΠ΅ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ, Π³Π΄Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΡΠ±ΠΎΠΉ, ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ°.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ: ΠΡΠ΅Π³Π΄Π° ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π±Π»ΠΎΠΊΠΈ
try...except, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΈΠ±ΠΊΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΉ
Python ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ, Π½ΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠΎΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ:
- Π’Π΅ΡΡΡ: ΠΠΎΠΊΡΠΎΠΉΡΠ΅ ΠΊΠΎΠ΄ ΡΠ½ΠΈΡ-ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ pytest, Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
- ΠΠΎΠ΄-ΡΠ΅Π²ΡΡ: Π Π΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ΅. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ.
- Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ typing Π΄Π»Ρ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ .
- ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠ°Ρ ETL-ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠΎ Π½Π°ΠΉΡΠΈ ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ Π·Π° ΡΠ΅ΡΡΡΡΡ
Π PostgreSQL Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΡΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ETL, Π³Π΄Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ°ΡΡΠΎΠ²ΡΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
- Π£ΡΠΎΠ²Π½ΠΈ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ²Π΅Π½Ρ
READ COMMITTEDΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ETL-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². - ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: Π Π°Π·Π΄Π΅Π»ΡΠΉΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ Π·Π° ΡΠ΅ΡΡΡΡΡ.
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ PostgreSQL, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
pg_stat_activityΠΈpg_locks, Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅ΠΊΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ.
"ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² pg_locks Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ 'granted = false', ΡΡΠΎ ΡΠ²Π½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ."
ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½
ΠΠΎΡΠ»Π΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π²Π°ΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ. ΠΠΎΡ ΠΌΠΎΠΉ ΡΠ΅ΠΊΠ»ΠΈΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ:
1. ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΠ°ΡΠΎΠΉ ΠΈ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΡΠΎΠ²Π΅ΡΡΡΠ΅:
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ .
- ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ Π΄Π»Ρ ΡΠΈΡΠ»ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ .
- Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΉ.
2. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
ΠΠ·ΠΌΠ΅ΡΡΡΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΡΠ°ΠΏΠΎΠ² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
EXPLAIN ANALYZEΠ΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π°ΠΏΡΠΎΡΠΎΠ².- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Datadog ΠΈΠ»ΠΈ Prometheus, Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
3. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
Π‘ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠΉΡΠ΅ ΡΠ±ΠΎΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ:
- ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°ΠΉΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠΊΠ°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
- Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Python-ΠΊΠΎΠ΄Π΅ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ Π΄Π°Π½Π½ΡΡ .
4. ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ Π΄Π°Π½Π½ΡΡ :
- Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΈΠΌΠΈΡΠΈΡΡΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Locust ΠΈΠ»ΠΈ JMeter, Π΄Π»Ρ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ.
5. ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π΄Π»Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΌΠ΅ΡΡΠΈΠΊ:
- ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ CPU ΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠ°ΠΊ Grafana ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° PostgreSQL.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΈΠ³ΡΠ°ΡΠΈΡ Ρ SSIS Π½Π° Python ΠΈ PostgreSQL β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΡΠ°Π³ ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π·Π°ΡΡΠ°Ρ, Π½ΠΎ ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, Π³Π΄Π΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΡΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π΄Π»Ρ ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ETL-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ Π·Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠ΅ΠΉ.




