Tany am-boalohany, toy ny MVP rehetra, dia nanomboka tamin'ny enta-mavesatra somary maivana ny tetikasanay - ho an'ireo lohamilina folo tena manan-danja ihany no nanaovana ny fanaraha-maso, ny latabatra rehetra dia somary matevina... Saingy rehefa nandeha ny fotoana, dia nihamaro ny isan'ny mpampiantrano narahi-maso. , ary nanandrana nanao zavatra tamin'ny iray indray izahay latabatra 1.5TB ny habeny, tsapanay fa na dia azo natao aza ny nanohy ny fiainana toy izany, dia tena nahasosotra izany.
Saika mitovy amin'ny vanim-potoana mahafinaritra ny fotoana, ny dikan-teny samihafa amin'ny PostgreSQL 9.x dia mifandraika, ka ny fizarana rehetra dia tsy maintsy natao "tanana" - amin'ny alàlan'ny lova latabatra sy trigger routing amin'ny dynamic EXECUTE.
Ny vahaolana azo dia nivadika ho ampy ho an'ny rehetra ka azo adika amin'ny tabilao rehetra:
Nambara ny tabilaon'ny ray aman-dreny "header" tsy misy na inona na inona, izay mamaritra ny zava-drehetra indexes sy trigger ilaina.
Ny firaketana avy amin'ny fomba fijerin'ny mpanjifa dia natao tao amin'ny tabilao "root", ary ampiasaina anatiny routing triggerBEFORE INSERT nampidirina “ara-batana” tao amin'ny fizarana ilaina ny rakitsoratra. Raha mbola tsy nisy izany, dia nahazo exception izahay ary...
… amin'ny fampiasana CREATE TABLE ... (LIKE ... INCLUDING ...) dia noforonina mifototra amin'ny môdelin'ny latabatra ray aman-dreny fizarana misy famerana amin'ny daty tianaka rehefa alaina ny data dia ao anatiny ihany no vakiana.
PG10: andrana voalohany
Saingy ny fizarazarana amin'ny alalan'ny lova dia tsy mifanaraka amin'ny tantara ara-tantara amin'ny fiatrehana an-tsoratra mavitrika na fizarazarana ankizy marobe. Ohatra, azonao tsaroana fa ny algorithm amin'ny fisafidianana ny fizarana ilaina dia nanana fahasarotana efamira, fa miasa miaraka amin'ny fizarana 100+ izany, ianao mihitsy no mahatakatra ny fomba...
Ao amin'ny PG10 ity toe-javatra ity dia nohatsaraina tanteraka tamin'ny fampiharana ny fanohanana fizarazarana teratany. Noho izany, niezaka nampihatra izany avy hatrany izahay taorian’ny nifindrana ny fitahirizana, saingy...
Araka ny hita taorian'ny nandavahana ny boky, ny latabatra voazarazara amin'ity dikan-teny ity dia:
tsy manohana famaritana fanondroana
tsy manohana trigger eo aminy
tsy mety ho "taranaka" na iza na iza
aza manohana INSERT ... ON CONFLICT
tsy afaka mamorona fizarana ho azy
Nahazo kapoka mampanaintaina tamin'ny handriny tamin'ny rake, dia nahatsapa izahay fa tsy ho vita izany raha tsy misy fanovana ny fampiharana, ary nahemotra ny fikarohana fanampiny nandritra ny enim-bolana.
PG10: vintana faharoa
Noho izany, nanomboka namaha ny olana nipoitra tsirairay izahay:
Satria triggers ary ON CONFLICT Hitanay fa mbola mila azy ireo etsy sy eroa izahay, ka nanao dingana mpanelanelana izahay mba hamahana azy ireo latabatra proxy.
Nesorin’izy ireo mitokana izany latabatra môdely misy index rehetraka tsy hita ao amin'ny latabatra proxy akory izy ireo.
Farany, taorian'izany rehetra izany dia nozarainay ny latabatra lehibe. Ny famoronana fizarana vaovao dia mbola navela ho an'ny feon'ny fieritreretan'ny fampiharana.
Diksionera "sawing".
Toy ny tamin'ny rafitra famakafakana rehetra dia nanana ihany koa izahay "facts" sy "cuts" (rakibolana). Amin'ity tranga ity dia nanao zavatra izy ireo, ohatra, vatana modely fanontaniana miadana mitovy na ny lahatsoratry ny fangatahana.
Ny "Facts" dia nozaraina nandritra ny andro ela, ka nofafanay tamim-pahatoniana ireo fizarana efa lany andro, ary tsy nanelingelina anay (log!). Saingy nisy olana tamin'ny rakibolana...
Tsy lazaina intsony fa be dia be izy ireo, fa eo ho eo 100TB amin'ny "zava-misy" dia niteraka rakibolana 2.5TB. Tsy afaka mamafa na inona na inona amin'ny latabatra toy izany ianao, tsy azonao atao ny manindry azy ao anatin'ny fotoana mety, ary ny fanoratana azy dia nihena tsikelikely.
Toy ny diksionera... ao anatin'izany dia tokony aseho indray mandeha isan-karazany ny fidirana tsirairay ... ary marina izany, saingy!.. Tsy misy misakana antsika tsy hanana. rakibolana mitokana ho an'ny andro tsirairay! Eny, mitondra fihenam-bidy sasany izany, saingy mamela izany:
manoratra/mamaky haingana kokoa noho ny haben'ny fizarana kely kokoa
Dia niorim-paka tamin’izay anananay izahay samy manana ny fizaràna azy ny andro tsirairay miaraka amin'ny angona. Raha ny marina, CHECK (dt = '2018-10-12'::date) - ary misy fanalahidin'ny fizarazarana sy ny fepetra ho an'ny firaketana an-tsoratra mba hianjera ao amin'ny fizarana manokana.
Koa satria ny tatitra rehetra ao amin'ny serivisinay dia natsangana ao anatin'ny tontolon'ny daty iray manokana, ny fanondroana azy ireo hatramin'ny "fotoana tsy voazara" dia karazany rehetra. (Server, daty, Template Plan), (Server, daty, Plan node), (daty, Kilasy diso, Server), ...
Miaina isaky ny fizarana anefa izy ireo izao ny kopiao isaky ny fanondroana toy izany... Ary ao anatin'ny fizarana tsirairay ny daty dia tsy miova... Hita fa ao anatin'ny index tsirairay toy izany isika izao ampidiro tsotra fotsiny ny constant toy ny iray amin'ireo saha, izay mampitombo ny habeny sy ny fotoana fitadiavana azy, nefa tsy mitondra vokatra. Navelan'izy ireo ho azy ny rake, oops...
Ny fitarihana ny fanatsarana dia mazava - tsotra esory ny saha daty amin'ny tondro rehetra amin'ny latabatra voazarazara. Raha jerena ny habetsahantsika, ny tombony dia eo amin'ny 1TB/herinandro!
Andeha hojerentsika izao fa mbola tsy maintsy noraketina io terabyte io. Izany hoe isika koa tokony ho kely kokoa izao ny kapila! Ity sary ity dia mampiseho mazava tsara ny vokatra azo avy amin'ny fanadiovana, izay natokanay herinandro:
#3. "Manaparitaka" ny enta-mavesatra ambony
Ny iray amin'ireo olana lehibe amin'ny rafitra feno entana dia synchronization tafahoatra asa sasany tsy mitaky izany. Indraindray "satria tsy voamarik'izy ireo", indraindray "mora kokoa izany", fa na ho ela na ho haingana dia tsy maintsy manala izany ianao.
Andeha hojerentsika ny sary teo aloha ary hojerentsika fa manana disk isika "pumps" eo ambanin'ny entana misy amplitude roa eo anelanelan'ny santionany mifanakaiky, izay mazava ho azy fa "amin'ny statistika" dia tsy tokony hitranga amin'ny hetsika maromaro toy izany:
Tena mora tratrarina izany. Efa nanomboka ny fanaraha-maso mpizara efa ho 1000, ny tsirairay dia karakarain'ny kofehy lojika misaraka, ary ny kofehy tsirairay dia mamerina ny fampahalalana voaangona halefa any amin'ny tahiry amin'ny fatrany, toy izao:
setInterval(sendToDB, interval)
Ny olana eto dia mipetraka amin'ny zava-misy marina ny kofehy rehetra dia manomboka amin'ny fotoana mitovy, ka ny fotoana nandefasana azy ireo dia saika mifanandrify hatrany amin’ny “zava-misy”. Oay #2...
Soa ihany fa mora amboarina io, manampy "random" run-up amin'ny fotoana:
Ny olan'ny highload nentim-paharazana fahatelo dia tsy misy cache aiza izy afaka be.
Ohatra, nataontsika ny mamakafaka amin'ny lafin'ny node plan (ireo rehetra ireo Seq Scan on users), fa avy hatrany dia eritrereto fa izy ireo, amin'ny ankapobeny, mitovy - nanadino.
Tsia, mazava ho azy, tsy misy na inona na inona voasoratra ao amin'ny database indray, izany dia manapaka ny trigger amin'ny INSERT ... ON CONFLICT DO NOTHING. Saingy mbola tonga any amin'ny angon-drakitra io angona io, ary tsy ilaina izany mamaky mba hanamarinana ny fifandirana tsy maintsy atao. Oay #3...
Ny fahasamihafan'ny isan'ny rakitra alefa any amin'ny angon-drakitra alohan'ny / aorian'ny fandefasana ny caching dia miharihary:
Ary izao ny fihenan'ny entana fitahirizana:
Итого
"Terabyte-isan'andro" dia toa mampatahotra fotsiny. Raha manao ny zava-drehetra tsara ianao, dia izao 2^40 octet / 86400 segondra = ~12.5MB/sfa na dia ny screws IDE desktop aza dia nitazona. 🙂
Saingy tena zava-dehibe, na dia misy "skew" avo folo heny amin'ny enta-mavesatra mandritra ny andro aza, dia afaka mahafeno mora foana ny fahaizan'ny SSD maoderina ianao.