ืื‘ื˜ื—ื” ื•-DBMS: ืžื” ืฉืืชื” ืฆืจื™ืš ืœื–ื›ื•ืจ ื‘ืขืช ื‘ื—ื™ืจืช ื›ืœื™ ืื‘ื˜ื—ื”

ืื‘ื˜ื—ื” ื•-DBMS: ืžื” ืฉืืชื” ืฆืจื™ืš ืœื–ื›ื•ืจ ื‘ืขืช ื‘ื—ื™ืจืช ื›ืœื™ ืื‘ื˜ื—ื”

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

ื”ืžืืžืจ ื”ื•ื›ืŸ ืขืœ ืกืžืš ื ืื•ื ื‘ืฉืขื” @DatabasesMeetup, ืžึฐืื•ึผืจื’ึธืŸ ืคืชืจื•ื ื•ืช ืขื ืŸ ืฉืœ Mail.ru. ืื ืืชื” ืœื ืจื•ืฆื” ืœืงืจื•ื, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช:


ื”ืžืืžืจ ื™ื›ืœื•ืœ ืฉืœื•ืฉื” ื—ืœืงื™ื:

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

ืื‘ื˜ื—ื” ื•-DBMS: ืžื” ืฉืืชื” ืฆืจื™ืš ืœื–ื›ื•ืจ ื‘ืขืช ื‘ื—ื™ืจืช ื›ืœื™ ืื‘ื˜ื—ื”
ืฉืœื•ืฉื” ืžืจื›ื™ื‘ื™ื ืฉืœ ืื‘ื˜ื—ืช DBMS: ื”ื’ื ืช ื—ื™ื‘ื•ืจ, ื‘ื™ืงื•ืจืช ืคืขื™ืœื•ืช ื•ื”ื’ื ื” ืขืœ ื ืชื•ื ื™ื

ืื‘ื˜ื—ืช ื”ืงืฉืจื™ื ืฉืœืš

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

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

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

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืจืื” ื‘ืื™ืœื• ื›ืœื™ื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœืื‘ื˜ื— ื—ื™ื‘ื•ืจื™ื:

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

    ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ืคื•ื ืงืฆื™ื•ืช ื“ื™ืจื•ื’ ืžืฉืชืžืฉื™ื ื›ืืŸ, ืชื•ื›ืœ ื’ื ืœื‘ืจืจ ืขืœ MS SQL Vulnerability Assessmen ื›ืืŸ

  3. ืœื”ืขืฉื™ืจ ืืช ื”ื”ืงืฉืจ ืฉืœ ื”ืคื’ื™ืฉื” ื‘ืžื™ื“ืข ื”ื“ืจื•ืฉ. ืื ื”ืคื’ื™ืฉื” ืื˜ื•ืžื”, ืื™ื ื›ื ืžื‘ื™ื ื™ื ืžื™ ืขื•ื‘ื“ ื‘-DBMS ื‘ืžืกื’ืจืชื•, ื ื™ืชืŸ ื‘ืžืกื’ืจืช ื”ืคืขื•ืœื” ื”ืžืชื‘ืฆืขืช ืœื”ื•ืกื™ืฃ ืžื™ื“ืข ืžื™ ืขื•ืฉื” ืžื” ื•ืœืžื”. ืžื™ื“ืข ื–ื” ื ื™ืชืŸ ืœืจืื•ืช ื‘ื‘ื™ืงื•ืจืช.
  4. ื”ื’ื“ืจ 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 ื‘ืžืฆื‘ trust, ื›ืœื•ืžืจ, md5 ืœื ื ื‘ื“ืง, ืœื ื”ื™ื” ืฆื•ืจืš ื‘ืื™ืžื•ืช. ืœืื—ืจ ืžื›ืŸ ื‘ื™ืงืฉ ื”ืœืงื•ื— ืœื”ืคืขื™ืœ ืžืฆื‘ ืื™ืžื•ืช md5. ื–ื” ื”ื›ื ื™ืก ืขื•ืžืก ืจื‘ ืขืœ ื”ืžืขื‘ื“ ื•ื”ื‘ื™ืฆื•ืขื™ื ื™ืจื“ื•. ื”ืชื—ืœื ื• ืœื—ืคืฉ ื“ืจื›ื™ื ืœื™ื™ืขืœ. ืื—ื“ ื”ืคืชืจื•ื ื•ืช ื”ืืคืฉืจื™ื™ื ืœื‘ืขื™ื” ื”ื•ื ื”ื˜ืžืขืช ื”ื’ื‘ืœื•ืช ืจืฉืช, ื™ืฆื™ืจืช VLAN ื ืคืจื“ื™ื ืขื‘ื•ืจ ื”-DBMS, ื”ื•ืกืคืช ื”ื’ื“ืจื•ืช ื›ื“ื™ ืœื”ื‘ื”ื™ืจ ืžื™ ืžืชื—ื‘ืจ ืžืื™ืคื” ื•ืœื”ืกื™ืจ ืื™ืžื•ืช. ื ื™ืชืŸ ื’ื ืœื™ื™ืขืœ ืืช ื”ื’ื“ืจื•ืช ื”ืื™ืžื•ืช ื›ื“ื™ ืœื”ืคื—ื™ืช ืขืœื•ื™ื•ืช ื‘ืขืช ื”ืคืขืœืช ื”ืื™ืžื•ืช, ืืš ื‘ืื•ืคืŸ ื›ืœืœื™ ื”ืฉื™ืžื•ืฉ ื‘ืฉื™ื˜ื•ืช ืฉื•ื ื•ืช ืื™ืžื•ืช ืžืฉืคื™ืข ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ื•ื“ื•ืจืฉ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ื’ื•ืจืžื™ื ื”ืœืœื• ื‘ืขืช ืชื›ื ื•ืŸ ื›ื•ื— ื”ืžื—ืฉื•ื‘ ืฉืœ ืฉืจืชื™ื (ื—ื•ืžืจื”) ืขื‘ื•ืจ ื”-DBMS.

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

ื‘ื™ืงื•ืจืช ืคืขื•ืœื”

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

ื‘-DBMS ื‘ืจืžืช Enterprise ื”ื›ื•ืœ ื‘ืกื“ืจ ืขื ื‘ื™ืงื•ืจืช, ืื‘ืœ ื‘ืงื•ื“ ืคืชื•ื— - ืœื ืชืžื™ื“. ื”ื ื” ืžื” ืฉื™ืฉ ืœ-PostgreSQL:

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

ืชื•ืกืคืช ืœื“ื™ื•ื•ื— ื‘ืกืจื˜ื•ืŸ:

"ืจื™ืฉื•ื ื”ืฆื”ืจื•ืช ื‘ืกื™ืกื™ ื™ื›ื•ืœ ืœื”ื™ื ืชืŸ ืขืœ ื™ื“ื™ ืžืชืงืŸ ืจื™ืฉื•ื ืกื˜ื ื“ืจื˜ื™ ืขื log_statement = all.

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

ืœื ืžืกืคื™ืง ืฉื™ืฉ ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืคืขื•ืœื•ืช ืฉื‘ื•ืฆืขื• ื‘ืžืกื“ ื”ื ืชื•ื ื™ื.

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

ืจื™ืฉื•ื ืจื’ื™ืœ ืžืฆื™ื’ ืืช ืžื” ืฉื”ืžืฉืชืžืฉ ื‘ื™ืงืฉ, ื‘ืขื•ื“ pgAudit ืžืชืžืงื“ ื‘ืคืจื˜ื™ื ืฉืœ ืžื” ืฉืงืจื” ื›ืืฉืจ ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ื™ืฆืข ืืช ื”ืฉืื™ืœืชื”.

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

ื–ื• ืื•ืœื™ ื ืจืื™ืช ื›ืžื• ืžืฉื™ืžื” ืคืฉื•ื˜ื” ืขื ืื•ื“ื™ื˜ื™ื ื’ ื•-grep ื‘ืกื™ืกื™ื™ื, ืื‘ืœ ืžื” ืื ื™ื•ืฆื’ ืœืš ืžืฉื”ื• ื›ื–ื” (ืžื‘ืœื‘ืœ ื‘ื›ื•ื•ื ื”) ื”ื“ื•ื’ืžื” ื”ื–ื•:

ืขืฉื” $$
ื”ืชื—ืœ
ื‘ืฆืข 'ื™ื™ื‘ื•ื โ€‹โ€‹ื™ืฆื™ืจืช ื˜ื‘ืœื”' || 'ant_table(id int)';
END$$;

ืจื™ืฉื•ื ืจื’ื™ืœ ื™ื™ืชืŸ ืœืš ืืช ื–ื”:

LOG: ื”ืฆื”ืจื”: DO $$
ื”ืชื—ืœ
ื‘ืฆืข 'ื™ื™ื‘ื•ื โ€‹โ€‹ื™ืฆื™ืจืช ื˜ื‘ืœื”' || 'ant_table(id int)';
END$$;

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

ื–ื” ืœื ืื™ื“ื™ืืœื™, ืžื›ื™ื•ื•ืŸ ืฉืขื“ื™ืฃ ืคืฉื•ื˜ ืœื—ืคืฉ ืœืคื™ ืฉื ื˜ื‘ืœื”.

ื–ื” ื”ืžืงื•ื ืฉื‘ื• pgAudit ืฉื™ืžื•ืฉื™.

ืขื‘ื•ืจ ืื•ืชื• ืงืœื˜, ื”ื•ื ื™ืคื™ืง ืืช ื”ืคืœื˜ ื”ื–ื” ื‘ื™ื•ืžืŸ:

ื‘ื™ืงื•ืจืช: SESSION,33,1,FUNCTION,DO,,,"DO $$
ื”ืชื—ืœ
ื‘ืฆืข 'ื™ื™ื‘ื•ื โ€‹โ€‹ื™ืฆื™ืจืช ื˜ื‘ืœื”' || 'ant_table(id int)';
END$$;"
ื‘ื™ืงื•ืจืช: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE ื—ืฉื•ื‘_ื˜ื‘ืœื” (ืžื–ื”ื” 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_duration = ืคื•ืขืœ
log_hostname = ืคื•ืขืœ
log_lock_waits = ืคื•ืขืœ
log_replication_commands = ืคื•ืขืœ
log_temp_files = 0
log_timezone = 'ืื™ืจื•ืคื”/ืžื•ืกืงื‘ื”'

ื‘-PostgreSQL DBMS ืขื ืคืจืžื˜ืจื™ื ืฉืœ ืžืขื‘ื“ 1, 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

ืชื•ืฆืื•ืช ืžื‘ื—ืŸ:

ืื™ืŸ ืจื™ืฉื•ื
ืขื ืจื™ืฉื•ื

ื–ืžืŸ ืžื™ืœื•ื™ ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื›ื•ืœืœ
43,74 ืฉื ื™ื•ืช
53,23 ืฉื ื™ื•ืช

ืจื
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 ืžื’ื” ื‘ื™ื™ื˜
2262 ืžื’ื” ื‘ื™ื™ื˜

ื’ื•ื“ืœ ื™ื•ืžืŸ ืžืกื“ ื ืชื•ื ื™ื
0 MB
4587 MB

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

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืคืจืžื˜ืจื™ื ืื—ืจื™ื:

  • ื”ืžื”ื™ืจื•ืช ืœื ืžืฉืชื ื” ื”ืจื‘ื”: ืœืœื ืจื™ืฉื•ื - 43,74 ืฉื ื™ื•ืช, ืขื ืจื™ืฉื•ื - 53,23 ืฉื ื™ื•ืช.
  • ื‘ื™ืฆื•ืขื™ ื–ื™ื›ืจื•ืŸ RAM ื•ืžืขื‘ื“ ื™ื™ืคื’ืขื•, ืžื›ื™ื•ื•ืŸ ืฉืืชื” ืฆืจื™ืš ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ื‘ื™ืงื•ืจืช. ื–ื” ืžื•ืจื’ืฉ ื’ื ื‘ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช.

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

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

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

ื”ื’ื‘ืœืช ื’ื™ืฉื” ืœื ืชื•ื ื™ื

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืžืฉืžืฉื•ืช ืœื”ื’ื ื” ืขืœ ื ืชื•ื ื™ื ื•ื’ื™ืฉื” ืืœื™ื”ื ื‘-DBMS ืžืกื—ืจื™ื™ื ื•ื‘ืงื•ื“ ืคืชื•ื—.

ื‘ืžื” ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื“ืจืš ื›ืœืœ:

  1. ื”ืฆืคื ื” ื•ืขืจืคื•ืœ ืฉืœ ื ื”ืœื™ื ื•ืคื•ื ืงืฆื™ื•ืช (Wrapping) - ื›ืœื•ืžืจ, ื›ืœื™ื ื•ื›ืœื™ ืฉื™ืจื•ืช ื ืคืจื“ื™ื ืฉื”ื•ืคื›ื™ื ืงื•ื“ ืงืจื™ื ืœื‘ืœืชื™ ืงืจื™ื. ื ื›ื•ืŸ, ืื– ืœื ื ื™ืชืŸ ืœืฉื ื•ืช ืื•ืชื• ืื• ืœื”ื—ื–ื™ืจ ืื•ืชื• ืžื—ื“ืฉ. ื’ื™ืฉื” ื–ื• ื ื“ืจืฉืช ืœืขื™ืชื™ื ืœืคื—ื•ืช ื‘ืฆื“ ื”-DBMS - ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ื’ื‘ืœื•ืช ืจื™ืฉื™ื•ืŸ ืื• ืœื•ื’ื™ืงื” ืฉืœ ื”ืจืฉืื•ืช ืžื•ืฆืคืŸ ื‘ื“ื™ื•ืง ื‘ืจืžืช ื”ืคืจื•ืฆื“ื•ืจื” ื•ื”ืคื•ื ืงืฆื™ื”.
  2. ื”ื’ื‘ืœืช ื”ื ืจืื•ืช ืฉืœ ื ืชื•ื ื™ื ืœืคื™ ืฉื•ืจื•ืช (RLS) ื”ื™ื ื›ืืฉืจ ืžืฉืชืžืฉื™ื ืฉื•ื ื™ื ืจื•ืื™ื ื˜ื‘ืœื” ืื—ืช, ืืš ื”ืจื›ื‘ ืฉื•ื ื” ืฉืœ ืฉื•ืจื•ืช ื‘ื”, ื›ืœื•ืžืจ, ืœื ื ื™ืชืŸ ืœื”ืฆื™ื’ ืžืฉื”ื• ืœืžื™ืฉื”ื• ื‘ืจืžืช ื”ืฉื•ืจื”.
  3. ืขืจื™ื›ืช ื”ื ืชื•ื ื™ื ื”ืžื•ืฆื’ื™ื (ืžืกื™ื›ื”) ื”ื™ื ื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘ืขืžื•ื“ื” ืื—ืช ืฉืœ ื”ื˜ื‘ืœื” ืจื•ืื™ื ื ืชื•ื ื™ื ืื• ืจืง ื›ื•ื›ื‘ื™ื•ืช, ื›ืœื•ืžืจ, ืขื‘ื•ืจ ื—ืœืง ืžื”ืžืฉืชืžืฉื™ื ื”ืžื™ื“ืข ื™ื™ืกื’ืจ. ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืงื•ื‘ืขืช ืœืื™ื–ื” ืžืฉืชืžืฉ ื™ื•ืฆื’ ืžื” ืขืœ ืกืžืš ืจืžืช ื”ื’ื™ืฉื” ืฉืœื•.
  4. ืื‘ื˜ื—ื” ื‘ืงืจืช ื’ื™ืฉื” DBA/Application DBA/DBA ืขื•ืกืงืช, ื‘ืžืงื•ื ื–ืืช, ื‘ื”ื’ื‘ืœืช ื”ื’ื™ืฉื” ืœ-DBMS ืขืฆืžื•, ื›ืœื•ืžืจ, ื ื™ืชืŸ ืœื”ืคืจื™ื“ ื‘ื™ืŸ ืขื•ื‘ื“ื™ ืื‘ื˜ื—ืช ืžื™ื“ืข ืžืžื ื”ืœื™ ืžืกื“ื™ ื ืชื•ื ื™ื ื•ืžื ื”ืœื™ ื™ื™ืฉื•ืžื™ื. ื™ืฉ ืžืขื˜ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื›ืืœื” ื‘ืงื•ื“ ืคืชื•ื—, ืื‘ืœ ื™ืฉ ื”ืจื‘ื” ืžื”ืŸ ื‘ืžืขืจื›ื•ืช DBMS ืžืกื—ืจื™ื•ืช. ื”ื ื ื—ื•ืฆื™ื ื›ืืฉืจ ื™ืฉื ื ืžืฉืชืžืฉื™ื ืจื‘ื™ื ืขื ื’ื™ืฉื” ืœืฉืจืชื™ื ืขืฆืžื.
  5. ื”ื’ื‘ืœืช ื’ื™ืฉื” ืœืงื‘ืฆื™ื ื‘ืจืžืช ืžืขืจื›ืช ื”ืงื‘ืฆื™ื. ื ื™ืชืŸ ืœื”ืขื ื™ืง ื–ื›ื•ื™ื•ืช ื•ื”ืจืฉืื•ืช ื’ื™ืฉื” ืœืกืคืจื™ื•ืช ื›ืš ืฉืœื›ืœ ืžื ื”ืœ ืžืขืจื›ืช ืชื”ื™ื” ื’ื™ืฉื” ืจืง ืœื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื.
  6. ื’ื™ืฉื” ื—ื•ื‘ื” ื•ื ื™ืงื•ื™ ื–ื™ื›ืจื•ืŸ - ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืืœื• ืžืฉืžืฉื•ืช ืœืขืชื™ื ืจื—ื•ืงื•ืช.
  7. ื”ืฆืคื ื” ืžืงืฆื” ืœืงืฆื” ื™ืฉื™ืจื•ืช ืžื”-DBMS ื”ื™ื ื”ืฆืคื ื” ื‘ืฆื“ ื”ืœืงื•ื— ืขื ื ื™ื”ื•ืœ ืžืคืชื—ื•ืช ื‘ืฆื“ ื”ืฉืจืช.
  8. ื”ืฆืคื ืช ืžื™ื“ืข. ืœื“ื•ื’ืžื”, ื”ืฆืคื ื” ืขืžื•ื“ื™ืช ื”ื™ื ื›ืืฉืจ ืืชื” ืžืฉืชืžืฉ ื‘ืžื ื’ื ื•ืŸ ืฉืžืฆืคื™ืŸ ืขืžื•ื“ื” ื‘ื•ื“ื“ืช ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื.

ื›ื™ืฆื“ ื–ื” ืžืฉืคื™ืข ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”-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 | ื˜ืงืกื˜1 | ื˜ืงืกื˜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 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”

ื‘ื—ื™ืจื” ืžื˜ื‘ืœื” ืขื ืคื•ื ืงืฆื™ื™ืช ื”ืฆืคื ื”:

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 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”

ืชื•ืฆืื•ืช ื”ื‘ื“ื™ืงื”:

 
ืœืœื ื”ืฆืคื ื”
Pgcrypto (ืคืขื ื•ื—)

ื“ื’ื™ืžื” ืฉืœ 1000 ืฉื•ืจื•ืช
1,386 ms
50,203 ms

CPU
15%
35%

ืจื
 
+% 5

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

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

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

ืื‘ื˜ื—ื” ื•-DBMS: ืžื” ืฉืืชื” ืฆืจื™ืš ืœื–ื›ื•ืจ ื‘ืขืช ื‘ื—ื™ืจืช ื›ืœื™ ืื‘ื˜ื—ื”
ื“ื•ื’ืžื” ืœื”ืฆืคื ื” ื›ื–ื• ื‘- MongoDB

ืชื›ื•ื ื•ืช ืื‘ื˜ื—ื” ื‘-DBMS ืžืกื—ืจื™ ื•ืงื•ื“ ืคืชื•ื—

ืคื•ื ืงืฆื™ื•ืช
ืกื•ื’
ืžื“ื™ื ื™ื•ืช ืกื™ืกืžืื•ืช
ื‘ื™ืงื•ืจืช
ื”ื’ื ื” ืขืœ ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื ื”ืœื™ื ื•ืคื•ื ืงืฆื™ื•ืช
RLS
ื”ืฆืฃ

ืื•ืจืงืœ
ืžึดืกึฐื—ึธืจึดื™
+
+
+
+
+

MsSql
ืžึดืกึฐื—ึธืจึดื™
+
+
+
+
+

ื’'ื˜ื•ื‘ื”
ืžึดืกึฐื—ึธืจึดื™
+
+
+
+
ืกื™ื•ืžื•ืช

PostgreSQL
ื—ื•ืคืฉื™
ืกื™ื•ืžื•ืช
ืกื™ื•ืžื•ืช
-
+
ืกื™ื•ืžื•ืช

MongoDb
ื—ื•ืคืฉื™
-
+
-
-
ื–ืžื™ืŸ ื‘- MongoDB Enterprise ื‘ืœื‘ื“

ื”ื˜ื‘ืœื” ืจื—ื•ืงื” ืžืœื”ื™ื•ืช ืžืœืื”, ืื‘ืœ ื”ืžืฆื‘ ื”ื•ื ื›ื–ื”: ื‘ืžื•ืฆืจื™ื ืžืกื—ืจื™ื™ื, ื‘ืขื™ื•ืช ืื‘ื˜ื—ื” ื ืคืชืจื• ื›ื‘ืจ ื–ืžืŸ ืจื‘, ื‘ืงื•ื“ ืคืชื•ื—, ื›ื›ืœืœ, ืžืฉืชืžืฉื™ื ื‘ืชื•ืกืคื•ืช ืžืกื•ื™ืžื•ืช ืœืื‘ื˜ื—ื”, ื—ืกืจื•ืช ืคื•ื ืงืฆื™ื•ืช ืจื‘ื•ืช. , ืœืคืขืžื™ื ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืžืฉื”ื•. ืœื“ื•ื’ืžื”, ืžื“ื™ื ื™ื•ืช ืกื™ืกืžืื•ืช - ืœ-PostgreSQL ื™ืฉ ื”ืจื—ื‘ื•ืช ืฉื•ื ื•ืช (1, 2, 3, 4, 5), ืฉืžื™ื™ืฉืžื•ืช ืžื“ื™ื ื™ื•ืช ืกื™ืกืžืื•ืช, ืื‘ืœ, ืœื“ืขืชื™, ืืฃ ืื—ืช ืžื”ืŸ ืœื ืžื›ืกื” ืืช ื›ืœ ื”ืฆืจื›ื™ื ืฉืœ ื”ืคืœื— ื”ืืจื’ื•ื ื™ ื”ืžืงื•ืžื™.

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

ืื– ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคืชืจื•ื ื•ืช ืฆื“ ืฉืœื™ืฉื™ ืฉืขื•ื‘ื“ื™ื ืขื DBMSs ืฉื•ื ื™ื, ืœืžืฉืœ, Crypto DB ืื• Garda DB. ืื ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืคืชืจื•ื ื•ืช ืžื”ืžื’ื–ืจ ื”ืžืงื•ืžื™, ืื– ื”ื ื™ื•ื“ืขื™ื ืขืœ GOSTs ื˜ื•ื‘ ื™ื•ืชืจ ืžืืฉืจ ื‘ืงื•ื“ ืคืชื•ื—.

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

ื“ื•ื— ื–ื” ื”ื•ืฆื’ ืœืจืืฉื•ื ื” ื‘ @Databases Meetup ืžืืช Mail.ru Cloud Solutions. ืชืจืื” ื•ื™ื“ืื• ื”ื•ืคืขื•ืช ืื—ืจื•ืช ื•ื”ื™ืจืฉื ืœื”ื•ื“ืขื•ืช ืขืœ ืื™ืจื•ืขื™ื ื‘ื˜ืœื’ืจื ืกื‘ื™ื‘ Kubernetes ื‘ืงื‘ื•ืฆืช Mail.ru.

ืžื” ืขื•ื“ ืœืงืจื•ื ื‘ื ื•ืฉื:

  1. ื™ื•ืชืจ ืž-Ceph: ืื—ืกื•ืŸ ื‘ืœื•ืง ืขื ืŸ ืฉืœ MCS.
  2. ื›ื™ืฆื“ ืœื‘ื—ื•ืจ ืžืกื“ ื ืชื•ื ื™ื ืœืคืจื•ื™ืงื˜ ื›ืš ืฉืœื ืชืฆื˜ืจืš ืœื‘ื—ื•ืจ ืฉื•ื‘.

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

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