แแ แแฅแแแ แแแแแก แ แแแแแแ, แแ แแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแฃแจแแแแแแก แฎแแแแซแฆแแแแแแ แแแแแแแแ Gazinformservice-แจแ, แแ แแแฃแฅแขแแก แแฃแแแจแ.
แกแขแแขแแ แแแแแแแแ แแแแแกแแแแก แกแแคแฃแซแแแแแ แฅ
แกแขแแขแแ แจแแแแแแ แกแแแ แแแฌแแแแกแแแ:
- แ แแแแ แแแแแชแแแ แแแแจแแ แแแ.
- แ แ แแ แแก แแแฅแแแแแแแแแก แแฃแแแขแ แแ แ แแแแ แฉแแแฌแแ แแก แแก, แ แแช แฎแแแแ แแแแแชแแแแ แแแแแก แแฎแแ แแก แแ แแแกแแแ แแแแแแจแแ แแแ.
- แ แแแแ แแแแแชแแแ แแแแแชแแแแแ แแแแแ แแแแแชแแแแ แแแแแจแ แแ แ แ แขแแฅแแแแแแแแแ แแ แกแแแแแก แแแแกแแแแแก.
DBMS แฃแกแแคแ แแฎแแแแแก แกแแแ แแแแแแแแแขแ: แแแแจแแ แแก แแแชแแ, แแฅแขแแแแแแก แแฃแแแขแ แแ แแแแแชแแแแ แแแชแแ
แแฅแแแแ แแแแจแแ แแแแก แแแชแแ
แแฅแแแ แจแแแแซแแแแ แแแฃแแแแจแแ แแแ แแแแแชแแแแ แแแแแก แแแ แแแแแ แแ แแ แแแแ แแแ แแแแแแแชแแแแแก แกแแจแฃแแแแแแ. แ แแแแ แช แฌแแกแ, แแแแแแก แแแแฎแแแ แแแแแ, แแแฃ แแแ แ, แ แแแแแแช แแฃแจแแแแก DBMS-แแแ, แแ แแแแ แฃแ แแแแ แแแแก แแแกแแแ.
แกแแแแ แแแแจแแ แแแแก แแแชแแแแ แแกแแฃแแ แแแ, แแฅแแแ แฃแแแ แฃแแแกแฃแฎแแ แแแแจแแแแแแแแ แแแแฎแแแแก, แ แแแแแแแช แแแแกแแแฆแแ แแแก, แแฃ แ แแแแ แแฅแแแแ แกแขแ แฃแฅแขแฃแ แแ แแแฃแแ แฃแกแแคแ แแฎแแแแแก แแแแแแ:
- แแ แแก แแฃ แแ แ แแ แแ แแแแแแก แแแแฎแแแ แแแแแ แแ แแ DBMS แแแแฎแแแ แแแแแก แแแแแแแแแแขแฃแ แ?
- DBMS แแแแแชแแแแแแ แฌแแแแแ แฃแแ แฃแแแแแงแแคแแแแ แแฎแแแแ API-แแก แแแจแแแแแแ, แ แแแแแกแแช แแฅแแแ แแแแแขแ แแแแแ, แแฃ แชแฎแ แแแแแแ แฌแแแแแ แแแ แแแแแ ;
- แแ แแก แแฃ แแ แ DBMS แแแแแงแแคแแแ แชแแแแแฃแ แแแชแฃแ แกแแแแแแขแแ, แแแ แแ แ แแแแ แฃแ แแแแ แแแแก แแแกแแแ;
- แแแแแงแแแแแฃแแแ แแฃ แแ แ แแแแ แแแแแแแ/แแ แแฅแกแ แแ แจแฃแแแแแฃแ แ แคแแแแแ, แ แแแแช แจแแแซแแแแ แจแแชแแแแแก แแแคแแ แแแชแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แแ แแก แจแแฅแแแแแ แแแแจแแ แ แแ แแแ แแงแแแแแก แแแแแชแแแแ แแแแแก.
แแฎแแ แแแแฎแแ, แ แ แแแกแขแ แฃแแแแขแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแจแแ แแแแก แแแกแแชแแแแ:
- แแแแแแงแแแแ แแแแแชแแแแ แแแแแก firewall แแแแกแแก แแแแแฌแงแแแขแแแแแแแ. แแแชแแแก แแแแแขแแแแแ แคแแแ, แแแแแแฃแ, แแแแ แแแก แแแแก แแแแญแแแ แแแแแแแก, แ แแช แฎแแแแ DBMS-แจแ แแ แแแฅแกแแแฃแ, แแฅแแแ แจแแซแแแแ แฃแแ แฃแแแแแงแแ แแแแแชแแแแ แแแแแขแแแแแ แแแชแแ.
- แแแแแแงแแแแ แแแ แแแแก แแแแแขแแแ. แแแแ แแแแแงแแแแแ แแแแแแแแแแฃแแแ แแแแแ, แแฃ แ แแแแ แแ แแก แแแแแฃแแ แแฅแแแแ แแ แฅแแขแแฅแขแฃแ แ. แแแแแกแแแแ แจแแแแฎแแแแแจแ, แแ แแ แแแ แแแ แแแ แแแแแแแชแแแก แแแแคแแแฃแ แแชแแแก แคแแแแจแ, แ แแแแแแช แฃแแแแจแแ แแแแ DBMS-แก, แแ แแ แแก แกแแแแแ แแกแ แแแชแแแกแแแแก. แแ แกแแแแแก แแแแแ แ แแแ DBMS แฎแแแกแแฌแงแแแแ, แ แแแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแขแ แแแแ, แ แแ แแแแฎแแแ แแแแแ แแ แแแ แแแ แกแแญแแ แแแแก แแแแแฎแแแแแก.
แจแแแแซแแแแ แแแขแ แฌแแแแแแฎแแ แแแแฎแแแ แแแแแก แจแแคแแกแแแแก แคแฃแแฅแชแแแแแก แจแแกแแฎแแ
แแฅ , แแกแแแ แจแแแแซแแแแ แแแแแแ MS SQL แแแฃแชแแแแแแแก แจแแแคแแกแแแแแแแก แจแแกแแฎแแแแฅ . - แแแแแแแแ แแ แกแแกแแแก แแแแขแแฅแกแขแ แกแแญแแ แ แแแคแแ แแแชแแแ. แแฃ แกแแกแแ แแแฃแแญแแแ แแแแแ, แแ แแแกแแแ, แแแ แแฃแจแแแแก DBMS-แจแ แแแก แคแแ แแแแแจแ, แจแแแแซแแแแ แจแแกแ แฃแแแแฃแแ แแแแ แแชแแแก แคแแ แแแแแจแ แแแแแแขแแ แแแคแแ แแแชแแ แแแ แ แแก แแแแแแแก แแ แ แแขแแ. แแก แแแคแแ แแแชแแ แจแแแแซแแแแ แแแฎแแ แแฃแแแขแจแ.
- SSL-แแก แแแแคแแแฃแ แแชแแ แแฃ แแ แแแฅแแ แฅแกแแแแก แแแแแฏแแแ DBMS-แกแ แแ แกแแแแแแ แแแแฎแแแ แแแแแแก แจแแ แแก; แแก แแ แแ แแก แชแแแแ VLAN-แจแ. แแกแแ แจแแแแฎแแแแแแจแ แแฃแชแแแแแแแแ แแ แฎแแก แแแชแแ แแแแฎแแแ แแแแแกแ แแ แแแแแ DBMS-แก แจแแ แแก. แฃแกแแคแ แแฎแแแแแก แแแกแขแ แฃแแแแขแแแ แแกแแแ แฎแแแแแกแแฌแแแแแแ แฆแแ แแแแแ.
แ แแแแ แแแแฅแแแแแแก แแก DBMS-แแก แแฃแจแแแแแแ?
แแแแแ แแแแแแฎแแแแ PostgreSQL-แแก แแแแแแแแก, แ แแแ แแแแแแแฎแแ, แ แแแแ แแแฅแแแแแแก SSL แแ แแชแแกแแ แแก แแแขแแแ แแแแแ, แแ แแแก แแแแแแก แแ แแแชแแ แแแก TPS-แก แแ แแแแฎแแแ แก แแฃ แแ แ แแก แซแแแแแ แแแแ แ แแกแฃแ แกแก, แแฃ แแแก แฉแแ แแแแก.
PostgreSQL-แแก แฉแแขแแแ แแแ pgbench-แแก แแแแแงแแแแแแ แแ แแก แแแ แขแแแ แแ แแแ แแแ แจแแกแ แฃแแแแแก แขแแกแขแแแแก แแแกแแจแแแแแ. แแก แแฎแแ แชแแแแแแก แแ แซแแแแแแแแก แแ แ แแแแแแแแแแ แแแแก แแแแแแแ แแแแ, แจแแกแแซแแแ แแแแแชแแแแ แแแแแก แแแ แแแแแฃแ แกแแกแแแแจแ แแ แจแแแแแ แแแแแแก แกแแจแฃแแแ แขแ แแแแแฅแชแแแก แแแแแแแแแก.
แขแแกแขแ 1 SSL-แแก แแแ แแจแ แแ SSL-แแก แแแแแงแแแแแแ โ แแแแจแแ แ แแแแงแแ แแแฃแแแ แแแแแแฃแแ แขแ แแแแแฅแชแแแกแแแแก:
pgbench.exe --connect -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres sslmode=require
sslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key"
vs
pgbench.exe --connect -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres"
แขแแกแขแ 2 SSL-แแก แแแ แแจแ แแ SSL-แแก แแแแแงแแแแแแ - แงแแแแ แขแ แแแแแฅแชแแ แฎแแ แชแแแแแแแ แแ แ แแแแจแแ แจแ:
pgbench.exe -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres sslmode=require
sslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key"
vs
pgbench.exe -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres"
แกแฎแแ แแแ แแแแขแ แแแ:
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 5000
number of transactions actually processed: 50000/50000
แขแแกแขแแก แจแแแแแแแ:
แแ แแ แแก SSL
SSL
แแแแจแแ แ แแฅแแแแแ แงแแแแ แขแ แแแแแฅแชแแแกแแแแก
แจแแงแแแแแแแก แกแแจแฃแแแ
171.915 ms
187.695 ms
tps แแแแจแแ แแแแก แแแแงแแ แแแแก แฉแแแแแแ
58.168112
53.278062
tps แแแแจแแ แแแแก แแแแงแแ แแแแก แแแแแแแแแแ
64.084546
58.725846
CPU
24%
28%
แงแแแแ แขแ แแแแแฅแชแแ แฎแแ แชแแแแแแแ แแ แ แแแแจแแ แจแ
แจแแงแแแแแแแก แกแแจแฃแแแ
6.722 ms
6.342 ms
tps แแแแจแแ แแแแก แแแแงแแ แแแแก แฉแแแแแแ
1587.657278
1576.792883
tps แแแแจแแ แแแแก แแแแงแแ แแแแก แแแแแแแแแแ
1588.380574
1577.694766
CPU
17%
21%
แแกแฃแแฃแฅแ แแแขแแแ แแแแก แแ แแก, SSL-แแก แแแแแแแ แจแแแแ แแแฃแแแ แแแแแแแแก แจแแชแแแแแกแแแ. แแฃ แแแแแชแแแฃแแ แแแแแชแแแแแแก แ แแแแแแแแ แซแแแแแ แแแแแ, แกแแขแฃแแชแแ แจแแแซแแแแ แแแแกแฎแแแแแแฃแแ แแงแแก. แแฃ แฉแแแ แแแแแแงแแ แแแ แแ แ แแแแจแแ แก แแแแ แขแ แแแแแฅแชแแแแ (แแก แแจแแแแแแ, แฉแแแฃแแแแ แแ, แแแแจแแ แ แแแแแแ แแแฃแแแ แแแแฎแแแ แแแแแแก แจแแ แแก), แแฅแแแ แแแฅแแ แแแแจแแ แแแแก/แแแแแจแแแก แแแแ แ แแแแแแแแ, แแแแแฅแแแแแแ แจแแแซแแแแ แแแแแ แฃแคแ แ แแแแ แแงแแก. แแแฃ, แจแแแซแแแแ แแ แกแแแแแแแก แจแแกแ แฃแแแแแก แจแแแชแแ แแแแก แ แแกแแแแ, แแฃแแชแ แแแแกแฎแแแแแแ แแ แช แแกแ แแแแแ, แ แแ แแ แแแแแแงแแแแ แแแชแแ.
แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แแ แกแแแแแก แซแแแแ แ แแแแกแฎแแแแแแ, แแฃ แจแแแแแแ แแแ แแแแ แแชแแฃแ แ แแแแแแแก: แแฅแแแ แแฃแจแแแแ แแแแแ แกแแกแแแแ แแ แกแฎแแแแแกแฎแแ แกแแกแแแแ. แแก แแแกแแแแแแ: แ แแกแฃแ แกแแแ แแฎแแ แฏแแแ แแแแแแฃแแ แแแแจแแ แแก แจแแกแแฅแแแแแแ.
แแแฅแแแแ แจแแแแฎแแแแ, แ แแชแ Zabbix-แก แแแแฃแแแแจแแ แแแ แแแแแแก แ แแแแแจแ, แแแฃ md5 แแ แแงแ แจแแแแฌแแแแฃแแ, แแ แแงแ แกแแญแแ แ แแแแแแขแแคแแแแชแแ. แจแแแแแ แแแแฎแแแ แแแแแแ แกแแฎแแแ md5 แแแขแแ แแแแชแแแก แ แแแแแแก แฉแแ แแแ. แแแแ แแแแ แแแขแแแ แแแ แแแแฎแแแแ CPU-แแ แแ แจแแกแ แฃแแแแ แแแแชแ. แฉแแแ แแแแแฌแงแแ แแแขแแแแแแชแแแก แแแแแแก แซแแแแ. แแ แแแแแแแก แแ แ-แแ แแ แจแแกแแซแแ แแแแแกแแแแแ แแ แแก แฅแกแแแแก แจแแแฆแฃแแแแแแก แแแแแ แแแ, แชแแแแแฃแแ VLAN-แแแแก แจแแฅแแแ DBMS-แกแแแแก, แแแ แแแแขแ แแแแก แแแแแขแแแ, แ แแแ แชแฎแแแ แแแฎแแแก, แแแ แกแแแแแ แแแแแจแแ แแแก แแ แแแแแฆแแ แแแขแแ แแแแชแแ. แแกแแแ แจแแแแซแแแแ แแแขแแ แแแแชแแแก แแแ แแแแขแ แแแแก แแแขแแแแแแชแแ, แ แแแ แจแแแแชแแ แแ แฎแแ แฏแแแ แแแขแแ แแแแชแแแก แฉแแ แแแแกแแก. แแแแแแแ, แแแแแแขแแคแแแแชแแแก แกแฎแแแแแกแฎแแ แแแแแแแก แแแแแงแแแแแ แแแแแแแแก แแฎแแแแก แจแแกแ แฃแแแแแแ แแ แแแแแฎแแแก แแ แคแแฅแขแแ แแแแก แแแแแแแแกแฌแแแแแแก DBMS-แแกแแแแก แกแแ แแแ แแแแก (แขแแฅแแแแแก) แแแแแแแแแแ แกแแแซแแแแ แแก แจแแแฃแจแแแแแแกแแก.
แแแกแแแแ: แฃแแแ แแ แแแแแฌแงแแแขแแจแ, แแแขแแ แแแแชแแแก แแชแแ แ แแแฃแแแกแแแแแช แแ แจแแแซแแแแ แแแแแ แแแแฅแแแแแก แแ แแแฅแขแแ แแ แชแฃแแแ, แ แแแแกแแช แแก แชแฎแแแ แฎแแแแ แแฎแแแแ แฌแแ แแแแแแจแ แแแแฎแแ แชแแแแแแแกแแก.
แกแแแแฅแแแแ แแฃแแแขแ
แแฃแแแขแ แจแแแซแแแแ แแงแแก แแ แ แแฎแแแแ DBMS. แแฃแแแขแ แแ แแก แแแคแแ แแแชแแแก แแแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แ แฎแแแแ แกแฎแแแแแกแฎแแ แกแแแแแแขแจแ. แแก แจแแแซแแแแ แแงแแก แแแแแชแแแแ แแแแแก firewall แแ แแแแ แแชแแฃแแ แกแแกแขแแแ, แ แแแแแแแแแช แแแแแฃแแแ DBMS.
แแแแแ แชแแฃแแ Enterprise แแแแแก DBMS-แแแจแ แงแแแแแคแแ แ แแแ แแแแแ แแฃแแแขแแ, แแแแ แแ แฆแแ แฌแงแแ แแจแ - แแ แ แงแแแแแแแแก. แแ, แ แ แแฅแแก PostgreSQL:
- แแแแฃแแแกแฎแแแแ แจแแกแแแ - แฉแแจแแแแแฃแแ แจแแกแแแ;
- แแแคแแ แแแแแแแ: pgaudit - แแฃ แแแแฃแแแกแฎแแแแ แแฃแ แแแแ แแ แแ แแก แกแแแแแ แแกแ แแฅแแแแแแแก, แจแแแแซแแแแ แแแแแแงแแแแ แชแแแแแฃแแ แแแ แแแแขแ แแแ, แ แแแแแแแช แแแแแญแ แแก แแแ แแแแฃแ แแ แแแแแแแแก.
แ แแแแ แขแแแแก แแแแแขแแแ แแแแแแจแ:
"แซแแ แแแแแ แแแแชแฎแแแแแแก แแฆแ แแชแฎแแ แจแแแซแแแแ แฃแแ แฃแแแแแงแแคแแแ แแงแแก แกแขแแแแแ แขแฃแแ แฎแ-แขแงแแก แแแแแฅแขแแ log_statement = แงแแแแ.
แแก แแแกแแฆแแแแ แแแแแขแแ แแแแแกแแแแก แแ แกแฎแแ แแแแแงแแแแแแกแแแแก, แแแแ แแ แแ แแซแแแแ แแแขแแแแแแก แแแแแก, แ แแแแแแช แฉแแแฃแแแแ แแ แกแแญแแ แแ แแฃแแแขแแกแแแแก.
แกแแแแแ แแกแ แแ แแ แแก แแแแแชแแแแ แแแแแจแ แจแแกแ แฃแแแแฃแแ แงแแแแ แแแแ แแชแแแก แฉแแแแแแแแแแ.
แแกแแแ แจแแกแแซแแแแแแ แฃแแแ แแงแแก แแแแแ แแขแฃแแ แแแแชแฎแแแแแแแแก แแแซแแแแ, แ แแแแแแแช แกแแแแขแแ แแกแแ แแฃแแแขแแ แแกแแแแก.
แกแขแแแแแ แขแฃแแ แแฃแ แแแแ แแฉแแแแแแก, แแฃ แ แแก แแแฎแแแแ แแแแฎแแแ แแแแแ, แฎแแแ pgAudit แงแฃแ แแแฆแแแแก แแแแฎแแแแแแก แแแขแแแแแแ, แแฃ แ แ แแแฎแแ, แ แแแแกแแช แแแแแชแแแแ แแแแแ แจแแแกแ แฃแแ แแแแฎแแแแ.
แแแแแแแแแ, แแฃแแแขแแ แก แจแแแซแแแแ แกแฃแ แแแก แแแแแแแแฌแแแก, แ แแ แแแแแ แแขแฃแแ แชแฎแ แแแ แจแแแฅแแแ แแแแฃแแแแขแแ แแแฃแแ แขแแฅแแแแฃแ แ แคแแแฏแ แแก แคแแ แแแแแจแ.
แแก แจแแแซแแแแ แฉแแแแแก แแแ แขแแแ แแแแแแแแ แซแแ แแแแแ แแฃแแแขแแกแ แแ grep-แแ, แแแแ แแ แ แ แแแฎแแแแ, แแฃ แแแแชแแแ แแกแแแแกแ (แแแแแ แแฎ แแแแแแแแแแแ) แแแแแแแแ:
DO$$
แแแกแแฌแงแแกแ
แจแแแกแ แฃแแแ 'CREATE TABLE แแแแแ แขแ' || 'ant_table(id int)';
END$$;
แกแขแแแแแ แขแฃแแ แแฆแ แแชแฎแแ แแแแชแแแ แแแแก:
LOG: แแแแชแฎแแแแแ: DO $$
แแแกแแฌแงแแกแ
แจแแแกแ แฃแแแ 'CREATE TABLE แแแแแ แขแ' || 'ant_table(id int)';
END$$;
แ แแแแ แช แฉแแแก, แกแแแแขแแ แแกแ แชแฎแ แแแแก แแแแแ แจแแแซแแแแ แแแแแฎแแแแแก แแแแแก แแแ แแแแฃแ แชแแแแแก แแ แจแแแแฎแแแแแแจแ, แ แแแแกแแช แชแฎแ แแแแแ แแฅแแแแแ แแแแแแแฃแ แแ.
แแก แแ แแ แแก แแแแแแฃแ แ, แ แแแแแ แกแแกแฃแ แแแแแ แฃแแ แแแแ แแแซแแแแแ แชแฎแ แแแแก แกแแฎแแแ.
แแก แแ แแก แกแแแแช pgAudit แแแแแแแแแ.
แแแแแ แจแแงแแแแแกแแแแก, แแก แแแแแแแฃแจแแแแแก แแ แแแแแแแแแแก แแฃแ แแแแจแ:
แแฃแแแขแ: SESSION,33,1,FUNCTION,DO,,"DO$$-แแก แแแแแแแแ
แแแกแแฌแงแแกแ
แจแแแกแ แฃแแแ 'CREATE TABLE แแแแแ แขแ' || 'ant_table(id int)';
END$$;"
แแฃแแแขแ: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)
แแ แ แแฎแแแแ DO แแแแแ แแ แแก แแแ แแแแกแขแ แแ แแแฃแแ, แแ แแแแ CREATE TABLE-แแก แกแ แฃแแ แขแแฅแกแขแ แแแแชแฎแแแแแแก แขแแแแก, แแแแแฅแขแแก แขแแแแกแ แแ แกแ แฃแแ แกแแฎแแแแ, แ แแช แแแแแแแแแก แซแแแแแก.
SELECT แแ DML แแแแชแฎแแแแแแแแก แแฆแ แแชแฎแแแกแแก, pgAudit แจแแแซแแแแ แแงแแก แแแแคแแแฃแ แแ แแแฃแแ, แ แแแ แจแแแขแแแแก แชแแแแ แฉแแแแฌแแ แ แแแแชแฎแแแแแแจแ แแแแแแแแฃแแ แแแแแแฃแแ แฃแ แแแแ แแแแแกแแแแก.
แแ แแ แแก แกแแญแแ แ แแแแแแแ, แ แแ แแแแแแ แงแแแแ แแแแชแฎแแแแแ, แ แแแแแแช แแฎแแแ แแแแแ แแขแฃแ แชแฎแ แแแก (
แ แแแแ แแแแฅแแแแแแก แแก DBMS-แแก แแฃแจแแแแแแ?
แแแแแ แฉแแแแขแแ แแ แขแแกแขแแแ แกแ แฃแแ แแฃแแแขแแ แฉแแ แแฃแแแ แแ แแแแฎแแ แ แ แแแแ แแฌแแแ PostgreSQL แแฃแจแแแแแก. แแแแแ แแแแแแฅแขแแฃแ แแ แแแแแชแแแแ แแแแแก แแแฅแกแแแแแฃแ แ แแฆแ แแชแฎแแ แงแแแแ แแแ แแแแขแ แแกแแแแก.
แฉแแแ แแแแฅแแแก แแ แแคแแ แก แแชแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแจแ, แแแแแแ แแ แฉแแ แแแ debug5 แ แแแแแ แแแฅแกแแแแแฃแ แ แแแคแแ แแแชแแแก แแแกแแฆแแแแ.
postgresql.conf
log_destination = 'stderr'
logging_collector = แฉแแ แแฃแแแ
log_truncate_on_rotation = แฉแแ แแฃแแแ
log_rotation_age = 1d
log_rotation_size = 10MB
log_min_messages = แแแแแ แแแ5
log_min_error_statement = แแแแแ แแแ5
log_min_duration_statement = 0
debug_print_parse = แฉแแ แแฃแแแ
debug_print_rewritten = แฉแแ แแฃแแแ
debug_print_plan = แฉแแ แแฃแแแ
debug_pretty_print = แฉแแ แแฃแแแ
log_checkpoints = แฉแแ แแฃแแแ
log_connections = แฉแแ แแฃแแแ
log_disconnections = แฉแแ แแฃแแแ
แแฃแ แแแแแก_แฎแแแแ แซแแแแแแ = แฉแแ แแฃแแแ
log_hostname = แฉแแ แแฃแแแ
log_lock_wait = แฉแแ แแฃแแแ
log_replication_commands = แฉแแ แแฃแแแ
log_temp_files = 0
log_timezone = 'แแแ แแแ/แแแกแแแแ'
PostgreSQL DBMS-แแ 1 CPU, 2,8 GHz, 2 GB RAM, 40 GB HDD แแแ แแแแขแ แแแแ, แฉแแแ แแแขแแ แแแ แฉแแขแแแ แแแแก แกแแ แขแแกแขแก แแ แซแแแแแแแแก แแแแแงแแแแแแ:
$ pgbench -p 3389 -U postgres -i -s 150 benchmark
$ pgbench -p 3389 -U postgres -c 50 -j 2 -P 60 -T 600 benchmark
$ pgbench -p 3389 -U postgres -c 150 -j 2 -P 60 -T 600 benchmark
แฒขแแกแขแแก แแแกแฃแฎแแแ:
แแ แแ แแก แฎแ
แญแ แแ
แแแแแชแแแแ แแแแแก แจแแแกแแแแก แแแแแแแ แแ แ
แฌแ
แฌแ
RAM
24%
40%
CPU
72%
91%
แขแแกแขแ 1 (50 แแแแจแแ แ)
แขแ แแแแแฅแชแแแแแก แ แแแแแแแแ 10 แฌแฃแแจแ
74169
32445
แแแ แแแแแแแ/แฌแ
123
54
แกแแจแฃแแแ แจแแงแแแแแแ
405 ms
925 ms
แขแแกแขแ 2 (150 แแแแจแแ แ 100 แจแแกแแซแแ)
แขแ แแแแแฅแชแแแแแก แ แแแแแแแแ 10 แฌแฃแแจแ
81727
31429
แแแ แแแแแแแ/แฌแ
136
52
แกแแจแฃแแแ แจแแงแแแแแแ
550 ms
1432 ms
แแแแแแแก แจแแกแแฎแแ
DB แแแแ
2251 MB
2262 MB
แแแแแชแแแแ แแแแแก แแฃแ แแแแแก แแแแ
0 MB
4587 MB
แแแแแแแ แ: แกแ แฃแแ แแฃแแแขแ แแ แแ แแก แซแแแแแ แแแ แแ. แแฃแแแขแแก แแแแแชแแแแแ แแฅแแแแ แแกแแแแแ แแแแ, แ แแแแ แช แแแแแ แแแแแชแแแแ แแแแแจแ, แแ แฃแคแ แ แแแขแแช. แญแ แแก แ แแแแแแแแ, แ แแแแแแช แฌแแ แแแแฅแแแแแ DBMS-แแแ แแฃแจแแแแแกแแก, แฌแแ แแแแแแก แกแแแ แแ แแ แแแแแแแ.
แแแแแ แจแแแฎแแแแ แกแฎแแ แแแ แแแแขแ แแแก:
- แกแแฉแฅแแ แ แแแแแ แแ แแชแแแแแ: แฉแแฌแแ แแก แแแ แแจแ - 43,74 แฌแแแ, แแแแแแแแ - 53,23 แฌแแแ.
- RAM-แแกแ แแ CPU-แแก แแฃแจแแแแ แแแแแ แแแแแแ, แ แแแแแ แกแแญแแ แแ แแฃแแแขแแก แคแแแแแก แแแแแ แแ แแแ. แแก แแกแแแ แจแแกแแแฉแแแแแ แแ แแแฃแฅแขแแฃแแแแแจแ.
แ แแแแ แช แแแแจแแ แแแแก แ แแแแแแแแ แแแ แแแแ, แแฃแแแแ แแแแ, แจแแกแ แฃแแแแ แแแแแ แแแฃแแ แแกแแแแ.
แแฃแแแขแแก แแฅแแแ แแแ แแแ แแชแแแแจแ แแแแแ แฃแคแ แ แ แแฃแแแ:
- แแ แแก แแแแ แ แแแแแชแแแ;
- แแฃแแแขแ แกแแญแแ แแ แแ แ แแแ แขแ syslog-แแก แแแจแแแแแแ SIEM-แจแ, แแ แแแแ แคแแแแแแจแแช: แแฃ syslog-แก แ แแแ แแแแแแ แแแแ, แฃแแแ แแงแแก แแแแแชแแแแ แแแแแกแแแ แแฎแแแก แคแแแแ, แ แแแแแจแแช แแแแแชแแแแแ แแแแฎแแแ;
- แแฃแแแขแแกแแแแก แกแแญแแ แแ แชแแแแ แแแ แ, แ แแแ แแ แแแแแแ แแแก I/O แแแกแแแแ, แ แแแแแ แแแ แแแแแแก แแแแแแแก;
- แแก แฎแแแแ, แ แแ แแแคแแ แแแชแแแก แฃแกแแคแ แแฎแแแแแก แแแแแแจแ แแแแแแก แงแแแแแแ แกแญแแ แแแแแ GOST แกแขแแแแแ แขแแแ, แแแ แกแแฎแแแแฌแแคแ แแแแแขแแคแแแแชแแ แกแญแแ แแแแแ.
แแแแแชแแแแแแ แฌแแแแแแก แจแแแฆแฃแแแ
แแแแแ แจแแแฎแแแแ แขแแฅแแแแแแแแแก, แ แแแแแแแช แแแแแแงแแแแแ แแแแแชแแแแ แแแกแแชแแแแ แแ แแแแแ แฌแแแแแแกแแแแก แแแแแ แชแแฃแ DBMS-แแแจแ แแ แฆแแ แฌแงแแ แแแแจแ.
แ แ แจแแแแซแแแแ แแแแแแงแแแแ แแแแแแแ:
- แแ แแชแแแฃแ แแแแก แแ แคแฃแแฅแชแแแแแก แแแจแแคแแ แ แแ แแแแแแแแ (Wrapping) - แแก แแ แแก แชแแแแแฃแแ แฎแแแกแแฌแงแแแแ แแ แฃแขแแแแขแแแ, แ แแแแแแแช แฌแแกแแแแแฎ แแแแก แฌแแฃแแแแฎแแแแ แฎแแแก. แแแ แแแแแ, แแแจแแ แแก แแ แช แจแแแซแแแแ แจแแแชแแแแแก แแ แแ แช แฃแแแ แแแแ แฃแแแแ. แแก แแแแแแแ แแแแฏแแ แกแแญแแ แแ แแแแแแฃแ DBMS-แแก แแฎแ แแ - แแแชแแแแแแก แจแแแฆแฃแแแแก แแแแแแ แแ แแแขแแ แแแแชแแแก แแแแแแ แแแจแแคแ แฃแแแ แแฃแกแขแแ แแ แแชแแแฃแ แแกแ แแ แคแฃแแฅแชแแแก แแแแแแ.
- แแแแแชแแแแ แฎแแแแแแแแแก แจแแแฆแฃแแแ แแฌแแ แแแแแแ (RLS) แแ แแก, แ แแแแกแแช แกแฎแแแแแกแฎแแ แแแแฎแแแ แแแแแ แฎแแแแแก แแ แ แชแฎแ แแแก, แแแแ แแ แแแกแจแ แแฌแแ แแแแแแก แแแแกแฎแแแแแแฃแ แแแแแแแแชแแแก, แแแฃ แ แแฆแแชแแก แฉแแแแแแ แแ แจแแแซแแแแ แแแแแแกแแแแก แ แแแแก แแแแแแ.
- แแแฉแแแแแแ แแแแแชแแแแแแก แ แแแแฅแขแแ แแแ (Masking) แแ แแก, แ แแแแกแแช แแแแฎแแแ แแแแแแ แชแฎแ แแแแก แแ แ แกแแแขแจแ แฎแแแแแแ แแ แแแแแชแแแแแก แแ แแฎแแแแ แแแ แกแแแแแแแแก, แแแฃ แแแแแแ แแ แแแแฎแแแ แแแแแกแแแแก แแแคแแ แแแชแแ แแแแฎแฃแ แแแ. แขแแฅแแแแแแแ แแแแกแแแฆแแ แแแก, แแฃ แ แแแแ แแแแฎแแแ แแแแแก แแฉแแแแแแ แ แ, แแแแ แฌแแแแแแก แแแแแก แแแฎแแแแแ.
- แฃแกแแคแ แแฎแแแแ DBA/แแแแแแแชแแ DBA/DBA แฌแแแแแแก แแแแขแ แแแ แฃแคแ แ แแแขแแ แแฎแแแ DBMS-แแ แฌแแแแแแก แจแแแฆแฃแแแแก, แแแฃ แแแคแแ แแแชแแฃแแ แฃแกแแคแ แแฎแแแแแก แแแแแแจแ แแแแแแก แจแแแซแแแแ แแแแแแงแแ แแแแแชแแแแ แแแแแก แแแแแแแกแขแ แแขแแ แแแ แแ แแแแแแแชแแแก แแแแแแแกแขแ แแขแแ แแแ. แฆแแ แฌแงแแ แแจแ แแกแแแ แขแแฅแแแแแแแแแ แชแแขแแ, แแแแ แแ แแแแแ แชแแฃแ DBMS-แแแจแ แแแแ แแ. แแกแแแ แกแแญแแ แแ, แ แแแแกแแช แแแแ แ แแแแฎแแแ แแแแแแ, แ แแแแแแกแแช แแแแแ แกแแ แแแ แแแแ แแฅแแ แฌแแแแแ.
- แคแแแแแแแ แฌแแแแแแก แจแแแฆแฃแแแ แคแแแแฃแ แ แกแแกแขแแแแก แแแแแแ. แแฅแแแ แจแแแแซแแแแ แแแแแแญแแ แฃแคแแแแแแ แแ แฌแแแแแแก แแ แแแแแแแแแแ แแแ แแฅแขแแ แแแแแ แแกแ, แ แแ แแแแแแฃแ แแแแแแแกแขแ แแขแแ แก แฐแฅแแแแแก แฌแแแแแ แแฎแแแแ แกแแญแแ แ แแแแแชแแแแแแ.
- แกแแแแแแแแฃแแ แฌแแแแแ แแ แแแฎแกแแแ แแแแก แแแกแฃแคแแแแแแ - แแก แขแแฅแแแแแแแแแ แแจแแแแแแ แแแแแแงแแแแแ.
- แแแแแแแ แแแแแแแ แแแจแแคแแ แ แแแ แแแแแ DBMS-แแแ แแ แแก แแแแแแขแแก แแฎแแ แแก แแแจแแคแแ แ แแแกแแฆแแแแก แแแแแฏแแแแขแแ แกแแ แแแ แแก แแฎแแ แแก.
- แแแแแชแแแแ แแแจแแคแแ แ. แแแแแแแแแ, แกแแแขแแแแแ แแแจแแคแแ แ แแ แแก แแก, แ แแแแกแแช แแงแแแแแ แแแฅแแแแแแก, แ แแแแแแช แจแแคแ แแแก แแแแแชแแแแ แแแแแก แแ แ แกแแแขแก.
แ แแแแ แแแฅแแแแแแก แแก DBMS-แแก แแฃแจแแแแแแ?
แแแแแ แจแแแฎแแแแ แกแแแขแฃแ แ แแแจแแคแแ แแก แแแแแแแแก PostgreSQL-แจแ. แแ แกแแแแแก pgcrypto แแแแฃแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แจแแแแแฎแแ แจแแ แฉแแฃแแ แแแแแแ แแแจแแคแ แฃแแ แคแแ แแแ. แแก แกแแกแแ แแแแแแ, แ แแแแกแแช แแฎแแแแ แแแแแแ แแ แแแแแชแแแแ แฆแแ แแแฃแแ. แแแจแแคแ แฃแแ แแแแแแแก แฌแแกแแแแแฎแแ แแแแแแขแ แแแแแกแชแแแก แแแจแแคแแ แแก แแแกแแฆแแแก, แกแแ แแแ แ แจแแคแ แแแก แแแแแชแแแแแก แแ แฃแแ แฃแแแแก แแแแแแขแก. แแแกแแฆแแแแก แแแ แแจแ แแแ แแแแ แแแ แแคแแ แก แแแแแแแแแก แแฅแแแแก แแแแแชแแแแแแแ.
แแแแแ แจแแแแแแฌแแแ pgcrypto-แแ. แแแแแ แจแแแฅแแแแ แชแฎแ แแแ แแแจแแคแ แฃแแ แแแแแชแแแแแแ แแ แ แแแฃแแแ แฃแแ แแแแแชแแแแแแ. แฅแแแแแ แแแชแแแฃแแแ แชแฎแ แแแแแแก แจแแฅแแแแก แแ แซแแแแแแแ, แแแ แแแ แ แแแจแ แแ แแก แกแแกแแ แแแแแ แแ แซแแแแแ - แแแแแ แแแคแแ แแแแแแก แจแแฅแแแ DBMS แ แแแแกแขแ แแชแแแ:
CREATE EXTENSION pgcrypto;
CREATE TABLE t1 (id integer, text1 text, text2 text);
CREATE TABLE t2 (id integer, text1 bytea, text2 bytea);
INSERT INTO t1 (id, text1, text2)
VALUES (generate_series(1,10000000), generate_series(1,10000000)::text, generate_series(1,10000000)::text);
INSERT INTO t2 (id, text1, text2) VALUES (
generate_series(1,10000000),
encrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'),
encrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'));
แจแแแแแแ, แจแแแแชแแแแ แจแแแฅแแแแ แแแแแชแแแแ แแแแฃแจแ แแแแแแฃแแ แชแฎแ แแแแแแ แแ แแแแแแฎแแแแ แจแแกแ แฃแแแแแก แแแแแแก.
แจแแ แฉแแแ แชแฎแ แแแแแแ แแแจแแคแแ แแก แคแฃแแฅแชแแแก แแแ แแจแ:
psql -c "timing" -c "select * from t1 limit 1000;" "host=192.168.220.129 dbname=taskdb
user=postgres sslmode=disable" > 1.txt
แฌแแแแแแ แฉแแ แแฃแแแ.
id | text1 | แขแแฅแกแขแ 2
โโ+โโ-+โโ-
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
...
997 | 997 | 997
998 | 998 | 998
999 | 999 | 999
1000 | 1000 | 1000
(1000 แกแขแ แแฅแแแ)
แแ แ: 1,386 ms
แจแแ แฉแแแ แชแฎแ แแแแแแ แแแจแแคแแ แแก แคแฃแแฅแชแแแ:
psql -c "timing" -c "select id, decrypt(text1, 'key'::bytea, 'bf'),
decrypt(text2, 'key'::bytea, 'bf') from t2 limit 1000;"
"host=192.168.220.129 dbname=taskdb user=postgres sslmode=disable" > 2.txt
แฌแแแแแแ แฉแแ แแฃแแแ.
id | แแแจแแคแแ แ | แแแจแแคแแ แ
โโ+โโโโโ+โโโโ
1 | x31 | x31
2 | x32 | x32
3 | x33 | x33
...
999 | x393939 | x393939
1000 | x31303030 | x31303030
(1000 แกแขแ แแฅแแแ)
แแ แ: 50,203 ms
แขแแกแขแแก แจแแแแแแแ:
แแ แแแแแ แ แแแจแแคแแ แ
Pgcrypto (แแแจแแคแแ แ)
แแแฆแแ 1000 แแฌแแ แแแ
1,386 ms
50,203 ms
CPU
15%
35%
RAM
+ 5%
แแแจแแคแแ แ แแแ แแแแแแแแก แแฎแแแแก แจแแกแ แฃแแแแแแ. แฉแแแก, แ แแ แแ แ แแแแแแ แแ, แ แแแแแ แแแจแแคแ แฃแแ แแแแแชแแแแแแก แแแจแแคแแ แแก แแแแ แแชแแแแ (แแ แแแจแแคแแ แ, แ แแแแ แช แฌแแกแ, แฏแแ แแแแแ แแฅแแแแก แแแแแแแจแแ) แแแแแฎแแแก แแแแจแแแแแแแแ แ แแกแฃแ แกแแแก. แแแฃ, แแแ แแแแฃแแ แแแแแชแแแแแแก แจแแแชแแแแ แงแแแแ แกแแแขแแก แแแจแแคแแ แแก แแแแ แกแแแกแแ แจแแกแ แฃแแแแแก แจแแแชแแ แแแแ.
แแฃแแชแ, แแแจแแคแแ แ แแ แแ แแก แแแ แชแฎแแแก แขแงแแแ, แ แแแแแแช แฌแงแแแขแก แงแแแแ แแ แแแแแแแก. แแแจแแคแ แฃแแ แแแแแชแแแแแ แแ แแแจแแคแแ แแก แแแกแแฆแแแ แแแแแชแแแแ แแแจแแคแแ แแกแ แแ แแแแแชแแแแก แแ แแชแแกแจแ แแแแแแแกแแแฃแแแ แกแแ แแแ แแ. แแฅแแแแ แแแแแแแแแแ แ, แแแกแแฆแแแแแ แจแแแซแแแแ แฉแแแแแแแแก แแแแแแก, แ แแแแแกแแช แแฅแแก แกแ แฃแแ แฌแแแแแ แแแแแชแแแแ แแแแแก แกแแ แแแ แแ, แ แแแแ แแชแแ แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แ.
แ แแแแกแแช แแ แแก แแ แแ แแแกแแฆแแแ แแแแแ แกแแแขแแกแแแแก แงแแแแ แแแแฎแแแ แแแแแกแแแแก (แแฃแแแแช แแ แ แงแแแแแกแแแแก, แแแแ แแ แจแแแฆแฃแแฃแแ แแแแ แแแแก แแแแแแขแแแแกแแแแก), แแก แงแแแแแแแแก แแ แแ แแก แแแ แแ แแ แกแฌแแ แ. แกแฌแแ แแ แแแแขแแ แแแ แแแแฌแงแแก แแแแแแแ แแแจแแคแแ แแก แแแแแแแแ, DBMS-แจแ แแแแฌแงแแก แแแแแแขแแกแ แแ แกแแ แแแ แแก แแฎแ แแแแ แแแแแชแแแแ แแแจแแคแแ แแก แแแ แแแแขแแแแก แแแแฎแแแแ แแ แแแแแฉแแแ แแแแแ แแแกแแฆแแแแก แกแแแแแกแแแแ - แชแแแแแฃแแ แแ แแแฃแฅแขแแแ, แ แแแแแแแช แฃแแ แฃแแแแแงแแคแแ แแแกแแฆแแแแก แแแ แแแแก DBMS-แแ. แแฎแแ แ.
แฃแกแแคแ แแฎแแแแแก แแแฎแแกแแแแแแแแแ แแแแแ แชแแฃแ แแ แฆแแ แแแแแก DBMS-แจแ
แคแฃแแฅแชแแแแ
แแแชแแแแแก
แแแ แแแแก แแแแแขแแแ
แแฃแแแขแ
แแ แแชแแแฃแ แแแแกแ แแ แคแฃแแฅแชแแแแแก แฌแงแแ แแก แแแแแก แแแชแแ
RLS
แจแแคแ แแชแแ
Oracle
แแแแแ แชแแฃแแ
+
+
+
+
+
MsSql
แแแแแ แชแแฃแแ
+
+
+
+
+
แแแแแ แชแแฃแแ
+
+
+
+
แแแแ แซแแแแแ
PostgreSQL
แฃแคแแกแ
แแแแ แซแแแแแ
แแแแ แซแแแแแ
-
+
แแแแ แซแแแแแ
แแแแแแแ
แฃแคแแกแ
-
+
-
-
แฎแแแแแกแแฌแแแแแแ แแฎแแแแ MongoDB Enterprise-แจแ
แชแฎแ แแแ แจแแ แก แแ แแก แกแ แฃแแงแแคแแแ, แแแแ แแ แกแแขแฃแแชแแ แแกแแแแ: แแแแแ แชแแฃแ แแ แแแฃแฅแขแแแจแ แฃแกแแคแ แแฎแแแแแก แแ แแแแแแแแ แแแแ แฎแแแแ แแแแแแ แแแฃแแแ, แฆแแ แฌแงแแ แแจแ, แ แแแแ แช แฌแแกแ, แฃแกแแคแ แแฎแแแแแกแแแแก แแแแแแงแแแแแ แ แแแแ แกแแฎแแก แแแแแแแขแ, แแแแ แ แคแฃแแฅแชแแ แแแแแ. , แฎแแแแแฎแแ แ แแฆแแช แฃแแแ แแแแแแขแแ. แแแแแแแแแ, แแแ แแแแก แแแแแขแแแ - PostgreSQL-แก แแฅแแก แแ แแแแแ แแแแกแฎแแแแแแฃแแ แแแคแแ แแแแแ (
แ แ แฃแแแ แแแแแแแแ, แแฃ แแ แกแแ แแ แแแฅแแ แแก, แ แแช แแญแแ แแแแแ? แแแแแแแแแ, แแกแฃแ แ แแแแแแงแแแแ แแแแแ แแขแฃแแ DBMS, แ แแแแแกแแช แแ แแแแฉแแแ แแก แคแฃแแฅแชแแแแ, แ แแกแแช แแแแฎแแแ แแแแแ แแแแแฎแแแก.
แจแแแแแ แจแแแแซแแแแ แแแแแแงแแแแ แแแกแแแ แแฎแแ แแก แแแแแฌแงแแแขแแแแแแแ, แ แแแแแแแช แแฃแจแแแแแ แกแฎแแแแแกแฎแแ DBMS-แแแแแ, แแแแแแแแแ, Crypto DB แแ Garda DB. แแฃ แแกแแฃแแ แแแ แจแแแ แกแแแแแแขแแก แแแแแฌแงแแแขแแแแแแแแ, แแแจแแ แแแ แฃแแแ แแชแแแ GOST-แแแแก แจแแกแแฎแแ, แแแแ แ แฆแแ แฌแงแแ แแจแ.
แแแแ แ แแแ แแแแขแแ แฉแแฌแแ แแ แแก, แ แแช แแญแแ แแแแแ, แแแแแฎแแ แชแแแแแ แแแแแชแแแแแแก แฌแแแแแ แแ แแแจแแคแแ แ แแแแแแแชแแแจแ แแ แแชแแแฃแ แแก แแแแแแ. แแแ แแแแแ, GOST-แแ แฃแคแ แ แ แแฃแแ แแฅแแแแ. แแแแ แแ แแแแแแแ, แแฅแแแ แจแแแแซแแแแ แแแแแแแ แแแแแชแแแแแ แกแแญแแ แแแแแกแแแแแ , แฉแแแแ แแแ DBMS-แจแ, แจแแแแแ แแแแซแแแ แแ แแแจแแคแ แแ แกแแญแแ แแแแแกแแแแแ , แแแ แแแแแ แแแแแแแชแแแก แแแแแแ. แแแแแแ แแฃแแแ, แแแฃแงแแแแแแแแ แแคแแฅแ แแ แแแแแ, แแฃ แ แแแแ แแแแชแแแ แแ แแแแแ แแแแแแก แแแแแแแชแแแจแ. แฉแแแแ แแแ แแ, แแก แฃแแแ แแแแแแแแก DBMS แแแแแแ, แ แแแแแ แฃแคแ แ แกแฌแ แแคแแ แแแฃแจแแแแแก.
แแก แแแแแ แแจแ แแแ แแแแแ แแงแ แฌแแ แแแแแแแแแ
แแแแแ แ แ แฌแแแแแแแฎแแ แแแแแแ:
แแแขแ แแแแ แ Ceph: MCS แฆแ แฃแแแแแแแ แแแแแแก แกแแชแแแ .แ แแแแ แแแแ แฉแแแ แแแแแชแแแแ แแแแ แแ แแแฅแขแแกแแแแก, แ แแแ แแฆแแ แแแแแฌแแแ แแ แฉแแแแแแก แแแแแแแแ .
แฌแงแแ แ: www.habr.com