á¡á á®áááºáá¶á á¬ááœáẠááœáá·áºááŒá¯ááá¯ááºáá±á¬ áááºážáááºážá¡áá»áá¯á·ááᯠáááºááŒáá¬ážáá«áááºá áá áºáá±á·áá»áŸáẠáááºážááŸáá·áºáá»á®áá±á¬ SQL queries áá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠá á±á¬áá·áºááŒáá·áºáá«áááŸáá·áº á á±á¬áá·áºááŒáá·áºáá¬ážáá±á¬ PostgreSQL áá¬áá¬áá»á¬áž áá¬ááŸáá·áºáá»á® ááŸááá«áááºá
áááºááá·áºáááºážááá¬ááá¯ááºáᬠááŒá±ááŸááºážáá»ááºáá»á¬ážááẠááá¯áá²á·ááá¯á·áá±á¬ á¡áá»ááºá¡áááºááá¬áááᯠáááá±á¬ááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºá á±ááááºážá áááºážááẠáá¬ááẠdeveloper áá áºáŠážáááááᯠáááºááá¯á·ááœááºáá°á á±ááááºážá
áááºáá°ááœá± á áááºáááºá á¬ážáá²á áá®ážááŒá¬ážááŒá¿áá¬áá»á¬ážááŸáá·áº á¡áá»áá¯ážáá»áá¯ážáá±á¬ optimization áááºážááá¬áá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááŒááºážá SQL áá±ážááŒááºážááŸá¯áá»á¬ážááŸáá·áº PostgreSQL ááŸá áá¯á¶ááŸáẠDBA ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááŒááºáž - áááºáááºáž áá¯ááºáá±á¬ááºááá¯ááºáááºá
áá«á·áá¬áááºá Kirill Borovikov ááŒá áºááŒá®ážá áá«ááá¯ááºá á¬ážááŒá¯áááºá
áá±ážááœááºážáá áºáá¯áááºážáá áœááºážáá±á¬ááºáááºááᯠ"ááœá²áá¯ááºáááº" áááá¯á¡ááºáá±á¬áºáááºáž ááŒá¿áá¬ááᯠá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºááŒá±ááŸááºážááá·áºá¡áá« áá±ážááœááºážáá»á¬ážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠááá±á·áá»áœááºá¯ááºááá¯á·ááŒá±á¬ááŒáá«áááºá áááºážáá±á«ááºážáá»á¬ážá áœá¬áá±á¬áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŸááá±á¬á¡áá«, áááºá¡áá»áá¯á·ááá¯ááŸá¬ááœá±áááºááá¯á¡ááºáááºá ááŒá±ááŸááºážáááºážáá»á¬áž áá®ááŒá¿áá¬ááŒá®ážá
áá±áá¯áá»á¡á¬ážááŒáá·áº Tensor ááẠáá»áœááºá¯ááºááá¯á·ááá±á¬ááºáááºáá
áºáááºážá¡ááœááºááŒá
áºáááºá
áááºážááá¯á·á¡á¬ážáá¯á¶áž áá¯á¶ááŸááºá¡ááá¯ááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá¬á á±áááºá¡ááœáẠááá¯ááºáá¶áá áºááŸááºážááœáẠááœá¶á·ááŒáá¯ážáá±ážá ááºáᬠáá áá¯ááŸáááŒá®áž áááºážááá¯á·ááœáẠáá±á¬ááºáááºáá áºáá¯ááŸááááºá developer 1000.
áá»áœááºá¯ááºááá¯á·ááẠ2008 áá¯ááŸá áºááááºážá PostgreSQL ááŸáá·áº á¡áá¯ááºáá¯ááºáá²á·ááŒá®áž áá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºááá·áºá¡áá¬áá»á¬áž - áá¯á¶ážá áœá²áá°áá±áá¬á ááááºážááááºážá ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á ááŒááºáááááºážá¡áá»ááºá¡áááºá áá áºáá»á¬ážá០áá±áá¬áá»á¬áž- 400TB áááºááá¯áá«áááºá. áá¯ááºáá¯ááºááŸá¯áá áºáá¯áááºážááœáẠáá¬áá¬áá±á«ááºáž 250 ááá·áºááŸáááŒá®ážá á á¯á á¯áá±á«ááºážááœáẠáá»áœááºá¯ááºááá¯á·á á±á¬áá·áºááŒáá·áºááá·áºáá±áá¬áá±á·á áºáá¬áᬠ1000 ááá·áºááŸááá«áááºá
SQL ááẠááŒá±ááŒá¬áá¬áá¬á
áá¬ážáá
áºáá¯ááŒá
áºáááºá áááºááẠáá
áºá
á¯á¶áá
áºáá¯á âáááºááá¯á·â áá¯ááºáá±á¬ááºááá·áºáááºááᯠááá±á¬áºááŒáá²á áááºá¡á±á¬ááºááŒááºáá»ááºááá·áº âá¡áá¬â ááᯠáá±á¬áºááŒáá«á DBMS ááẠJOIN áá¯ááºáááºáž - ááá·áºááá¬ážáá»á¬ážááᯠáá»áááºáááºáááºážá áááºááá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬áž áááºááŸááºáááºá á¡ááœáŸááºážááááºážááᯠááŒááºáááºážááááºá áááºááá·áºá¡áá¬á áááºáá²á·ááá¯á· áá¯ááºáá±á¬ááºááááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá
áœá¬ áááá«áááºá
á¡áá»áá¯á·áá±á¬ DBMS áá»á¬ážááẠá¡ááááºá¡ááŒáœááºáá»á¬ážááᯠáááºáá¶áááº- "ááá¯ááºáá«á á€ááá¬ážááŸá áºáá¯ááᯠááá¯áá²á·ááá¯á·áá±á¬ áááºážá á®áá áºáá¯ááœáẠáá»áááºáááºáá«" á ááá¯á·áá±á¬áº PostgreSQL ááẠáááºážááᯠááá¯ááºááá¯ááºáá«á á€áááºááŸá¬ ááááºáááºáž developer áá»á¬ážá áááááŸááá±á¬ á¡áá±á¡áá¬ážááŒá áºáááº- " developer áá»á¬ážá¡á¬áž á¡ááááºá¡ááŒáœááºá¡áá»áá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážááŒááºážááẠquery optimizer ááᯠááŒá®ážá á±áá»ááºáá«áááºá"
ááá¯á·áá±á¬áºá PostgreSQL ááẠâááŒááºáâ ááᯠáá°á·ááá¯ááºáá° ááááºážáá»á¯ááºááẠááœáá·áºáááŒá¯áá±á¬áºáááºážá áááºážááẠáá¯á¶ážáááœáá·áºááŒá¯áááºá áá°á·á¡áá²ááŸá¬ áá¬ááœá±ááŒá áºáá±áá² ááŒáá·áºáá«áááá·áºáá±ážááŒááºážááŸá¯ááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá«á áááºážááẠáááºááá·áºáá±áá¬ááœáẠááŒá¿áá¬ááŸáááááºážá
áá±áá°áá»á¡á¬ážááŒáá·áºá developer [DBA ááá¯á·] ááœáẠáááºááá·áºááá¹ááááºááŒá¿áá¬áá»á¬áž ááŸááááºááááºážá âáá®ááŸá¬ áá»áœááºáá±á¬áºááá¯á· áá±á¬ááºážááá¯áá»áẠááŒá®ážááœá¬ážáá«ááŒá®á á¡áá¬á¡á¬ážáá¯á¶ážááẠáá»áœááºá¯ááºááá¯á·ááŸáá·áºá¡áá° ááŸá±ážááœá±ážáá±áá«áááºáá¡áá¬á¡á¬ážáá¯á¶áž ááœá²áá±á¬ááºážááŒá
áºáá±ááŒá®... áá
áºáá¯áá¯áá±á¬á· áá¯áá¹ááá±á¬ááºáá±ááŒá®!"
á¡ááŒá±á¬ááºážáááºážáá»á¬ážááẠá¡ááŒá²áááºážáá®ážáá«ážáá°áá®áááº-
- áááá±á¬ááºááŸá¯áááŸááá±á¬ query algorithm
áá±á¬á·ááºáá²áá±ážáá¬ážáá°- "ááá¯áá»áœááºá¯ááºááẠJOIN ááŸáá áºááá·áº SQL ááœáẠá á¬ážááœá² 10 áá¯á¶ážááᯠáá±ážáá«áááºá ááá¯á·áá±á¬áº á¡á¶á·á©á áá¬áá»á¬áž ááŒá áºáá±á«áºáá¬ááŒááºážáááŸááá«á ááá¯áá²á·ááá¯á·áá±á¬ ááœá²ááŒá¬ážááŸá¯ááŸááá±á¬ áááºááá·áºá áá áºáááᯠ(áá áºáá¯á០ááá¬ážááœáẠáá áá¯) ááẠá¡ááŒá²áááºáž á¡ááŸá¬ážá¡ááœááºážáá áºáá»áá¯ážááᯠáá±ážáá«áááºá [áá±á¬ááºážáá«áž ] - ááááºááá¯ááºáá±á¬á
á¬áááºážááá¬áž
á€á¡áá»ááºááẠááŒá®ážáá¬ážáá±á¬áá±áá¬á¡á á¯á¶ááᯠáá¬áá¬áá±á«áºááá¯á· ááẠâáá±á¬ááºážâ áá±á¬á¡áá«á áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááŒá¯áá¯ááºááŒá®áž ááá·áºáááºááááºááᯠâááááºáááºáá¶ááŒááºážâ áá±ážáá±á¬á¡áá«ááœáẠá€á¡áá»ááºááẠá¡ááœááºáááºááá¯ááºáá«áááºá ááá±á·á ááŸááºáááºáž 10 áá¯ááŸáááŒá®áž áá®áá±á· 10 áááºážááŸááá±ááá·áº PostgreSQL á áá«ááᯠááááááŒá¯áááá±ážáá²á·á¡ááœáẠá¡á²áá«ááᯠááŒá±á¬ááŒááá¯á· ááá¯áá«áááºá [áá±á¬ááºážáá«áž ] - á¡áááºážá¡ááŒá
áºáá»á¬ážáá±á«áºááœáẠ"ááááº"
áá áºá áááºááá¯áá® ááá¯á·ááá¯áẠáááá¯áááºáᬠá áœááºážáá±á¬ááºááẠááá¯á¶áá±á¬ááºáá±á¬ á¡á¬ážáááºážáá¬áá¬ááœáẠááŒá®ážáá¬ážááŒá®áž áá±ážáá¶áá±á¬ áá±áá¬áá±á·á áºáá áºáá¯ááᯠááẠááá·áºááœááºážáá¬ážáááºá áá«áá«áá²... áá áºáá±áá¬áá¬ááŸá¬ áááºáá¯ááºááá¯á·áááá±á¬á·áá²á· á áœááºážáá±á¬ááºáááºáá»ááºááŸá¬áá»ááºáá áºáá¯ááŸááááºá - ááááºááá¯á·ááŒááºážá
á€á¡áá¬ááẠáááºáá²áá±á¬á¡áá»ááºááŒá áºáááºá ááá¯á·áá±á¬áº áááºážááá¯á·ááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááŒá¯ááŒááºááœááºážáá¶áá¬ážáá±á¬ áá±ážááœááºážáá»á¬áž (ááá·áºááœááºážáááºá á¡ááºááááºáá¯ááºááŒááºážá áá»ááºááŒááºáž) á¡ááœáẠá¡áááºááá¯ááºáá¯á¶ážááŒá áºááẠ- á€á¡áá¬ááẠáá®ážááŒá¬ážááŒá®ážáá¬ážáá±á¬á¡ááŒá±á¬ááºážá¡áá¬ááŒá áºáááºá
á¡á á®á¡á ááºáá áºáá¯ááá°ááŒááºážá
...á¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶ážá¡ááœááºá á¡á á®á¡á ááºáá áºáá¯ááá¯áááºá! áá¬áá¬á¡ááœááºáž áá¬ááœá±ááŒá áºáá±áá²ááá¯áá¬ááᯠááŒáá·áºááá¯á· ááá¯áá«áááºá
PostgreSQL á¡ááœáẠquery execution plan ááẠá
á¬áá¬ážááá¯ááºá
á¬ážááŒá¯ááŸá¯ááœáẠquery execution algorithm ááá
áºáááºááŒá
áºáááºá á¡á
á®á¡á
ááºáá±ážááœá²áá°á០ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯ááááºá¡á á¡áááá±á¬ááºáá¯á¶ážááŒá
áºááŒá±á¬ááºáž ááœá±á·ááŸááááá·áº á¡ááºáááá¯áá®ááẠá¡ááá¡áá»ááŒá
áºáááºá
áá áºááẠnode áá áºáá¯á á®ááẠáááºáááºááŸá¯áá áºáá¯ááŒá áºáááº- ááá¬ážáá áºáᯠááá¯á·ááá¯áẠá¡ááœáŸááºážááááºážáá áºáá¯á០áá±áá¬ááá¯ááá°ááŒááºážá áá áºááŒá±áá¯á¶áá áºáá¯áááºáá±á¬ááºááŒááºážá ááá¬ážááŸá áºáá¯áá°ážáá±á«ááºážááŒááºážá áá«áááºááŒááºážá ááŒááºáá±á¬ááºááŒááºáž ááá¯á·ááá¯áẠááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠáááºáá¯ááºááŒááºážá á á¯á¶á ááºážááŸá¯áá áºáá¯ááᯠáá¯ááºáá±á¬ááºáá¬ááœáẠá€áá áºáááºá áá¯á¶ááŸááºáá»á¬ážá¡ááœááºáž áááºážáá»áŸá±á¬ááºááŒááºáž áá«áááºáááºá
á
á¯á¶á
ááºážáá±ážááŒááºážááŸá¯ á¡á
á®á¡á
ááºááᯠááá°ááẠá¡ááœááºáá¯á¶ážáááºážáááºážááŸá¬ áá¯ááºááŒááºáá»ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááŒá
áºáááºá EXPLAIN
. á¡á
á
áºá¡ááŸáẠattribute áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá°áááºá ááá¯ááá¯áááºááŸá¬ á¡ááŒá±áá¶áá±á«áºááœáẠquery áá
áºáá¯ááᯠá¡ááŸááºááááºáá¯ááºáá±á¬ááºáááºá EXPLAIN (ANALYZE, BUFFERS) SELECT ...
.
ááá±á¬ááºážáá²á·á¡ááá¯ááºáž- ááẠrun áá²á·á¡áá« "áá®ááŸá¬áá²á· á¡áá¯" ááŒá áºááœá¬ážáá²á·á¡ááœáẠlocal debugging á¡ááœááºáᬠááá·áºáá±á¬áºáá«áááºá á¡áááºá áááºááẠáá±áá¬á á®ážáááºážááŸá¯á¡á¬ážáá±á¬ááºážáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá¡á±á¬ááºááœáẠááŒáá·áºáá¬ážá áœá¬áááºáá¬ážáá±á¬ áá¬áá¬ááá¯áá°áá«áá áááºááœá±á·ááááº- "á¡áá¯ážá á€ááœáẠáá»áœááºá¯ááºááá¯á·ááœáẠááŸá±ážááœá±ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááŸááááºáXia áá±á¬ááºážááá¯áá»ááºááá¯á" ááœááºáá²á·áá±á¬ áá¬áá®áááºá - áááºáá¯ááºáá±á¬ááºáá±ááŒá®áž á€áá±á¬ááºážááá¯áá»ááºááᯠááŸááºáááºážáá»á¬ážá០áá¬áá¬ááá¯á· ááŒááºáá°áá¬á ááºááœáẠáááºááá±áá¬á¡ááœá²ááŸáá·áº á á¬áááºážááá¬ážáá áºáá¯áá¯á¶áž ááŒá±á¬ááºážáá²ááœá¬ážáááºá áááºááẠáááºážááᯠá¡ááŸá¬ážááŸá¬ááẠáá¯ááºáá±á¬ááºááẠ- áááºážááẠáá»áŸááºááŒááºá áœá¬ áááºáááºáá±áááºá ááŒá®ážáá±á¬á· áá¬ááŒá±á¬áá·áºáá²á áá¬ááŒá±á¬áá·áºááá¯áᬠáá¬ážááááºááá¯ááºáá°ážá áááŒá ẠááŒááºážááŒááºáž
áá±á¬ááºážááá¯áá»ááºá¡á¬áž áá¬áá¬áá±á«áºááœáẠáá¯ááºáá±á¬ááºááá·áºá¡áá»áááºááœáẠááŒá
áºáá»ááºáá²á·áááºááᯠá¡ááá¡áá»áá¬ážáááºáááºá¡ááœáẠá
áááºáá°áá»á¬ážá áá±ážáá¬ážáá²á·áááºá
á¡áá»áá¯á·áá±á¬ áá±á¬ááºážááá¯áá»ááºááẠáááºááŒá±á¬áá¬ážááá·áº ááá·áºáááºáá»ááºááẠááá¯ááŸááºáááºááᯠááááŸááá«áá áááºážááẠáá¯ááºáá±á¬ááºáááºá á€áá±á¬ááºážááá¯áá»ááºá á¡á á®á¡á ááºá "áá»áŸááºáá áºááŒááºáá¬ááºáá¯á¶" ááŸáá·áº áááºážááá¯á·ááᯠááŸááºáááºážááœáẠááœá²áá±ážáá«á.
á¡áᯠá¡á¬ážáá¯á¶ážá¡áááºááŒá±áá±áá¯á¶ááááºá áá«ááá¯á·á ááŸááºáááºážááá¯ááœá¬ážááŒá®áž ááá¯ááŸá¬ááŒáá·áº... [á
á¬áá¬ážááŒá±á
áœááº]á áá«áá±ááá·áº 11ms áá±á¬áẠá¡áá»áááºáá°ááá²á·á¡ááœáẠá¡á²áá«á á¡áááºážáá±á¬ááºážáá²á· á¡á
á®á¡á
ááºáááœá²ááá¯á· áá»áœááºáá±á¬áºááá¯á·á áá¬á០áááŒá±á¬ááá¯ááºáá«áá°ážá
á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±áá±áá¯á¶áááẠ- ááá¯á·áá±á¬áº á¡ááŸááºááááºááŒá áºáá»ááºáá²á·áááºááŸá¬ ááŸááºážááŸááºážáááºážáááºáž áááŸááá«á áá±áá°áá»á¡áá»áááºáááœá²ááá¯á· áá¬ááŸáááŒááºááá«áá°ážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº ááá¯ážááŸááºážáá±á¬á á¬áá¬ážá âááá¯ážááááºâ ááá¯ááŒáá·áºááŒááºážááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº á¡ááŒááºá¡á¬áá¯á¶ááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
áá«áá±ááá·áº ááŸááºážááŸááºážáááºážáááºážáááááááºáá±á¬áẠá¡áááºáááŒá±áááºáá±á¬áẠá¡ááŒá±áá¶áá»áá²á· ááŒá¿áá¬ááœá± ááá¯áá»á¬ážáá«áááºá
- node ááá¯ááœáŸááºááŒáááºá áá áºáááºááœá²áá áºáá¯áá¯á¶ážá á¡áááºážá¡ááŒá áºáá±á«ááºážá ᯠáá°á·á¡á±á¬ááºááŸá¬á ááá¯ááá¯áááºááŸá¬á á€á¡áá°ážááœáŸááºážááááºážá áááºáááºááŒááºážá¡ááœáẠá¡áá»áááºáááºáá»áŸáá¯á¶ážá áœá²áá²á·áááºááᯠáááºážá¡á±á¬ááºááœáẠááŸá¬ááœá±ááœá±á·ááŸáááá¯ááºáááºááá¯ááºáá±á áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºážááœáẠ"ááá±ážáá»á¬áž" ááŸáá·áº á¡ááŒá±á¡áá±ááá¯ááºáᬠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá CTE áá»á¬áž ááŸááááŸá - ááŸáá·áº á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠ"áá»áœááºá¯ááºááá¯á·áá áááºáá²ááœááº" áá¯ááºááẠáááºááŒáœá áœá¬ááŒáá·áºááŸá¯ááá«áááºá
- áá¯áááá¡áá»ááº- node ááœááºáá±á¬áºááŒáá¬ážáá±á¬á¡áá»áááºááẠsingle node áááºáááºáá»áááº. á¥ááá¬á¡á¬ážááŒáá·áºá ááá¬ážááŸááºáááºážáá»á¬ážááŸáá áºááá·áº ááœááºážáááºáá áºáá¯á¡á¬áž ááŒáááºáááºáá»á¬ážá áœá¬ááŒá¯áá¯ááºááŒááºážááŒá±á¬áá·áº ဠnode á¡á¬áž áá¯ááºáá±á¬ááºáá«áá ááá¯á·áá±á¬áẠloopsâဠnode á á ááºáááºážáá»á¬ážâá¡á á®á¡á ááºááœáẠááá¯ážáá¬áá«áááºá áá«áá±ááá·áº á¡áá¯ááŒá°áá¯á¶áž ááœááºáá»ááºáá»áááºáᬠá¡á á®á¡á ááºá¡á á¡áá°áá°áá«áá²á ááá¯ááá¯áááºááŸá¬á ဠnode ááá¯á á¯á á¯áá±á«ááºážáááºáá»áŸááŒá¬á¡á±á¬ááºáá¯ááºáá±á¬ááºáá²á·áááºááá¯áá¬ážáááºáááºá¡ááœááºá áááºáááºá¡áá¬áá áºáá¯ááŸáá·áºáá áºáá¯áááºá "áááºááá±á«ááºážá" ááá¯áááºááœá¬ážáááºááá¯á¡ááºáááºá
áá®ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááŸá¬ "á¡áá»á±á¬á·áá¯á¶ážááá·áºááºá áááºáá°áá²á" áááŒá áºááá¯ááºááá±á¬ááºáá«á ááá¯á·ááŒá±á¬áá·áº developer áá»á¬ážááá¯ááºááá¯ááºááẠáááºážááᯠ"áááºá áœá²á á¬á¡á¯ááº" ááœáẠáá±ážááŒáááºá "á¡á á®á¡á á¥áºáá áºáá¯á¡á¬áž áá¬ážáááºááŒááºážááẠáááºáá°áááá·áº á¡áá¯ááá¬áá áºáááºááŒá áºáááºá á¡ááœá±á·á¡ááŒá¯á¶...".
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááœáẠdeveloper 1000 ááŸáááŒá®áž áááºážááá¯á·áá áºáŠážá á®á¡á¬áž á€á¡ááœá±á·á¡ááŒá¯á¶ááᯠáááºáááŒá±á¬ááŒááá¯ááºáá«á áá« áááºážááááẠáá«áá±ááá·áº ááá¯ááŸá¬ áá áºáá±á¬ááºáá±á¬ááºá ááááá±á¬á·áá°ážá áá° áááºáá°ááá¯ááºáááºááŒá áºá á± ááááºááŒá áºááá¯ááºáá±á¬áºáááºáž ááá¯á¡áá¯ááºáá¯ááºááẠááá¯á¡ááºááŒá®áž á€á¡ááœá±á·á¡ááŒá¯á¶ááᯠáá°áááºááŸá¬ááááºáááºážá
á áááºáá°ážáá²á· á á®á ááºáá«á
ááá¯á·ááŒá±á¬áá·áº á€ááŒá¿áá¬áá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážááẠááá¯á¡ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááá±á¬áá±á«ááºáá«áááºá á¡á
á®á¡á
á¥áºááᯠáá±á¬ááºážá
áœá¬ááŒááºáá±á¬ááºááŒááºážá.
áá»áœááºá¯ááºááá¯á·ááẠâáá±ážááœááºááá¯ááŒááºáâ áŠážá
áœá¬ááœá¬ážááẠ- áááºáá²á·ááá¯á·ááŸááááºááá¯ááŒáá·áºááẠá¡ááºáá¬áááºáá±á«áºááœáẠááŒáá·áºááŒáá«á
áá¯á·á
ááá¯á·áá±á¬áº á¡áááºážááŸáá·áºá¡áá»á¬áž ááŒá
áºááœááºážáá±áá±á¬ âááá¯ááºááá¯ááºâ ááŒá±ááŸááºážáááºážáá»á¬áž á¡ááœááºáááºážáá«ážááŒá±á¬ááºáž ááœá±á·áááẠ- á
á¬áá¬ážá¡á áá
áºáá¯áááºážáá±á¬á
- node áááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáá»áááº
- áá áºáááºááœá²áá áºáá¯áá¯á¶ážá¡ááœáẠá á¯á á¯áá±á«ááºážá¡áá»áááº
- á á¬áááºážá¡ááºážá¡á áá»áŸá±á¬áºááá·áºáá¬ážááá·áº ááŸááºáááºážáá»á¬áž ááŒááºáááºááá°áá²á·áááºá
- node body á áá°á·áá¬áá°
á€áááºáá±á¬ááºááŸá¯ááẠááá·áºááºáá»á¬ážááᯠááááºážáááºážááŒááºážááá¯áááºáž áá»áŸáá±ááá¯ááºá áœááºážááŸááááºá áááºážáá²á·á¡á á®á¡á ááºááᯠá¡á²áá®á·áá²ááᯠáá áºáá»ááá¯ááºááŒá®áž "áá±áž Vasyaá áá®ááŸá¬ ááá·áºááºáá áºáá¯ááŸááááºá á¡á²áá®ááŸá¬ áá áºáá¯áá¯ááŸá¬ážáá±ááŒá®" ááá¯á·ááŒá±á¬ááá¯ááºáááºá
áá«áá±ááá·áº ááŒá¿áá¬áá±ážááœá±áááºáž ááŸááááºá
ááááŠážá áœá¬á "copy-paste" áááŒá®ážáá¬ážáá±á¬ááá¬áá áá áºáá¯á¶ážáá áºááá¯ááºážááᯠáá°á ááá¯áá±áá¬á áááºáá»ááºá á¡áááºáááºá
áá¯áááá¡ áá±áá¬áááºááŸá¯ááŸá¯ááá¬áááᯠááœá²ááŒááºážá
áááºááŒá¬ááŒááºážáááŸááá«á - áá°áá®áá±á¬ buffers á¡ááœáẠEXPLAIN (ANALYZE, BUFFERS)
á áá«ááá¯á·áá®ááŸá¬áááœá±á·áá°ážá áá°ááẠáááºážááá¯á·ááᯠáááºááá¯á·ááœá²ááŒááºážááááºááᯠáááá áááºážááá¯á·ááᯠáá¬ážáááºááŒá®áž áááºážááá¯á·ááŸáá·áº áá¯ááºáá±á¬ááºááááºááᯠááá¯ážááŸááºážá
áœá¬ ááááá±á áááºááẠáá±áá¬á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºááŒá®áž disk ááŸáá·áº memory cache ááᯠááœá²ááŸá¬ážá
áœá¬ááœá²áá±áá°áá±ááá¯ááºáááºááᯠááááŸááá±á¬á¡áá« á€á¡áá»ááºá¡áááºááẠá¡ááœááºá¡áá±ážááŒá®ážáá«áááºá
ááááá¡áá¯ááºááá¹ááá¬ááá±á¬á· áá®ááá±á¬áá»ááºáá²á· ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ á¡ááœááºá¡á¬ážáááºážáá«áááºá áá¯ááºáá»á¬ážááẠá¡ááœááºáá±ážáááºáááºá ááŒá±á¬ááºááá»áŸáẠáá áºááŒáááºá áá¯ááºááẠPerl ááœááºááŸááá±áá«á áá±á¬ááºážáá«áááºá
ááá¯á·áá±á¬áº á€á¡áá¬á¡á¬ážáá¯á¶ážááẠ"áá®áá»ááºážá
á¬áá¬ážáá»á¬áž" ááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá€á¡áá¬ááŒáá·áº áá
áºáááºážáááºážááŒáá·áº áá±ááá¯ááºááá¯ááºáá±á¬áºáááºáž á€áááºáá±á¬ááºááŸá¯á០áá»áœááºá¯ááºááá¯á·ááᯠááœááºá
áœá¬ááœá²ááœá¬ážá
á±ááá·áº á¡áá¬áá
áºáá¯ááŸááá«áááºá á€á¡áá¬áá»á¬ážááẠCommon Table Expression (CTE) ááŸáá·áº InitPlan/SubPlan áá²á·ááá¯á·áá±á¬ ááá¯ááºááá¯ááºááá
Ạnode á¡áá»áá¯ážáá»áá¯ážááᯠááœá²ááŒááºážá
áááºááŒá¬áá¬ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŒá
áºáááºá
á€áá¯á¶ááᯠáááºáá¯á¶ááŒááºáá«áá node áá áºáá¯áá»ááºážá á®á á á¯á á¯áá±á«ááºážáá¯ááºáá±á¬ááºáá»áááºááẠáá±á¬ááºážááá¯ááŸá¯áá áºáá¯áá¯á¶ážá á á¯á á¯áá±á«ááºážáá¯ááºáá±á¬ááºáá»áááºááẠááá¯áá»á¬ážáá«áááºá ááá¯ážááŸááºážáá«ááẠ- ဠCTE ááá»áá¯ážáááºá¡áá»áááºááᯠCTE Scan node ááŸáá¯ááºááá¬ážáá«á. ááá¯á·ááŒá±á¬áá·áºá CTE scan ááá¯ááºááá¯ááºáááºáá»áŸááŒá¬ááŒá¬ ááŸááºáááºáá±á¬á¡ááŒá±ááᯠáá»áœááºá¯ááºááá¯á· áááááá¯ááºáá±á¬á·áá«á
áá±á¬ááºáá±á¬á· áá«ááá¯á·ááá¯ááºááá¯ááºáá±ážááá¯á· á¡áá»áááºáá±á¬ááºááŒá®ááá¯áᬠááááá¯ááºááááºá áá±á¬á·ááºáá²áá±ážáá¬ážáá°ááá¯ááºážá "ááá¯áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯ááºáá±ážáá«áááºá á¡ááœááºááœááºáá°áááá·áºáááº!"
áááºáááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠáá¯á¶ááŸááºá¡á á¯áá áºáá¯áá°áá¬ážáááº- Node.js + Express ááá¯á¡ááŒá±áá¶áá¬ážáá±á¬ coreá ááŸááá±á¬áá¯á¶áá»á¬ážáá»á¬ážá¡ááœáẠBootstrap ááŸáá·áº D3.js ááá¯á¡áá¯á¶ážááŒá¯áá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááá»áŸá±á¬áºááá·áºáá»ááºáá»á¬ážááẠá¡ááŒáá·áºá¡áááá¬ážáá»áŸáááẠ- áá»áœááºá¯ááºááá¯á·ááẠ2 áááºá¡ááœááºáž ááááá¯á¶áž ááá°áá¬ááᯠáááŸááá²á·áá«áááºá
- á
áááºááŒáá¯ááºá¡á
á®á¡á
áẠparser
ááá¯ááá¯áááºááŸá¬á ááᯠáá»áœááºá¯ááºááá¯á·ááẠPostgreSQL ááŸáá¯ááºáá¯ááºáá±á¬ áááºááá·áºá¡á á®á¡á ááºááá¯áááᯠááá¯ááºážááŒá¬ážááá¯ááºááŒá®ááŒá áºáááºá - dynamic nodes áá»á¬ážá ááŸááºáááºáá±á¬ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ - CTE Scaná InitPlaná SubPlan
- ááŒá¬ážáá¶ááŒáá·áºááŒá°ážááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŒááºážá - áá±áá¬á á¬áá»ááºááŸá¬áá»á¬ážááᯠáááºááá¯áá®ááŸáááºááá·áºáá±áá¬á áá±áááá¯ááºáᬠáááºááŸáºá áá áºááºá០áá±áá¬ááœááº
- ááŸááºážáááºážááŸá¯ááá²á·áá«áááºá
á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºáááºážááœáẠâáá°ážâ áááºááá¯ááºáá±á¬áºáááºáž áá¯á¶ááœáẠâá¡áá¶á·áá¯á¶ážááá·áºááºâ ááᯠáá»ááºáá»ááºážááŒáá·áºáááºá
syntax highlighting áá«áááºáá±á¬ á€áá²á·ááá¯á·áá±á¬ á¡áá¬áá
áºáᯠáá»áœááºá¯ááºááá¯á·áááŸááááºá ááá¯á·áá±á¬áº áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·á developer áá»á¬ážááẠá¡á
á®á¡á
ááºá ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ááá¯ááºá
á¬ážááŒá¯ááŸá¯ááŒáá·áº á¡áá¯ááºááá¯ááºáá±á¬á·áá² ááá¯ááá¯áá±á¬áá¯á¶á
á¶ááŒáá·áº áá¯ááºáá±á¬ááºááŒáááºá áá±á¬ááºáá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá¶áá«ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááœá²ááŒááºážá
áááºááŒá¬ááŒá®áž áááºážááá¯á·ááᯠáááºáᬠáá»ááá¯ááºááŒá®áž á¡áááºááœáẠáááá
á¬ááŒá±á¬ááºážááá¯áᬠáá»ááºáá¬ážáá²á·áááºá áááºážááẠáááºááá¯á·áá±á¬ node á¡áá»áá¯ážá¡á
á¬ážááŒá
áºáááº- CTE á
áááºááºá CTE áá»áá¯ážááẠááá¯á·ááá¯áẠSeq Scan á¡áá»áá¯á·ááᯠááááááºááá¹ááá¬á¡á ááááááºá
á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á· áá±á«áºááá¯áá±á¬ á¡ááá¯áá±á¬áẠááá¯ááºá á¬ážááŒá¯ááŸá¯ ááŒá áºáááºá á¡á á®á¡á ááºáá¯á¶á á¶áá¯á¶á á¶.
áááŒá¬ážáá¬ááœá± á¡áááºááŒá±ááŸá¬áá²á áá»áœááºá¯ááºááá¯á·áá
á¯á
á¯áá±á«ááºážá¡áá»áááºááá±á
á¯ááá¯áááºááá·áº node ááœááºááœá²áá±áá¬ážáááºááá¯ááŒáá·áºááŸá¯áááºá¡áááºááŒá±áááá·áºááẠ- ááŒá®ážáá»áŸááºáá±ážáááºááœáẠ"áááºáá¬ážáá«" á
ááºááá¯ááºážááá¬áž.
áá»áœááºá¯ááºááá¯á·ááẠnode ááá¯ááœáŸááºááŒááŒá®ážááŒáá·áºáá« - Seq Scan ááẠá
á¯á
á¯áá±á«ááºážá¡áá»áááºááá±ážáá¯á¶áá
áºáá¯á¶áááºáááºážááŒá®áž áá»áẠ3/4 ááᯠCTE Scan ááŒáá·áºáá°áá±á¬ááºááœá¬ážáá«áááºá ááááºááá·áº! ááá·áºáá±ážááŒááºážáá»ááºáá»á¬ážááœáẠáááºážááá¯á·ááá¯áááºááŒáœá
áœá¬á¡áá¯á¶ážááŒá¯áá«á CTE Scan á "áá®ážááŸá¯ááºáž" ááŸáá·áºáááºáááºáá±á¬ áá±ážáááºáá±á¬ááŸááºáá»ááºáá
áºáá¯ááŒá
áºáááºá áááºážááá¯á·ááẠá¡ááœááºááŒááºáááºááá¯ááºáá« - áááºážááá¯á·ááẠáá¯á¶ááŸááºá
á¬ážááœá²á
áááºáááºááŒááºážáááºááẠáá¯ááºáá¶á·áá«áááºá
áá«áá±ááá·áº áá¯á¶ááŸááºá¡á¬ážááŒáá·áºáá±á¬á· Seq Scan áá¯ááºáá²á· á¡áá»áááºáá²á· áááºáááºáá»á±á¬áºá Seq Scan âá á¬ážáááºâ ááá¯áá¬ááᯠáá»ááºááŒááºážáá±á¬ááºááŒáá²á·á¡áá«á áá¯á¶ááŸááºá¡á¬ážááŒáá·áºáá±á¬á· áá®áá¯á¶ááœá±á ááá¯á áááºáááºá á¬ážá áá¬áá±á¬ááºážááŒá®áž ááá¯ááŸá¯ááºááœá±ážáá«áááºá ááá¯á·á¡ááŒááºá á¡ááœááºážááœáẠFilter áá áºáá»áá¯ážáá»áá¯ážááŸááá«áááºá ááŸááºáááºážáá»á¬ážá áœá¬ááᯠááœáŸáá·áºáá áºáá¬ážáá«áááº... á€áá¯á¶ááᯠdeveloper áᶠááá¯ááºááá¯ááºááœáŸáá·áºááá¯ááºááŒá®áž "Vasyaá áá®ááŸá¬ á¡áá¬á¡á¬ážáá¯á¶ážá áááºážá¡ááœáẠááá±á¬ááºážáá«áá°ážá ááœá±ážááŒáá·áºáá«á áá áºáá¯áá¯ááŸá¬ážáá±ááŒá®!â
ááá¬áá¡á¬ážááŒáá·áºá á¡áá»áá¯á·áá±á¬ âááœááºááŒá
áºáá»á¬ážâ áá«áááºáááºá
ááááá¯á¶ážááœá±á·áá¬á ááŸáá·áºáááºááŸá¯ááŒá¿áá¬áá«á á¡á á®á¡á ááºááŸá node áá áºáá¯á á®á á¡áá»áááºááᯠ1 ÎŒs áááá»ááŸá¯ááŒáá·áº ááœáŸááºááŒáááºá ááŸáá·áº node cycles á¡áá±á¡ááœáẠ1000 áá»á±á¬áºááœááºáá±á¬á¡áá« - ááœááºáá»ááºááŒá®ážáá±á¬áẠPostgreSQL ááẠ"áááá»ááŸá¯á¡ááœááºáž" ááá¯ááá¯ááºážááŒá¬ážááŒá®áž ááŒááºáááºááœááºáá»ááºáá±á¬á¡áá«ááœáẠá á¯á á¯áá±á«ááºážá¡áá»ááẠ"0.95ms ááŸáá·áº 1.05ms á¡ááŒá¬ážáá áºáá±áá¬" ááá¯áááŸááááºá ááá¯ááºáááá¯á áá¹ááá·áºáá»á¬ážá¡áá áá±ááœááºááá·áºá¡áá«á á¡áááºááŒá±áá±á¬áºáááºáž áááºážááẠ[áá®áá®] á áá¹ááá·áºáá»á¬ážááŒá®ážáá±á¬á¡áá«á "áááºáá»áŸáá¯á¶ážá áœá²áá±á¬" á¡á á®á¡á ááºá áá¯á¶ááŸááºáá»á¬ážááá¯á· á¡áááºážá¡ááŒá áºáá»á¬ážááᯠ"ááŒá¯ááºážááŒááºáž" áá±á¬á¡áá«ááœáẠá€á¡áá»ááºá¡áááºááᯠááá·áºááœááºážá ááºážá á¬ážááá«áááºá
áá¯áááá¡áá»ááºá ááá¯ááŸá¯ááºááœá±ážáááºááŸá¬ á¡áááºážá¡ááŒá
áºáá»á¬áž (ááá¯ááŒá¬ážáá¶áá»á¬áž) áá»á¬ážá¡ááŒá¬áž ááœá±á·áá»á¬ážáá±áá±á¬ node áá»á¬ážááŒá¬ážááœáẠááŒáá·áºááŒá°ážááŸá¯ááŒá
áºáááºá áá«á ááá°áá¬áá¯á¶á
á¶áá²á· ááá 2 áááºáá²á· áá±á¬ááºááẠ4 áááºá¡ááœáẠáá¯ááºáá»á
ááááºáá«á
á€ááŒá¿áá¬áá»áá¯ážááááºááŸá¬ á¡ááœááºááœááºáá°ááẠ- áá»áœááºá¯ááºááá¯á·ááẠCTE áá áºáá¯ááŒá¯áá¯ááºááŒá®áž áááºážááœáẠáá áºáá¯áá¯ááᯠáááºáááºáᯠáá°áááááºá ááááºáá±á¬á· PostgreSQL ááẠ"á áááº" ááŒá áºááŒá®áž áááºááá·áºá¡áá¬ááá¯á០ááá¯ááºááá¯ááºáááºáááºááá¯ááºáá«á ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáááºážááŸááááá¯á¶ážá á¶áá»áááºááá¯áá°áᬠáá°áá®áá±á¬ CTE á០áá áºáá¬á·ááááá áºáá¯á¡á¬áž áá°áááºá
á¡á
á®á¡á
ááºááᯠááŒáá·áºááŸá¯ááŒá®áž áá¬ážáááºáá«ááẠ- áá°ážáááºážáááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááœáẠSeq Scan ááœáẠ"áá¯á¶ážá
áœá²áááº" 3 áᯠ(áá±áá¬á
á¬áá»ááºááŸá¬áá»á¬áž)á CTE Scan ááœáẠáá±á¬ááºááẠ1 áá¯ááŸáá·áº áá¯ááá CTE Scan ááœáẠáá±á¬ááºááẠ2 áá¯ááŸááááºá ááá¯ááá¯áááºááŸá¬á á¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá±á«ááºážááá¯ááºáá»áŸáẠ6 ááááá·áºáááºá ááá¯á·áá±á¬áº áááºááááºá០áá»áœááºá¯ááºááá¯á·ááẠ3 áá¬áááºáááºá CTE Scan ááẠáááºááá·áºáá±áá¬á០ááááºáá±á¬áºáááºáž process memory ááŸáá·áº ááá¯ááºááá¯ááºá¡áá¯ááºáá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ á€áá±áá¬ááœáẠáá
áºá
á¯á¶áá
áºáᯠááŸá¬ážááœááºážáá±áááºááŸá¬ áááºááŸá¬ážáááºá
á¡ááŸááºááŸá¬á Seq Scan á០áá±á¬ááºážááá¯áá¬ážááá·áº áá±áᬠá á¬áá»ááºááŸá¬ á á á±á¬ááºá áá¯á¶ážááŸá¬á ááá á á á±á¬ááºá 3st CTE Scan ááᯠáá±á¬ááºážááá¯áá²á·ááŒá®ážá ááá¯á·áá±á¬áẠá á¬áá»ááºááŸá¬ á ááŸáá·áº áá±á¬ááºááẠá á á±á¬ááºááᯠáá°á·áᶠáááºááŒáá²á·ááŒá±á¬ááºáž ááœááºáá±á«áºáá¬áá«áááºá á á¬áá»ááºááŸá¬ 1 ááẠáá±áá¬ááᯠáááºáá²á·áááºá 1 ááá¯ááºáá«á
ááŒá®ážáá±á¬á· áá®áá¯á¶á á¡á
á®á¡á
á¥áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬á áá
áºáááºááá¯ááºáá±á¬á·áá² accyclic graph áá
áºáá»áá¯ážáá»áá¯ážááᯠáá¬ážáááºáá¬á
á±áá«áááºá ááŒá®ážáá±á¬á· "á¡á
á áááºááá¬ááá²" ááᯠáá¬ážáááºááá¯ááºá
á±ááẠá€áá²á·ááá¯á·áá±á¬ áá¯á¶áá
áºáá¯á¶ááŸááááºá ááá¯ááá¯áááºááŸá¬á á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠpg_class á០CTE áá
áºáá¯ááᯠáááºáá®ážáá²á·ááŒá®áž áááºážááᯠááŸá
áºááŒáááºááá¯ááºááá¯áẠáá±á¬ááºážááá¯áá²á·ááŒá®ážá áá»áœááºá¯ááºááá¯á·á á¡áá»áááºá¡á¬ážáá¯á¶ážáá®ážáá«ážááᯠáá¯áááá¡ááŒááẠáá±á¬ááºážááá¯áá±á¬á¡áá«ááœáẠáá¬áááœá²ááœáẠáá¯ááºáá¯á¶ážáá²á·áááºá 2st entry ááá¯áááºááŒááºážááẠáááºááááºá០101st entry ááá¯áááºáá¯á¶áááºááá¯ááá¯á
á»á±ážááŒá®ážááŒá±á¬ááºážááŸááºážáááºážáááºá
áá»áœááºáá±á¬áºááá¯á· áááá±á¬áẠá¡áááºááŸá°ááœááºážáááºá áá°ááá¯á·á "á¡áᯠáá®ááá¯á áááºáž ááœááºáá°ážááᯠáááááºá ááᯠáá»áœááºá¯ááºááá¯á·áá¡ááœá±á·á¡ááŒá¯á¶ááẠááá·áºáááºáá¬ážááŒááºáá±á«áºááœáẠááŸááºáááºáá±ááŒá®ááŒá
áºáááºá á¡áá¯áá¯á¶ážááá¯á·ááááºá"
ááŸááºáááºáž á á¯á ááºážááŸá¯
áá»áœááºá¯ááºááá¯á·á developer 1000 ááẠáááºááŒááºážáá áºáá»ááºáá»ááá¯ááºáááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááœáẠáá¬ááŸáá·áºáá»á®áá±á¬ "ááá¯ááºááá¯ááºáá±áž" áá¬áá¬áá»á¬ážáá¬ááŸááááºááᯠáá¬ážáááºáá¬ážááŒá®áž developer áá»á¬ážáááºá០ဠ"áá±á¬áºáá®áá°ážááá·áºááŒááºáž" á¡á¬ážáá¯á¶ážááᯠáá¯á¶ážáá¡áááºááŒá±áááºááá¯ááºáá«á áá«ááá¯á·ááá¯ááºááá¯áẠá á¯áá±á¬ááºážááááºááá¯áᬠáááá¬áááºá
áá±áá°áá»á¡á¬ážááŒáá·áºá ááááºážááááºážá¡áá»ááºá¡áááºáá»á¬ážááᯠá
á¯áá±á¬ááºážááá¯ááºááá·áº á
ᶠmodule áá
áºáá¯ááŸááá±á¬áºáááºážá áááºážááᯠconfig ááœáẠactivated áá¯ááºááẠááá¯á¡ááºáááº
ááááŠážá
áœá¬á áááºážááẠáá°áá®áá±á¬áá±áá¬áá±á·á
áºá¡ááœááºáž ááá°áá®áá±á¬á¡á
á®á¡á
á¥áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá°áá®áá±á¬áá±ážááœááºážáá»á¬ážáᶠáá¬áááºáá±ážáááºá ááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬ QueryIds. á¡á²áá«ááᯠá¡áááºáá¯ááºááẠSET search_path = '01'; SELECT * FROM user LIMIT 1;
ááŒá®ážáá±á¬á· SET search_path = '02';
áá°áá®áá±á¬ áá±á¬ááºážááá¯áá»ááºá ááá¯á·áá±á¬áẠဠmodule á á
á¬áááºážá¡ááºážáá»á¬ážááẠááá°áá®áá±á¬ ááŸááºáááºážáá»á¬áž ááŸááááá·áºááẠááŒá
áºááŒá®ážá á¡á
á®á¡á
ááºáá»á¬ážááᯠááá·áºááœááºážá
ááºážá
á¬ážááŒááºážáááŸááá² á€áá±á¬ááºážááá¯ááŸá¯ áááá¯ááá¯ááºá áááºá
ááºááŸá¯ááœáẠáá±áá¯áá» á
á¬áááºážá¡ááºážáá»á¬ážááᯠáá»áœááºá¯áẠá
á¯áá±á¬ááºážááá¯ááºááẠááá¯ááºáá«á
áá¯áááá¡áá»ááºá áá»áœááºáá±á¬áºááá¯á·ááᯠááá¯á¶ážááá¯á· áá¬ážáá¬ážáᬠá¡á á®á¡á ááºáááŸáááŒááºážá. ááá¯ááá¯áá¬á á¡á á®á¡á ááºáááŸááá°ážá áá±á¬ááºážááá¯áá¬áá»ááºážáá²á ááŸá±ážááœá±ážááœá¬ážáááºááᯠáá»áœááºá¯ááºááá¯á·ááŒááºáá±á¬áºáááºáž á¡áááºááŒá±á¬áá·áºáááºážáᯠáá»áœááºá¯ááºááá¯á· áá¬ážááááºáá«á á€ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá»ááºááŒááºá áœá¬ááŒá±á¬ááºážáá²áá±áá±á¬ áá±áá¬á¡ááœá²á ááŒá¿áá¬ááá¯á· ááŒááºááœá¬ážáá«áááºá
áá±á¬ááºáá¯á¶ážá¡ááá¯ááºá¡ááá·áº - "á¡áá»ááºá¡áááº" áááŸáááŒááºážá. ááá¯ááá¯áááºááŸá¬á áááºááẠquery execution á áááá»áá±á¬ á¥ááá¬áá áºáá¯ááᯠááá¯ááºááœááºááŒá±ááŸááºážááááá« - áá áºáá¯áá»áŸáááŸááá«á á á¯á ááºážáá¬ážáá±á¬á á¬áááºážá¡ááºážáá»á¬ážáá¬ááŸááá«áááºá áá®áá¬áá²á· ááœá²áá¯ááºááá¯á· áááá¯ááºáá±ááá·áº á¡áááºážáááºáá²áá«áááºá
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáá±á¬áºáá®áá°ážááá·áºááẠáá¯á¶ážááŒááºááŒá®áž á
áááºáá±ážáá¬ážáá²á·áááºá á
á¯áá±á¬ááºáž.
á
á¯áá±á¬ááºážáá°ááẠSSH ááŸáá
áºááá·áº áá»áááºáááºáá¬á á¡ááá¡ááŸááºááŒá¯áááºááŸááºááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬áá±á·á
áºááŸáá·áº áá¬áá¬ááá¯á· áá¯á¶ááŒá¯á¶áá±á¬áá»áááºáááºááŸá¯ááᯠáá°áá±á¬ááºáá±ážáááºá tail -F
ááŸááºáááºážááá¯ááºááœáẠáááºážááᯠâááœááºáááºâá áá«ááŒá±á¬áá·áº áá® session ááŸá¬ ááŸááºáááºážááá¯ááºáá
áºáá¯áá¯á¶ážá ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ "ááŸááº" áá
áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·áááŸááááºááá¬áá¬ááŸáá¯ááºáá±ážáá±á¬á áá¬áá¬áá±á«áºááŸá áááºááẠá¡áááºážáááºáá»áŸáá¬ááŒá
áºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯áá±áá¬ááœáẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááœá²ááŒááºážá
áááºááŒá¬ááŒááºážáááŸááá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœá¬ážá¡áá¬ááᯠáááºáááºáá±áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠNode.js ááœáẠá¡ááºáá¬áá±á·á áºááᯠá áááºáá±ážáá¬ážáá±ááŒá®ááŒá áºáá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááœáẠá á¯áá±á¬ááºážáá°ááᯠáááºáááºáá±ážáá¬ážáá²á·áááºá ááá¯á·á¡ááŒáẠá€áááºážááá¬ááẠááŸááºáááºážááŒá áºááá·áº á¡á¬ážáááºážáá±á¬ áá±á¬áºáááºáá»áá¬ážáá±á¬ á á¬áá¬ážáá±áá¬ááŒáá·áº áá¯ááºáá±á¬ááºááẠJavaScript ááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááœááºá¡áááºááŒá±áá±á¬ááŒá±á¬áá·áº áááºážááẠáá°á·ááá¯ááºáá° áá»áŸáá á±áááºá ááá¯á·á¡ááŒáẠNode.js á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááẠáá±á¬ááºáá¶ááááºáá±á¬ááºážáá áºáá¯á¡áá±ááŒáá·áº ááá·áºá¡á¬áž ááœááºáááºáá»áááºáááºááŸá¯áá»á¬ážááŸáá·áº á¡ááŸááºááááºááẠáááºááá·áºáá±áá¬á á®ážááŒá±á¬ááºážáá»á¬ážááŸáá·áºáááᯠááœááºáá°á¡áááºááŒá±á áœá¬ áá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá»áááºáááºááŸá¯ááŸá áºáá¯ááᯠâááá·áºáááºážâ áááº- ááááá áºáá¯á ááŸááºáááºážááᯠáá°á·áá¬áá¬áá° âáá¬ážáááºâ áááºá áááºážááᯠáá»áœááºá¯ááºááá¯á·áᶠáá°áá±á¬ááºááœá¬ážááŒá®ážá áá¯áááááŸá¬ á¡ááŒá±ááᯠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ áá±ážáááºá "ááá¯á·áá±á¬áº oid 123 áá«áá±á¬ ááá¯ááºážáá¯ááºááᯠááááºááá¯á·áá¬ážááŒá±á¬ááºáž ááŸááºáááºážá ááŒááááº" ááá¯á·áá±á¬áº áááºážááẠdeveloper á¡ááœáẠáá¬á០á¡áááá¹áá¬ááºáááŸááá«á áá±áá¬áá±á·á áºááᯠáá±ážáá«á "áá¬áá²ááŒá áºááŒá ẠOID = 123 ááá¯áᬠáá¬áá²ááŒá áºááŒá áº?" ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯áẠááááá±ážáá±á¬ á¡ááŒá±á¡ááŒá áºááᯠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ áá±ážáá«áááºá
"áááºáž ááá·áºáááœááºáá¬ážáá²á· á¡áá¬áá
áºáá¯áá²ááŸááááºá áááºáá²á·áá°áá²á· áá»á¬ážáá»áá¯ážá
áááºááœá± ááŸááááºá" áá¬áᬠ10 áá¯ááᯠá
á±á¬áá·áºááŒáá·áºáá»ááºáá²á·á¡áá« áá®á
áá
áºááᯠá
áááºáá®ááœááºáá²á·áááºá áá»áœááºá¯ááºááá¯á·á áá¬ážáááºááŸá¯ááœáẠá¡áá±áááºá¡áá¶ááá¯á¶ážááŸá¬ ááá¯ááºááœááºááááºáá²áá±á¬ ááŒá¿áá¬á¡áá»áá¯á· áá±á«áºáá±á«ááºáá¬áá«áááºá ááá¯á·áá±á¬áº ááááá¯á¶ážááááºá¡ááœááºáž á
á±á¬áá·áºááŒáá·áºá
á
áºáá±ážááẠá¡áá±á¬ááºáá
áºáá¬ááᯠáá»áœááºá¯ááºááá¯á· áááºáá¶áááŸááá²á·ááẠ- á
áá
áºááẠá¡áá¯ááºáá¯ááºáá±á¬ááŒá±á¬áá·áº áá°ááá¯ááºážá áááºážááᯠááá¯áá»ááºááŒááŒá®áž áá°ááá¯ááºáž á¡áááºááŒá±ááŒáááºá
áá«ááœá±á¡á¬ážáá¯á¶áž áá±á«ááºážááá·áºáááŸá¬áá«á áá±áá¬á
á®ážáááºážááŸá¯á ááŒá®ážáá¬ážááŒá®áž áááºááŒáœáá«áááºá ááááºáá±á¬á·á áá«ááá¯á·á
á±á¬áá·áºááŒáá·áºáá²á·á¡áá¬á ááá¯ááºááœááºááŒá±ááŸááºážááá¯ááºáá²á·á¡áá¬á áá«ááá¯á·á¡áá¯á¶ážááŒá¯áá²á·á¡áá¬ááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·ááẠPostgreSQL ááᯠáá±áá¬ááá¯ááŸá±á¬ááºááŸá¯á¡ááŒá
áºáááºáž á¡áá¯á¶ážááŒá¯áá«áááºá á¡á±á¬áºááá±áá¬ááẠáá±áá¬ááᯠâááœááºážáá±á¬ááºážâ ááá¯á· áááºá¡áá¬áá០ááá¯ááŒááºáá«áááºá COPY
áááá±ážá
ááá¯á·áá±á¬áº ááá¯ážááŸááºážá áœá¬ "áá±á¬ááºážááŒááºáž" áá±áá¬ááẠáá»áœááºá¯ááºááá¯á·ááááºážááá¬ááá¯ááºáá«á áá¬áá¬áá áºáá¬ááœáẠáá áºá áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯ááŸá¯ 50k ááá·áºááŸááá«áá áááºážááẠáá áºáá±á·áá»áŸáẠááŸááºáááºáž 100-150GB áá¯ááºáá±ážáááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá±ááᯠááá¯áá áá¯áẠâááŒááºâ ááááºá
ááááá±á¬á· áá»áœááºáá±á¬áºáá¯ááºáá²á·áááºá áá±á·á¡ááá¯áẠááá¯ááºážááŒá¬ážááŒááºážáá¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº ááŒá®ážáá¬ážáá±á¬á¡á¬ážááŒáá·áº áá±á·áááºáá»á¬ážááŒá¬áž áááºá ááºááŸá¯ááᯠáááºáá°áá»áŸ á áááºááááºá á¬ážááŒáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá á¡ááºááá®áá±ážááŸááºážá áá¬ážááŸááºážá¡áá áºááŸáá·áº á á¬áááºážááá¬ážá¡áá áºá¡áá»áá¯á·ááᯠááá±á·áááœáẠáááºáá¯ááºááá¯ááºáá»áŸáẠááááºáá±á·á áááºáááŸááá²á·ááá·áºá¡áá¬ááᯠáááºááá¯á·ááœá¬ááŒá¬ážá á±ááááºážá
áá±á¬ááºáá
áºáá»ááºááá±á¬á· áá»áœááºáá±á¬áºááá¯á· áááºáá°áá²á·áᬠ(á¡áááºážá¡ááŒááº)á áá¯á¶ážááŒá®ážáá±ážááᬠá¡áááºážááŒááºáááºá COPY
. áá«áááºáááá°ážá COPY
áá¬ááá¯á·áá²ááá¯áá±á¬á· áá°á áááºááŒááºáááºá INSERT
ááá¯ááŒááºáááºá
ááááá¡áá»áẠ- á
áœá²á
áœá²áááºážáááºáž á¡á
áá»áá¯ážááŸá¯áá»á¬áž á¡áá®ážáá®áž ááŸáá·áº ááá¯ááºáá¶ááŒá¬ážáá±á¬á·áá»á¬ážááᯠá
áœáá·áºááœáŸááºáá«á. ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááœáẠáááºááœáŸááºážááá¬áá áá¯á¶ážááááŸááá«á á¡ááŒá±á¬ááºážááŸá¬ ááá·áºááœáẠFKs áá
áºá
á¯á¶áá«áá±á¬ ááá¬ážáá
áºáá¯ááŸáááŒá®áž á¡áááºá "á€áá±áá¬ááœáẠFK á០ááá¯ážáá¬ážáá±á¬ ááŸááºáááºážááŸááºáááºážááŒá
áºáá«áááº" áᯠáááºááŒá±á¬áá«áá ááá¯á·áá±á¬áẠáááºážááᯠááá·áºááœááºážááá·áºá¡áá« PostgreSQLá áá¬ááŸááá»ááºáá±á¬á·áá² ááá¯ážáá¬ážá
áœá¬ áááºááá¯áá°áááá² SELECT 1 FROM master_fk1_table WHERE ...
áááºááá·áºááœááºážáááºááŒáá¯ážá
á¬ážáá±ááá·áº á¡áá±á¬ááºá¡áá¬ážááŒáá·áº - á€ááŸááºáááºážááŸááá±ááŒááºážááŸááááŸá á
á
áºáá±ážáááºá áááºáááá·áºááœááºážááŒááºážááŒáá·áº á€ááá¯ááºáá¶ááŒá¬ážáá®ážááᯠ"ááá»áá¯ážáá»ááºáá«" áá°ááᬠá
á
áºáá±ážáá«á
áá áºááŸááºááá¬ážááŸáá·áº áááºážáá¡ááœáŸááºážááááºážáá»á¬ážá¡ááœáẠááŸááºáááºážáá áºáá¯á¡á á¬ážá áááºážááá¯áááºááœáŸááºážáá±á¬ ááá¬ážáá»á¬ážá¡á¬ážáá¯á¶ážá០á á¬áááºááŒááºážá áááºáá±á¬ááºážá¡áá»áá¯ážáá»á±ážáá°ážááᯠáá»áœááºá¯ááºááá¯á· áááŸááá«áááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠáá¯á¶ážááááá¯á¡ááºáá« - áá»áœááºá¯ááºááá¯á·ááá¬áááºááŸá¬ áááºá¡áááºážáá¯á¶ážááŒáá·áº áááºááá¯ááºááá»áŸ ááŒááºááŒááºáááºááẠááŸááºáááºážáááºáááºááŒá áºáááºá áá®áá±á¬á· FK - áááºáž!
áá±á¬ááºáá áºáá¯ááá±á¬á· á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºáá²á· áááºááŒááºážáá«áá²á á¡á ááá¯ááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·ááᯠáá±áá¬áá±á·á áºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·ááẠ- áá±á¬ááºáá¯á¶ážááœááºá ááŸááºáááºážáá áºáá¯áá±á¬ááºáá¬áá±á¬á¡áá« áá»ááºáá»ááºážááá¯áááá¯ááẠáááºážááᯠáááºááááºáá áºáá»áá¯ážáá»áá¯ážááœáẠááŒá¯áá¯ááºááẠá¡áááºááŒá±áá«áááºá á¡á áá»áá¯ážááŸá¯ááœáẠ"á¡áá±á«ááºážáá áºáá¯". áá±á¬ááºážááŒá®á á¡á²áá«á á¡áááºááŒá±áá«áááºá áá«áá±ááá·áº ááá¯ážáá¬á á¡áá°áá°áá«áá² - áááºá ááŸááºáááºážáá áºáá¯ááᯠááá·áºáá¬ážáá±ááá·áº á¡ááŒá¬ážááá¬ážáá áºáá¯ááá± áááŒá¬ážá¡áá¬ááœá±ááᯠáááºááŒá®áž áá±ážááá¯ááºážáá«áááºá áá«á·á¡ááŒáẠá á¬áá±ážáááºáááºáááºáá¯á¶áá á¡áá»áááºááá¯ááºážáááºáž áá¯ááºáá«áááºá
ááᯠááá·áºááœáẠáááºááŸááºáá¬ážáá±á¬ host ááŸááŒááºáááºážáá²á·ááá·áº áá±á¬ááºážááá¯ááŸá¯á¡áá±á¡ááœááºááᯠááá¯ážááá¯ážáá±ááœááºááá·áº ááá¬ážáá
áºáá¯ááŸááá±áááºáᯠá
áááºáá°ážááŒáá·áºáá«- +1, +1, +1, ..., +1
. áá°á¡áá áááºá áááºážááá¯áááá¯á¡ááºáá« - á¡á¬ážáá¯á¶ážááŒá
áºááá¯ááºáááºá á
á¯áá±á¬ááºážáá°á¡áá±á«áº ááŸááºáá¬ááºááœáẠáá±á«ááºážááá·áºáá«á ááŒá®ážáá¬áá²á· áá±áá¬áá±á·á
áºááᯠáá
áºáá»ááºáááºáž ááá¯á·ááá¯ááºáá«á +10
.
áá¯ááºáá²á·á á¡áá»áá¯á·áá±á¬ááŒá¿áá¬áá»á¬ážááœááºá áááºááá¯áá¹ááááá¯ááºáá¯á¶ááŸá¯ááẠ"ááœá²á¡ááºááŒááºáž" ááŒá áºááá¯ááºáááºá ááá¯á·áá±á¬áºáááºážááẠáááºááœá±á·ááááºáá±á¬ááá á¹á ááŒá áºááẠ- ááá·áºááœááºáá¯á¶ááŸááºáá¬áá¬áá áºáá¯ááŸááá±á¬ááŒá±á¬áá·áºá áááºážááœáẠcontroller ááœááºáááºááá®áá«ááŸááááºá ááá·áºááœááºááœá±áá±ážááœá±áá°ááŸááºáááºážáá áºáá¯á ááŸááºáááºážáá áºáá¯ááŸááááºá ááá¯ááºá áá áº... áá±áá¯áá»á¡á¬ážááŒáá·áºá á¡á²áá«á ááááºáá°ážá á¡á áá»áá¯ážááŸá¯áá»á¬áž/FK á០áááºáááŸááá±á¬ áá¯ááºáá¯ááºá áœááºážá¡á¬áž áá¯á¶ážááŸá¯á¶ážááŸá¯ááẠáááºáááŸááá±á¬ áá¯ááºáá»á ááááºááŸáá·áº áááá¯ááºáááºáá«á
hashing áá²á·á¡áá°áá°áá«áá²á á¡áá»áá¯á·áá±á¬ áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááẠááá·áºáᶠáá±á¬ááºááŸááá¬áááºá áááºááẠáá±áá¬áá±á·á áºá០áááºááŸááºáá¬ážáá±á¬ á¡áá»ááºá¡áááºáá áºáá¯ááᯠááœááºáá»ááºáᬠáá±áá¬áá±á·á áºááá¯á· áá±ážááŒá®áž áá°ááá¯ááºážá¡á¬áž ááŒá±á¬ááŒáá«á á¡áá¶ááœááºážáá»áááºááœáẠáá°áá®áá±á¬á¡áá¬ááᯠááŸááºáááºážáááºááá¯áá±á¬ áá¯ááááá°á ááá·áºáá¶áá±á¬ááºáá¬áááºááŸáá·áº áááºááááºááá¯á·ááœá¬ážáááºááŸáá·áº áááºážááẠááá±á¬ááºážááá·áºááá¯ááºá¡á±á¬áẠá¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±áá±áá«áááºá ááá¯á·ááŒá±á¬áá·áºá áááºááẠá¡áá»áá¯á·áá±á¬ ID áá»á¬ážá áá»áá¯ážáááºááᯠclient (áá±áá¬áá±á·á áºááŸáá·áº áááºááá¯ááºáá±á¬) ááá¯á· ááœáŸá²ááŒá±á¬ááºážááá¯ááºáá»áŸáẠáááºážááᯠáá¯ááºáá±á¬ááºááŒááºážá ááá¯áá±á¬ááºážáá«áááºá
áá±á¬ááºážááá¯áá»ááºá á¡á á®á¡á ááºá áá¯á¶á á¶ááœááºá... á á¬áá¬ážá០MD5 ááᯠá¡áá¯á¶ážááŒá¯ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠááŒá®ážááŒáá·áºá á¯á¶áá±á¬á¡áá»ááºááŸá¬ á á¯áá±á¬ááºážáá°áááºá០ááœááºáá»ááºááŒá®áž áá±áá¬áá±á·á áºáá²ááá¯á· á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ ID ááᯠâáá±á¬ááºážááá·áºâ áá«á MD5 á á¡ááŸááºááŸáá·áº áá±á·á á¥áºá¡ááá¯ááºážááá¯ááºážááœá²ááŒááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááŒá áºááá¯ááºáá»á±ááŸááá±á¬ ááá¯ááºááááŸá¯áá»á¬ážá¡ááœáẠá áááºáá°á áá¬áááá¯áá«á
áá«áá±ááá·áº áá«ááœá±á¡á¬ážáá¯á¶ážááᯠááŒááºááŒááºáááºááẠááŸááºáááºážáááºááá¯ááºááá¯á·á á¡áá¶ááœááºážáá²á· áá¯ááºáááºážá
ááºááᯠááá¯ááºááá¯áẠááœááºážáá¶ááŒááºáááºááá¯á· ááá¯á¡ááºáááºá
áá±áá¬ááœá±ááᯠáááºááá¯áá±ážáá±á·ááŸááá²á áá»áœááºá¯ááºááá¯á·ááœáẠáá±áá¬á¡ááœá²á¡áá»áá¯á·ááŸááá«áááºá áááºážááᯠááá¬ážáá»á¬ážá áœá¬ááœá²áᬠáá±á¬áºáá®áá°áá« - ááááá áºáá¯ááá¯á· áááá áá¯áááááœááºá ááááááá¯á·... á¡ááá·áºáá¯á¶ážááá·áºááŒáá·áº áá±áá¬á á®ážááŒá±á¬ááºážáá áºáá¯ááᯠáá±ážáá±áá¯á¶ááá±á¬ááŒá±á¬áá·áº á¡áááºáááŒá±áá«á ááá·áºáá²á á¡áááá¹áá¬áá¯á¶á ááá¯ááá¯ááŒááºáááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáá«ááá¬ážá ááá«áááº!
áá®ááá¯áá¯ááºááá¯á·á áá®á á®ážáááºážááŸá¯ááœá±ááᯠáá áºáá¯áá²á·áá áºáᯠá¡ááŒáá¯ááºááŒáá¯ááœá²ááá¯á· áá¯á¶áá±á¬ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážá áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá áá¯á¶á á¶áá»á¬ážá ááááºááá¯á·ááŒááºážáá»á¬ážá ... áá®ážááŒá¬ážá á¬ááœá²áá»á¬ážááŒáá·áº áá»á¶áááºážáá±ááẠ- ááŸáá·áº áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠááŒáá¯ááºáá°áá±ážáá«áááºá áá®á¡ááœáẠáá¯á¶áá±á¬ááºáá«áááºá áá áºááŸááºááá¬ážáá áºáá¯á á®á¡ááœáẠCOPY áá»ááºáááºááᯠá¡áááºáááŒááºááœáá·áºáá¬ážáá«á.
ááá¯ááá¯áááºááŸá¬ á
á¯áá±á¬ááºážáá°ááŸá¬ ááŒá
áºáááºá stream áá
áºáá¯á¡ááŒá²ááŸááááºááá«ááá¯á¡ááºáá±á¬áá±áá¬ááá¯áá±ážááá¯ááºááẠáá«áá±ááá·áº áá±áá¬áá±á·á
áºá áá®áá±áá¬ááᯠááŒááºááá¯ááºá
á±ááá¯á·áá²á· áá
áºá
á¯á¶áá
áºáá±á¬ááºá áá®áá±áá¬ááᯠáá±ážááŸááºááá¯á· á
á±á¬áá·áºááá¯ááºážáá±áá¬áá»áá¯áž áááŒá
áºáá«á
á±áá²á·á á¡áá»áá¯á·áá±á¬áá¬ááá»á¬ážááœáẠáá±á¬áºáá®ááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºáá±ážááááºá. áá»áœááºá¯ááºááá¯á·á¡ááœááºá á¡áááá±á¬ááºáá¯á¶ážáá¬áááŸá¬ 100ms ááá·áºááŒá
áºááẠ- áá»áœááºá¯ááºááá¯á· áááºážááá¯ááááºááŒá®áž áá°áá®áá±á¬á
á¬ážááœá²ááá¯á· áá»ááºáá»ááºážááŒááºááœáá·áºáá«á á¡áá»áá¯á·áá±á¬ áá±á¬ááºááááºáá»á¬ážááœáẠá
á®ážáááºážááŸá¯áá
áºáᯠááá¯á¶áá±á¬ááºáá«áá áá»áœááºá¯ááºááá¯á·ááẠáááºááŸááºáá¬ážáá±á¬ ááá·áºáááºáá»ááºá¡áá áá±á«ááºážááá·áºáá«áááºá
ááá¯á·á¡ááŒááºá ááá¯ááá¯á·áá±á¬ áááºáááá¯ááá¯ááºá¡ááœááºá ááŸááºáááºážáá»á¬ážááᯠá¡áá¯ááºááá¯áẠá
á¯áá±á¬ááºážááá·áºá¡áá« á
á¯á
ááºážááŸá¯ááŸááºááá»áŸááẠááá±á¬ááºážááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááááŸáááá«áááºá ááá¹áááẠáá¯á
ááá¯ááºáá°ááẠINSERT ... VALUES
ááŸáá·áº áá±á¬ááºááẠ1000 ááŸááºáááºážáá»á¬ážá áá¬ááŒá±á¬áá·áºáá² ááá¯áá±á¬á· á¡á²áá®á¡áá»áááºááŸá¬ ááá·áºááŸá¬ áá®áá®áá¬ááŸá¬ áá±ážá
áᬠá¡ááœááºá¡áááẠááŸááá±ááŒá®ážá áá
áºááºááŸá¬ áá
áºáá¯áá¯áá±ážááá¯á· ááŒáá¯ážá
á¬ážáá±áá²á· áááŒá¬ážáá°ááœá±á á
á±á¬áá·áºáá»áŸá±á¬áºáá±áááá·áºáááºá
ááá¯ááá¯á·áá±á¬ ááœá²ááœá²áá»ááºáá»á¬ážááᯠáááºááŸá¬ážááẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááá±á«ááºážáá«ááŸáá·áºá ááŒá¬ážáá¶áá¯á¶ážáááá«ááŸáá·áº. disk ááá¯á· buffering ááŒá áºáá±á«áºáá¬áá«á (áá¶á¡á¬ážáá»á±á¬áºá áœá¬á Node.js ááŸá Stream API ááẠááá·áºá¡á¬áž ááŸá¬ááœá±ááœá±á·ááŸáááá¯ááºáááº) - á€áá»áááºáááºááŸá¯ááᯠááœáŸá±á·ááá¯ááºážááá¯ááºáá«á áááºááŒá®áž á¡ááá²á·ááŒá áºáááºááá¯áá²á· á¡ááŒá áºá¡áá»ááºáá áºáá¯ááᯠáááºáá¶áááŸááá²á·á¡áá« á á¯áá±á¬ááºážáá¬ážáá²á· áááºážá á®ááá¬ážááá± á¡á²áá«ááᯠá á¬áá±ážáá«á á¡áá¯ááºáá»á¬ážáá±áá»áááºááœáẠáá±áá°ážáááºá០áá±á¬ááºáááºá¡ááá¬ážááᯠáá°á áááºážáá¶ááá¯á· á á¬áá±ážáá«á
áá±áá¬ááŸááºáááºážáááºááŒááºážá¡ááœáẠá€áá»ááºážáááºáááºážááᯠáááááºáááºáá®ááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠááá·áºááŸááºážááŒá± 4K write ops ááŸáááŒá®ážá á€áááºážááŒáá·áº áááºá¡á¬áž 4 á áá»áŸá±á¬á·áá»áá«áááºá ááá¯á¡áá« áááºážááá¯á·ááẠ6MB/s á¡áá á á±á¬áá·áºááŒáá·áºáá¬ážáá±á¬ áá±áá¬áá±á·á áºá¡áá áºááŒá±á¬áá·áº áá±á¬ááºááẠ100 á ááá¯ážáá¬áá²á·áááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠ3-10TB ááá¬áááá·áºááŸááá±á¬ ááŒá®ážáá²á·áá±á¬ 15 ááááºáá¯á¶áž ááŸááºáááºážáá»á¬ážááᯠááááºážáááºážáá¬ážááŒá®áž áá¯á¶ážáá¡ááœááºáž áááºááá·áº developer áááᯠááŒá¿áá¬ááᯠááŒá±ááŸááºážááá¯ááºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
ááŒá¿áá¬ááœá±ááᯠáá»áœááºáá±á¬áºááá¯á· áá¬ážáááºáá«áááºá
ááá¯á·áá±á¬áº á€á¡áá»ááºá¡áááºá¡á¬ážáá¯á¶ážááᯠá á¯áá±á¬ááºážáá¯á¶áá»áŸááŒáá·áº áá±á¬ááºážááœááºáááºá á¡áá¯á¶ážáááºáááºá áááºááá¯ááºáááºá ááá¯á·áá±á¬áº ááá¯á¶áá±á¬ááºáá« - áá¬ážáááºáááºááá¯áááºá áá¬ááŒá±á¬áá·áºáá²ááá¯áá±á¬á· áá«ááœá±áᬠáá áºáá±á·ááᯠáááºážáá±á«ááºážáá»á¬ážá áœá¬áá±á¬ ááá°áá®áá²á· á¡á á®á¡á ááºááœá± ááŒá áºááá¯á·áá«áá²á
ááá¯á·áá±á¬áº áááºážáá±á«ááºážáá»á¬ážá
áœá¬ááᯠá
á®áá¶ááá·áºááœá²ááááá«á áá»áœááºá¯ááºááá¯á·ááẠâáá±ážáááºáááºâ ááᯠáŠážá
áœá¬áá¯ááºáá±á¬ááºááá«áááºá ááááá¯á¶ážá¡áá±áá²á·á áá® "áá±ážáááºáá²á·" á¡áá¬ááᯠáááºááá¯á
á®á
ááºááá²ááá¯áᬠáá¯á¶ážááŒááºááá¯á· ááá¯áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡áááá¡áá»áẠáá¯á¶ážáá¯ááᯠáá±á¬áºáá¯ááºáá¬ážáá«áááºá
- á¡áááºáá°ááẠá€áá±á¬ááºážááá¯áá»ááºááᯠáá±ážááá¯á·áá²á·áááºá
á¡á²áá«á áááºá¡ááá®áá±ážááŸááºážááá± âááá¯ááºáá±á¬ááºâ áá²á·áá¬áá²- áááºá¡ááºáá¬áá±á·á áºá áá±á¬ááºááœááºá ááœá±áá±ážáá»á±ááŸá¯á áá Ạááá¯á·ááá¯áẠá¡ááŒá¬ážá¡áá¬áá áºáá¯ááŒá áºáááºá - áááºááŸá¬ ááŒá
áºáá»ááºáá²á·áááºá
áááºáá¬áá¬ááŸá¬áá²á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº ááá·áºááœáẠá¡ááá®áá±ážááŸááºážáá áºáá¯á¡á±á¬ááºááœáẠáá¬áá¬áá»á¬ážá áœá¬ááŸáááŒá®áž áá¯ááºááááºáá áºáᯠ"ááá¯ááºáá²ááœá¬ážáááº" ("disk áá¯ááºááœá¬ážáá±á¬ááŒá±á¬áá·áº"á "memory leaked"á á¡ááŒá¬ážááŒá¿áá¬á¡áá»áá¯á·ááŒá±á¬áá·áº) ááá¯á·áá±á¬áẠserver ááᯠá¡ááá¡áá»ááŒá±ááŸááºážááẠááá¯á¡ááºáá«áááºá - áááºááᯠááŒá¿áá¬á áá áºáááºážááá¯áẠáá áºáááºážáá²á· áá°á·áá¬áá° áá±á«áºáá¬áááºá
"áááºáá°" á áá»áœááºá¯ááºááá¯á·áᶠáá±á¬ááºážááá¯áá»ááºáá
áºáᯠáá±ážááá¯á·áááºááᯠáá¬ážáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá
á¶áá°ážááºáá
áºáá¯ááᯠá¡áá¯á¶ážááŒá¯ááẠ- session variable ááᯠáááºááŸááºááŒááºáž- SET application_name = '{bl-host}:{bl-method}';
â áá±á¬ááºážááá¯ááŸá¯ááŸáááŸááá¬ááá·áº áá¯ááºáááºážááá¯ááºáᬠáá±á¬á·áá»á
áºáááºáá¶áá°áá¡áááºááŸáá·áº áááºážááá¯á
áááºáá²á·áá±á¬ áááºážáááºáž ááá¯á·ááá¯áẠá¡ááºááºáá®áá±ážááŸááºážá¡áááºááᯠáá»áœááºá¯ááºááá¯á· áá±ážááá¯á·áá«áááºá
áá±á¬ááºážááá¯áá»ááºá "ááá¯ááºááŸááº" ááá¯áá»áœááºá¯ááºááá¯á·á¡á±á¬ááºááŒááºááŒá®ážáá±á¬ááºá áááºážáááºááŸááºáááºážááá¯á·áá¯ááºáá±ážáááẠ- áááºážá¡ááœááºáá»áœááºá¯ááºááá¯á·ááẠvariable ááá¯ááŒááºáááºáááºááŸááºááẠlog_line_prefix = ' %m [%p:%v] [%d] %r %a'
. á
áááºáááºá
á¬ážáá°ááœá±á¡ááœááºáá±á¬á· ááŒá
áºáá±á¬ááºážááŒá
áºáááºá
- вÑеЌÑ
- áá¯ááºáááºážá ááºááŸáá·áº ááœá±áá±ážááœá±áá° áááºááŸááºáá»ááºáá»á¬áž
- áá±áá¬áá±á·á áºá¡áááº
- á€áá±á¬ááºážááá¯áá»ááºááᯠáá±ážááá¯á·áá°á IP
- ááŸáá·áºáááºážáááºážá¡áááº
ááá¯á·áá±á¬áẠááá°áá®áá±á¬áá¬áá¬áá»á¬ážááŒá¬áž áá±á¬ááºážááá¯áá»ááºáá
áºáá¯á¡ááœáẠáááºá
ááºááŸá¯ááᯠááŒáá·áºááŸá¯ááẠá¡ááœááºá
áááºáááºá
á¬ážááœááºááá¯ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááá±á¬áá±á«ááºáá¬áááºá ááá·áºááœáẠá¡ááá®áá±ážááŸááºážáá
áºáá¯ááẠá€áá±áá¬ááŸáá·áº ááá¯áá±áá¬ááœáẠá¡áá®á¡áá»áŸ ááœá²ááœá²áá±ááá·áº á¡ááŒá±á¡áá±áá»áá¯áž áááŒá¬áá ááá¯ááºáá«á áá«áá±ááá·áºáááºáž á¡áá°áá°áá«áá²á áá®áá¬áá¬ááœá±áá²á áá
áºáá¯áá¯ááᯠááŒáá·áºáá«á
áá®áá±á¬á· áá®ááŸá¬ ááŒááºáá«á "one server - áá áºáá±á·" ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááá¯ááºážá¡ááœáẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯á¶áá±á¬ááºááŸá¯ááŒá áºáá²á·áááºá
áááááá¯ááºážááŒá¬ážá áááºááŒá¬ááŸá¯á¡ááá¯ááºážááá±á¬á· á¡áá°áá°áá«áá²á "ááá°áá¬" - ááááºážááá¬ááºážá¡ááœáŸááºážáá»á¬ážá¡á¬ážáá¯á¶ážá០ááŸááºážáááºážáá¬ážáá±á¬ á¡á á®á¡á ááºá á¡ááá¯áá±á¬ááºáááºááŒááŸá¯áá¯á¶á á¶á áá¯áááááŒááºááẠapplication ááá¯á·ááá¯áẠmethod ááŒá áºááŒá®áž ááááááŒááºááẠáá»áœááºá¯ááºááá¯á·ááᯠááŒá¿áá¬ááŒá áºá á±áá±á¬ áá®ážááŒá¬ážá¡á á®á¡á áẠnode ááŒá áºáááºá
áááºáááºááŸááºááŸáẠáá¬áááá»á¬ážá០ááá°áá¬áá¯á¶á á¶áá»á¬ážááá¯á· ááŒá±á¬ááºážááœáŸá±á·áá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠá¡á¬ážáá¬áá»ááºááŸá áºáá¯ááᯠáá áºááŒáá¯ááºááẠáááŸááááº-
- ááœá²ááŒááºážá
áááºááŒá¬áááºá¡ááœáẠá¡áá¬ááá¹áá¯áá»á¬ážá á¡áá±á¡ááœáẠá¡áá»á¬ážá¡ááŒá¬ážááᯠáá»áŸá±á¬á·áá»ááŒááºážá
áá»áœááºá¯ááºááá¯á·ááẠáá±ážááœááºážáá±á«ááºážáá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬ ááá¯á·ááá¯áẠá¡á á®á¡á ááºáá»á¬ážááŒáá·áºááá¯ááºáá±á¬á·áá² ááá°áá¬áá¯á¶á á¶áá»á¬ážá áœá¬ááŒáá·áº ááŒá¿áá¬ááᯠááœá²ááŒááºážá áááºááŒá¬ááá«áááºá - á¡áá»áááºááá¬áž
ááá¯ááá¯áááºááŸá¬á á¡áá»áá¯á·áá±á¬ááá¹ááá áºáá¯á¡ááœááºážááŸá "ááŒá áºáááºááŸááºáá»á¬áž" ááᯠá¡áá»ááºážáá»á¯ááºá¡á¬ážááŒáá·áºá áá±á·á¡áá»áááºááœáẠáááºážááá¯á·áá¡ááœááºá¡ááŒááºááᯠáááºááŒáááá¯ááºáááºá á¥ááá¬- áá áºáá¬áá® áá áºááŒáááºá áá áºáá±á· áá áºááŒááẠááŒá áºááá·áºááá·áº áá¯á¶á á¶áá áºáá»áá¯ážáá»áá¯áž ááŸááá«á á€áá±áá¬ááœáẠááẠáá¬ážáááºááá¯ááºáááº- áááºážááᯠáááºáá°á ááŒá áºáá±á«áºá á±ááááºážá á¡áááºááŒá±á¬áá·áº á€áá±áá¬ááœáẠááŸáááá·áºáááºá áááŒá áºááá·áºáá°ážá á€áááºááŸá¬ ááááºážááááºážááá¯ááºáá±á¬á á¡ááŒááºáááºáááºááŒáá·áº ááœá²ááŒááºážá áááºááŒá¬ááá·áºáááºážáááºážááŒá áºáááºá
áá»ááºáááºážáááºážáá»á¬ážááẠá¡á
á®á¡á
ááºá០áá»áœááºá¯ááºááá¯á·áá¯ááºáá¯ááºáá¬ážáá±á¬ á¡ááœáŸááºážáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶áááº- ááá¯ááá¯á·áá±á¬áá¯á¶á
á¶áá
áºáá¯ááŒá
áºááœá¬ážááá·áºá¡ááŒáááºá á
á¯á
á¯áá±á«ááºážááŸáá·áºáá»ááºážáá»áŸá¡áá»áááºá disk ááŸáá±áá¬áááºáá»áŸáááºáá²á·áááºá ááŸáá·áº memory ááŸáááºáá»áŸ...
á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠhost á¡ááœáẠááœá²ááŒááºážá áááºááŒá¬ááŸá¯ á á¬áá»ááºááŸá¬ááá¯á· áá±á¬ááºááŸááá¬áá±á¬ááŒá±á¬áá·áº ááŒáá·áºáá«- áá áºá á¯á¶áá áºáá¯ááẠáá áºáá±á«áºááœáẠá¡ááœááºá¡áá»áœá¶áááºáá±áá±á¬á·ááẠá áá¬áá¬áá±á«áºááŸá disk ááẠáááºážááᯠáááá¯ááºááœááºááá¯áẠ- áááºážááᯠáááºáá°áááºááááºážá
áááºááẠáááºááá·áºáá±á¬áºáá¶ááŒáá·áºá
á®á
á¥áºááŒá®áž ááá¯áááºááá¯ááºááœááºááŒá±ááŸááºážááá·áºá¡áá¬ááᯠáá¯á¶ážááŒááºááá¯ááºááẠ- áááá¯áááºáᬠááá¯á·ááá¯áẠáá
áºáá±á«áºááŸá áááºáá¯ááºáááºááá¯áž ááá¯á·ááá¯áẠáá±á¬ááºážááá¯áá»ááºá
á¯á
á¯áá±á«ááºáž ... áá»áœááºá¯ááºááá¯á· áááºážááᯠá
á®áá¬ážáᬠ"ááááºáááºáž" áá»á¬ážááᯠááŒáá·áºááŸá¯áᬠááŒááºáááºááŒá®áž á¡ááá®áá±ážááŸááºážá áá¬ážááŸááºážá¡áá
áºááᯠáá¯ááºáá±ážáá²á·áááºá
ááŒá®ážáá»áŸáẠáá°áá®áá±á¬ áá¯á¶á
á¶ááŒáá·áº áá«áá¬ááá·áº ááá°áá®áá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáá»ááºááŒááºáž áááºááœá±á·ááá¯ááºááẠSELECT * FROM users WHERE login = 'Vasya'
. Frontendá backendá processing... ááŒá®ážáá±á¬á· áá°á áá°áá²á· á¡ááŒááºá¡ááŸááºááá¯á¶á·ááŒááºááẠuser á áá¬ááá¯á· processing á áááºáá¬áá² áááá»ááºááá¬ážá
ááá·áºáá»ááºáááºáááºážáááºážááŸá¬ áááºážáá¯ááºáá±á¬ááºááá·áºá¡áá¬ááᯠá¡ááá®áá±ážááŸááºážá០áá»ááºáá»ááºážááŒáá·áºáááºááŒá áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááŸá±á·áááºážááẠá€á á€á á€á á€á á€ááẠáá áºáá¬áá®áá»áŸáẠáá áºááŒááẠ(á¡áá»áááºááá¬ážááẠá¡áá±á¬ááºá¡áá°ááŒá áºáááº)á ááŒá®ážâáá±á¬á· áá»ááºâáá»ááºážâáá±ážááœááºážâáá±á«áºáá¬áááºâ- áá áºâáá¬áá®áá»áŸááºâáá áºâááŒáááºâáá¯ááºâáááºâ Frontend áá¡áá¯ááºâááá¯ááºâáá¯á¶ááááºâ...
á¡áá»áááºá¡áá±á¬áºááŒá¬ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá
á¯á
ááºážááŸá¯ á¡á¬ážáááºážáá±ááŸááºáž áááá¬áááºá á¡á
á®á¡á
áẠnode áá»á¬ážá¡ááá¯áẠá
á¬áááºážááá¬ážáá»á¬áž. áá»áœááºá¯ááºááá¯á·ááẠááá¬ážáá»á¬ážááá±áá¬ááᯠáááºážááá¯á·ááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáá±á¬ áá¯á¶ááŸááºáá»á¬ážáᬠ(á¡ááœáŸááºážááŒáá·áºáááºáá« ááá¯á·ááá¯áẠááá±ážáá«) á¡á
á®á¡á
á¥áºáá»á¬ážá០ááœá²áá¯ááºáá¬ážáá«áááºá á¡ááŸááºááŸá¬á ááááºáá¯á¶ááŸáá·áº ááŸáá¯ááºážááŸááºáá»áŸáẠááŸá¯áá±á¬áá·áºáá
áºáá¯áᬠáá±á«ááºážááá·áºáááº- ဠnode ááẠáá»áœááºá¯ááºááá¯á·ááᯠááŸááºáááºážáááºáá»áŸáá°áá±á¬ááºáá¬ááááºážáááŸáá·áº áááºáá»áŸ á
áœáá·áºáá
áºáá²á·ááẠ(Rows Removed by Filter)á
ááá·áºáááºážáááºááŒá¬ážáá±á«áºááœáẠááá·áºáá»á±á¬áºáá±á¬á¡ááœáŸááºážáá áºáá¯áááŸááá«á áááºáá±á¬ááºážááá¯ááá¯ááºáááºá áááºážááẠá¡ááœáŸááºážááá¯áá»á±á¬áºááœá¬ážáᬠSeq Scan áá²ááá¯á· áá»áá±á¬ááºááœá¬ážáááº... áá áºáá¯ááŸááœá²á ááŸááºáááºážá¡á¬ážáá¯á¶ážááᯠá á áºáá¯ááºááŒá®ážááŒá áºáááºá áá áºáá±á·áá»áŸáẠá á áºáá¯ááºáá¬ážáá±á¬ ááŸááºáááºáž 100M ááᯠá¡áááºááŒá±á¬áá·áº ááá¯á¡ááºááááºážá á¡ááœáŸááºážááááºážááᯠáá±á¬ááºáááºááŒááºážááẠááá¯ááá¯áá±á¬ááºážááœááºááẠááá¯ááºáá«áá¬ážá
á¡á
á®á¡á
á¥áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠnode ááŒáá·áº ááœá²ááŒááºážá
áááºááŒá¬ááŒá®áž áá¶ááááŒá
áºááœááºááŒá
áºááá¯ááºáá»á±ááŸááá±á¬ á¡á
á®á¡á
ááºáá»á¬ážááœáẠáá¯á¶ááŸááºááœá²á·á
ááºážáá¯á¶á¡áá»áá¯á·ááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááá±á¬áá±á«ááºááá¯ááºáá«áááºá ááŒá®ážáá±á¬á· developer ááá¯ááŒá±á¬ááẠáá±á¬ááºážáááº- "áá°áááºáá»ááºážá áá®ááŸá¬ áááºáž á¡ááœáŸááºážáá²á·á¡áááºáááºáááºá ááŒá®ážáá±á¬á· á¡áá»áá¯ážá¡á
á¬ážááœá²ááŒá®ážáá±á¬á· ááŒááºááá¯ááºáá¬" - á
ááºážáááºážá¡ááá¯ááºážá ááŸááºáááºážáá
áºáá¯ááŸááááºá
áá±ážááœááºážáá»á¬ážáá±ážáá¬ážáá°ááá¯ááºážááẠá€áá¯á¶á á¶ááᯠááŒá¯á¶ááœá±á·áá°ážááŒáá±áááº- "Vasya á¡ááœáẠáá±á¬ááºáá¯á¶ážá¡áááá·áºá á¬á áááºážááááºá áœá²ááᯠáá»áœááºá¯ááºá¡á¬ážáá±ážáá«á" ááŸáá·áº ááá·áºááœáẠá¡ááœáŸááºážááááºážáá áºáá¯áááŸááá»áŸáẠááá¯á·ááá¯áẠáááºá¡áá¯á¶ážááŒá¯ááá·áºá¡ááœáŸááºážááœáẠáááºá áœá²áááŸááá«áá áááºááẠáá°áá®áá±á¬ âááœááºááŒá áºâ ááᯠáááºážáá«á
ááá¯á·áá±á¬áº á€á¡áá¬ááẠ"ááœááºááŒá áº" ááŒá áºáááºááᯠáá»áœááºá¯ááºááá¯á·áááá«ááẠ- ááá¯á·ááŒá±á¬áá·áº áá°áá¬áá¯ááºááá·áºáááºááᯠáá±á¬á·ááºáá²áá±ážáá¬ážáá°ááᯠáá»ááºáá»ááºážáááŒá±á¬ááŒáá«ááŸáá·áºá ááá¯á·ááŒá±á¬áá·áºá ááá¯á¡á á®á¡á ááºááá¯ááœáá·áºáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·á developer ááẠá¡ááŒá¶á¥á¬ááºáá»á¬ážáá«áá±á¬ ááŸááá±á¬áá¯ááºáá¯á¶áá áºáá¯á¶ááᯠáá»ááºáá»ááºážááœá±á·ááŒááºáááŒá®ážá áááºážááá¯á·á áá»ááºáá»ááºážááẠâáááºážááŸá¬ ááŒá¿áá¬ááŸááá±áááºá ââáá«áá±ááá·áº áá®áááºážáá²á· ááŒá±ááŸááºážááŒá®ážááœá¬ážááŒá®áâ
ááááºá¡áá±ááŒáá·áº ááŒá¿áá¬áá»á¬ážááᯠá¡á ááá¯ááºážááŸáá·áº ááá¯ááŒá±ááŸááºážááẠááá¯á¡ááºáá±á¬ á¡ááœá±á·á¡ááŒá¯á¶ááá¬á áááááá¬áᬠáá»áááºážááœá¬ážáá«áááºá áá«á áá»áœááºáá±á¬áºááá¯á·ááŸá¬ ááŸááá²á· tool áá áºáá»áá¯ážáá«á
source: www.habr.com