ืืืืจืื ื ืกืืคืจืชื ืืื ืืื, ืืขืืจืช ืืชืืื ืื ืกืื ืืจืืืื
#1. ืืชื
ืืืืจ ืขื ืืื ืืืื ืืืื ืืืจืื
"ืืืจืื ืฉื ืืืื ืขืืจื..."
ืืชืืืื, ืืื ืื MVP, ืืคืจืืืงื ืฉืื ื ืืชืืื ืืขืืืก ืงื ืืืื - ืื ืืืืจ ืืืฆืข ืจืง ืขืืืจ ืชืจืืกืจ ืืืฉืจืชืื ืืงืจืืืืื ืืืืชืจ, ืื ืืืืืืืช ืืื ืงืืืคืงืืืืช ืืืกืืช... ืืื ืืื ืฉืืืฃ ืืืื, ืืกืคืจ ืืืืจืืื ืืื ืืืจืื ืืื ืืขืื, ืืฉืื ื ืืกืื ื ืืขืฉืืช ืืฉืื ืขื ืืื ืืื ืฉืืืื ืืช ืืืืื 1.5TB, ืืื ื ืฉืืืจืืช ืฉืืคืฉืจ ืืืืฉืื ืืืืืช ืืื, ืื ืืืื ืื ื ืื.
ืืืื ืื ืืื ืืืขื ืืื ืืื ืื ืืคืืื, ืืจืกืืืช ืฉืื ืืช ืฉื PostgreSQL 9.x ืืื ืจืืืื ืืืืช, ืื ืฉืื ืืืืืงื ืืืืชื ืฆืจืืื ืืืืขืฉืืช "ืืื ืืช" - ืืจื ืชืืจืฉืช ืืืื ืืืจืืืจืื ื ืืชืื ืขื ืืื ืืืงื EXECUTE
.
ืืคืชืจืื ืฉืืชืงืื ืืชืืจืจ ืืืื ืืืจืกืื ืืกืคืืง ืืื ืฉื ืืชื ืืืื ืืชืจืื ืืืชื ืืื ืืืืืืืช:
- ืืืืจืื ืืืืช ืื ืจืืงื ืฉื "ืืืชืจืช", ืฉืชืืืจื ืืช ืืื ืืื ืืงืกืื ืืืจืืืจืื ื ืืืฆืื.
- ืืจืืฉืื ืื ืงืืืช ืืืื ืฉื ืืืงืื ื ืขืฉื ืืืืืช "ืฉืืจืฉ", ืืืฉืืืืฉ ืคื ืืื ืืจืืืจ ื ืืชืื
BEFORE INSERT
ืืจืฉืืื ืืืื ืกื "ืคืืืืช" ืืกืขืืฃ ืื ืืจืฉ. ืื ืขืืืื ืื ืืื ืืืจ ืืื, ืชืคืกื ื ืืจืืื ื... - โฆ ืขื ืืื ืฉืืืืฉ ื
ื ืืฆืจ ืขื ืกืื ืืชืื ืืช ืฉื ืืืืช ืืื ืกืขืืฃ ืขื ืืืืื ืขื ืืชืืจืื ืืจืฆืืืื ืฉืืืฉืจ ื ืชืื ืื ืืืืืืจืื, ืืงืจืืื ืืชืืฆืขืช ืจืง ืื.CREATE TABLE ... (LIKE ... INCLUDING ...)
PG10: ื ืืกืืื ืจืืฉืื
ืืื ืืืืงื ืืจื ืืจืืฉื ืื ืืืืชื ืืชืืืื ืืืืคื ืืืกืืืจื ืืขืืืื ืขื ืืจื ืืชืืื ืคืขืื ืื ืืกืคืจ ืจื ืฉื ืืืืฆืืช ืฆืืฆืืืช. ืืืืืื, ืืชื ืืืื ืืืืืืจ ืฉืืื ืืืืืืจืืชื ืืืืืจืช ืืงืืข ืื ืืจืฉ ืืืจืืืืช ืจืืืืขืืช, ืฉืื ืขืืื ืขื 100+ ืงืืขืื, ืืชื ืืขืฆืื ืืืื ืืื...
ื-PG10 ืืืฆื ืืื ืขืืจ ืืืคืืืืืืฆืื ืจืื ืขื ืืื ืืืืขืช ืชืืืื
ืืคื ืฉืืชืืจืจ ืืืืจ ืืคืืจื ืืืืจืื, ืืืืื ืืืืืืงืช ืืืงืืจืืช ืืืจืกื ืื ืืื:
- ืืื ื ืชืืื ืืชืืืืจื ืืื ืืงืก
- ืื ืชืืื ืืืจืืืจืื ืขืืื
- ืื ืืืื ืืืืืช "ืฆืืฆื" ืฉื ืืฃ ืืื
- ืืื ื ืชืืื
INSERT ... ON CONFLICT
- ืื ืืืื ืืืฆืืจ ืงืืข ืืืืคื ืืืืืืื
ืืืืจ ืฉืงืืืื ื ืืื ืืืืืช ืืืฆื ืขื ืืืจืคื, ืืื ื ืฉืื ืืคืฉืจ ืืืื ืืขืฉืืช ืืืช ืืืื ืืฉื ืืช ืืช ืืืงืฉื, ืืืืื ื ืืช ืืืฉื ืืืืงืจ ืืืฆื ืฉื ื.
PG10: ืืืืื ืืช ืฉื ืืื
ืื, ืืชืืื ื ืืคืชืืจ ืืช ืืืขืืืช ืฉืืชืขืืจืจื ืืื ืืืจ ืื:
- ืื ืืขืืจืจ ื
ON CONFLICT
ืืืืื ื ืฉืื ืื ื ืขืืืื ืฆืจืืืื ืืืชื ืคื ืืฉื, ืื ืขืฉืื ื ืฉืื ืืื ืืื ืืื ืืคืชืืจ ืืืชื ืืืืช ืคืจืืงืกื. - ื ืคืืจ ื"ื ืืชืื" ืืืจืืืจืื - ืืืืืจ ื
EXECUTE
. - ืื ืืืฆืืื ืืช ืื ืื ืคืจื ืืืืช ืชืื ืืืช ืขื ืื ืืืื ืืงืกืืืื ืฉืื ืืคืืื ืื ื ืืฆืืื ืืืืืช ื-proxy.
ืืืกืืฃ, ืืืจื ืื ืื, ืืืืงื ื ืืช ืืืืื ืืจืืฉืืช ืืืืคื ืืืขื. ืืฆืืจืช ืืืืจ ืืืฉ ืขืืืื ื ืืชืจื ืืืฆืคืื ืืืคืืืงืฆืื.
ืืืืื ื "ื ืืกืืจ".
ืืื ืืื ืืขืจืืช ืื ืืืืืช, ืื ืื ื ืืื "ืขืืืืืช" ื"ืงืืฆืืฆืื" (ืืืืื ืื). ืืขื ืืื ื ื, ืืชืคืงืื ืื ืคืขืื, ืืืฉื,
"ืขืืืืืช" ืืื ืืืืจืืืช ืืคื ืืื ืืืจ ืืจืื ืืื, ืื ืืืงื ื ืืฉืืืื ืงืืขืื ืืืืฉื ืื, ืืื ืื ืืคืจืืขื ืื ื (ืืืื ืื!). ืืื ืืืืชื ืืขืื ืขื ืืืืื ืื...
ืื ืืืืจ ืฉืืื ืืจืื ืืืื, ืืื ืืขืจื 100TB ืฉื "ืขืืืืืช" ืืืืื ืืืืืื ืฉื 2.5TB. ืืชื ืื ืืืื ืืืืืง ืื ืืืืช ืฉืื ืืืจ ืืืืื ืืื, ืืชื ืื ืืืื ืืืืืก ืืืชื ืืืื ืืืื, ืืืืชืืื ืืืื ื ืขืฉืชื ืืืืืช ืืืชืจ ืืืืจืื.
ืืื ืืืืื... ืื, ืื ืขืจื ืฆืจืื ืืืืืช ืืืฆื ืคืขื ืืืช ืืืืืง... ืืื ื ืืื, ืืื!.. ืืฃ ืืื ืื ืืื ืข ืืืืชื ื ืืงืื ืืืืื ื ืคืจื ืืื ืืื! ืื, ืื ืืืื ืืชืืจืืช ืืกืืืืช, ืืื ืื ืืืคืฉืจ:
- ืืืชืื/ืืงืจืื ืืืจ ืืืชืจ ืืฉื ืืืื ืืงืืข ืงืื ืืืชืจ
- ืฆืืจืืื ืคืืืช ืืืืจืื ืขื ืืื ืขืืืื ืขื ืืื ืืงืกืื ืงืืืคืงืืืื ืืืชืจ
- ืืืืกื ืคืืืช ื ืชืื ืื ืืฉื ืืืืืืช ืืืกืืจ ืืืืืจืืช ืืืืฉื
ืืชืืฆืื ืืื ืืืืื ืืืืฆืขืื ืขืืืก ืืืขืื ืืจื ืื-30%, ืขืืืก ืืืืกืง ืื-50%:
ืืืงืืื, ืืืฉืื ื ืืืชืื ืืืืืง ืืช ืืืชื ืืืืจ ืืชืื ืืกืืก ืื ืชืื ืื, ืจืง ืขื ืคืืืช ืขืืืก.
#2. ืืืืืืฆืื ืฉื ืืกืื ื ืชืื ืื ืืฉืืืืจ
ืื ืืกืชืคืงื ื ืืื ืฉืืฉ ืื ื ืืื ืืื ืืฉ ืงืืข ืืฉืื ืขื ื ืชืื ืื. ืืขืฆื, CHECK (dt = '2018-10-12'::date)
- ืืืฉ ืืคืชื ืืืืงื ืืชื ืื ืฉืจืฉืืื ืชืืคืื ืืงืืข ืืกืืื.
ืืืืืื ืฉืื ืืืืืืช ืืฉืืจืืช ืฉืื ื ืื ืืืื ืืืงืฉืจ ืฉื ืชืืจืื ืืกืืื, ืืืื ืืงืกืื ืขืืืจื ืืื "ืืื ืื ืื ืืืืืงืื" ืืื ืืื ืืกืืืื (ืฉืจืช, ืชืืจืื, ืชืื ืืช ืชืืื ืืช), (ืฉืจืช, ืชืืจืื, ืฆืืืช ืชืื ืื), (ืชืืจืื, ืืืืงืช ืฉืืืื, ืฉืจืช), ...
ืืื ืขืืฉืื ืื ืืืื ืขื ืื ืงืืข ืืขืืชืงืื ืฉืื ืื ืืื ืืงืก ืืื... ืืืชืื ืื ืกืขืืฃ ืชืืจืื ืืื ืงืืืข... ืืกืชืืจ ืฉืขืืฉืื ืื ืื ื ืืื ืืื ืืื ืคืฉืื ืืื ืงืืืข ืืืื ืืฉืืืช, ืื ืฉืืืืื ืื ืืช ืื ืคื ืฉืื ืืื ืืช ืืื ืืืืคืืฉ ืืืจืื, ืืื ืื ืืืื ืฉืื ืชืืฆืื. ืื ืืฉืืืจื ืืช ืืืืจืคื ืืขืฆืื, ืืืคืก...
ืืืืื ืืืืคืืืืืืฆืื ืืจืืจ - ืคืฉืื ืืกืจ ืืช ืฉืื ืืชืืจืื ืืื ืืืื ืืงืกืื ืขื ืฉืืืื ืืช ืืืืืงืื. ืืืชืืฉื ืืืืงืคืื ืฉืื ื, ืืจืืื ืืื ืืขืจื 1TB/ืฉืืืข!
ืขืืฉืื ืืืื ื ืฆืืื ืฉืืืจื-ืืืื ืืื ืขืืืื ืืื ืฆืจืื ืืืืืช ืืืงืื ืืืืฉืื. ืืืืืจ, ืื ืื ืื ื ืืืืกืง ืืืืจ ืืขืช ืืืขืื ืคืืืช! ืชืืื ื ืื ืืฆืืื ืืืืจืืจ ืืช ืืืคืงื ืืืชืงืื ืืื ืืงืื, ืื ืืงืืฉื ื ืฉืืืข:
#3. "ืคืืืืจ" ืขืืืก ืืฉืื
ืืืช ืืฆืจืืช ืืืืืืืช ืฉื ืืขืจืืืช ืขืืืกืืช ืืื ืกื ืืจืื ืืืืชืจ ืืื ืคืขืืืืช ืฉืืื ื ืืืจืฉืืช ืืืช. ืืคืขืืื "ืื ืื ืื ืฉืื ืื", ืืคืขืืื "ืืื ืงื ืืืชืจ ืืื", ืืื ืืืืงืื ืื ืืืืืืจ ืฆืจืื ืืืืคืืจ ืืื.
ืืืื ื ืชืงืจื ืืชืืื ื ืืงืืืืช ืื ืจืื ืฉืืฉ ืื ื ืืืกืง "ืฉืืื" ืืชืืช ืืขืืืก ืขื ืืฉืจืขืช ืืคืืื ืืื ืืืืืืช ืกืืืืืช, ืื ืฉืืจืืจ "ืกืืืืกืืืช" ืื ืืืืจ ืืงืจืืช ืขื ืืกืคืจ ืืื ืฉื ืคืขืืืืช:
ืื ืื ืงื ืืืฉืื. ืืืจ ืืชืืื ื ืืืขืงื ืืืขื 1000 ืฉืจืชืื, ืื ืฉืจืฉืืจ ืืขืืื ืขื ืืื ืฉืจืฉืืจ ืืืื ื ืคืจื, ืืื ืฉืจืฉืืจ ืืืคืก ืืช ืืืืืข ืืืฆืืืจ ืฉืืืฉืื ืืืกื ืื ืชืื ืื ืืชืืืจืืช ืืกืืืืช, ืืฉืื ืืื ืื:
setInterval(sendToDB, interval)
ืืืขืื ืืื ื ืขืืฆื ืืืืงื ืืขืืืื ืฉ ืื ืืฉืจืฉืืจืื ืืชืืืืื ืืขืจื ืืืืชื ืืื, ืื ืืื ื ืืฉืืืื ืฉืืื ืืืขื ืชืืื ืชืืืืื "ืืขื ืืื". ืืืคืก ืืกืคืจ 2...
ืืืจืื ืืืื, ืื ืื ืงื ืืชืงื, ืืืกืคืช ืจืืฆื "ืืงืจืืืช". ืืืื:
setInterval(sendToDB, interval * (1 + 0.1 * (Math.random() - 0.5)))
#4. ืื ืื ื ืืืืกื ืื ืืช ืื ืฉืื ืื ื ืฆืจืืืื
ืืขืืืช ืืขืืืก ืืืืื ืืฉืืืฉืืช ืืื ืืื ืืืืื ืืืคื ืืื ืืืื ืืืืืช.
ืืืืืื, ืืคืฉืจื ื ืื ืชื ืืืื ืืื ืฉื ืฆืืชื ืชืืื ืืช (ืื ืืื Seq Scan on users
), ืืื ืืื ืืืฉืืื ืฉืื, ืืจืื, ืืืชื ืืืจ - ืื ืฉืืื.
ืื, ืืืืื, ืฉืื ืืืจ ืื ื ืืชื ืฉืื ืืืกื ืื ืชืื ืื, ืื ืื ืชืง ืืช ืืืืง ืขื INSERT ... ON CONFLICT DO NOTHING
. ืืื ืื ืชืื ืื ืืืื ืขืืืื ืืืืขืื ืืืกื ืื ืชืื ืื, ืืื ืืืืชืจ ืงืจืืื ืืื ืืืืืง ืื ืืฉ ืงืื ืคืืืงื ืืืื ืืขืฉืืช. ืืืคืก ืืกืคืจ 3...
ืืืืื ืืืกืคืจ ืืจืฉืืืืช ืฉื ืฉืืืืช ืืืกื ืื ืชืื ืื ืืคื ื/ืืืจื ืืคืขืืช ืืืืืื ืืจืืจ:
ืืื ืืืจืืื ืื ืืืืืช ืืขืืืก ืืืืกืื:
ืืกื ืืื
"ืืจื-ืืืื ืืืื" ืคืฉืื ื ืฉืืข ืืคืืื. ืื ืืชื ืขืืฉื ืืื ื ืืื, ืื ืื ืคืฉืื 2^40 ืืชืื / 86400 ืฉื ืืืช = ~12.5MB/sืฉืืคืืื ืืจืื IDE ืฉืืืื ืืื ืืืืืงื. ๐
ืืื ืืจืฆืื ืืช, ืืคืืื ืขื ืคื ืขืฉืจื ืฉื ืืขืืืก ืืืืื ืืืื, ืืชื ืืืื ืืงืืืช ืืขืืื ืืืืืืืช ืฉื ืืื ื ื SSD ืืืืจื ืืื.
ืืงืืจ: www.habr.com