Dhawaan waxaan kuu sheegay sida, adoo isticmaalaya cuntooyinka caadiga ah kordhinta waxqabadka su'aalaha akhrinta SQL Laga soo bilaabo xogta PostgreSQL. Maanta waxaan ka hadli doonaa sida duubista waxaa loo samayn karaa si hufan kaydka xogta adiga oo aan la isticmaalin wax "qalloocin" qaabaynta - si fudud adiga oo si sax ah u habaynaya socodka xogta.
Markii hore, sida MVP kasta, mashruucayagu wuxuu ku bilaabmay culeys fudud - kormeerka waxaa lagu sameeyay kaliya tobanka server ee ugu muhiimsan, dhammaan miisaska waxay ahaayeen kuwo isku dhafan , oo haddana waxaan isku daynay inaan wax ku samayno mid ka mid ah miisaska 1.5TB ee cabbirka, waxaan ogaanay in inkasta oo ay suurtagal tahay in sidan lagu sii noolaado, ay aad u dhib badan tahay.
Waqtiyadu waxay ku dhowaayeen sida waqtiyada xiisaha leh, noocyada kala duwan ee PostgreSQL 9.x waxay ahaayeen kuwo khuseeya, marka dhammaan qaybinta waa in lagu sameeyaa "gacan" - iyada oo loo marayo dhaxalka miiska iyo kiciya jiheynta leh firfircoon EXECUTE.
Xalka natiijadu wuxuu noqday mid caalami ah oo ku filan oo loo turjumi karo dhammaan miisaska:
Miiska waalidka ee madhan "madaxa" ayaa lagu dhawaaqay, kaas oo sifeeyay dhammaan tusmooyinka lagama maarmaanka ah iyo kicinta.
Diiwaanka laga soo xigtay aragtida macmiilka waxaa lagu sameeyay miiska "xididka", iyo gudaha iyadoo la isticmaalayo kicinta marin habaabintaBEFORE INSERT diiwaanka "jidh ahaan" ayaa la geliyey qaybta loo baahan yahay. Haddi aanay taasi weli jirin, waxa aanu qabanay wax ka reeban oo...
β¦ iyadoo la isticmaalayo CREATE TABLE ... (LIKE ... INCLUDING ...) waxaa la abuuray iyadoo lagu salaynayo qaabka miiska waalidka qaybta xaddidan taariikhda la rabosi marka xogta la soo saaro, akhriska lagu sameeyo oo keliya.
PG10: isku daygii ugu horreeyay
Laakin qaybinta dhaxalka taariikh ahaan si fiican ugumay habboonayn la tacaalidda qulqulka qoraalka firfircoon ama tiro badan oo qayb ka mid ah carruurta. Tusaale ahaan, waxaad xasuusan kartaa in algorithm ee xulashada qaybta loo baahan yahay uu lahaa kakanaanta quadratic, in ay la shaqeyso 100+ qaybood, adiga laftaadu waad fahantay sida...
PG10 xaaladdan si weyn ayaa loo hagaajiyay iyadoo la hirgeliyay taageerada qaybinta dhalad. Sidaa darteed, waxaanu isla markiiba isku daynay inaanu ku dabaqno ka dib markii aan u haajiray kaydinta, laakiin ...
Sida ay noqotay ka dib markii la dhex qoday buug-gacmeedka, shaxda asal ahaan u qaybsan ee noocani waa:
ma taageerto sharraxaadaha tusmada
kuma taageerto kicinta dusheeda
qofna ma noqon karo "faraciisa"
ha taageerin INSERT ... ON CONFLICT
ma soo saari karo qayb si toos ah
Ka dib markii aan ku helnay dharbaaxo xanuun badan oo foolka hore ah, waxaan ogaanay in aysan suurtagal ahayn in la sameeyo iyada oo aan wax laga beddelin codsiga, waxaana dib u dhignay cilmi-baaris dheeraad ah muddo lix bilood ah.
PG10: fursad labaad
Haddaba, waxaan bilownay inaan mid mid u xalinno mashaakilaadka ka dhashay:
Sababtoo ah kiciya iyo ON CONFLICT Waxaan ogaanay inaan wali halkan iyo halkaas uga baahanahay, markaa waxaan samaynay marxalad dhexdhexaad ah si aan uga shaqayno miiska wakiilnimada.
Waa laga takhalusay "routing" kiciyeyaasha - taasi waa, ka EXECUTE.
Si gooni ah ayay u soo saareen miiska template leh dhammaan tusmooyinkasi aanay xataa miiska wakiillada ugu jirin.
Ugu dambeyntii, waxaas oo dhan ka dib, waxaan u qaybinay miiska weyn ee hooyo. Abuuritaanka qayb cusub ayaa weli loo daayaa damiirka codsiga.
Qaamuusyada "Sawing".
ΠΠ°ΠΊ ΠΈ Π² Π»ΡΠ±ΠΎΠΉ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, Ρ Π½Π°Ρ ΡΠΎΠΆΠ΅ Π±ΡΠ»ΠΈ "xaqiiqda" iyo "gooyo" (qaamuusyo). Xaaladeena, awooddan waxay u dhaqmeen, tusaale ahaan, jirka template Weydiimaha qunyar socodka ah ee la midka ah ama qoraalka weydiinta lafteeda.
"Xaqiiqooyinka" ayaa la qaybiyay maalinba waqti dheer, sidaas darteed waxaan si degan u tirtirnay qaybo duug ah, oo nama ay dhibin (logs!). Laakin waxaa jirtay dhibaato qaamuusyada...
Ma aha in la sheego in ay jiraan wax badan oo iyaga ka mid ah, laakiin qiyaas ahaan 100TB ee "xaqiiqda" waxay keentay qaamuus 2.5TB ah. Si habboon ugama tirtiri kartid shay miiska noocaas ah, kuma cadaadin kartid wakhti kugu filan, qoraal ahaanna si tartiib tartiib ah ayey u yaraatay.
Sida qaamuuska... gudaha, gelitaan kasta waa in si sax ah loo soo bandhigaa hal mar... tani waa sax, laakiin! qaamuus gaar ah maalin kasta! Haa, tani waxay keenaysaa dib-u-dhac gaar ah, laakiin waxay ogolaataa:
dhaqso u qor/ akhri iyadoo ay ugu wacan tahay cabbirka qaybta yar
Isticmaal xasuus yar adoo la shaqaynaya tusmooyin is haysta
kaydi xog yar iyada oo ay ugu wacan tahay awoodda in si degdeg ah looga saaro waqti hore
Natiijadu waxay tahay dhammaan kakan ee tallaabooyinka Culayska CPU ayaa hoos u dhacay ~ 30%, culayska diskooga ~ 50%:
Isla mar ahaantaana, waxaan sii wadnay inaan isla wax ku qorno keydka xogta, iyadoo culeys yar ay saaran tahay.
#2. Kobcinta xogta iyo dib u habeynta
Markaa wixii aanu haysanay ayaanu ku degnay maalin walba waxay leedahay qayb u gaar ah xogta leh. Dhab ahaantii, CHECK (dt = '2018-10-12'::date) - oo waxaa jira furaha qaybinta iyo shuruudda in diiwaanku ku dhaco qayb gaar ah.
Maaddaama dhammaan warbixinnada adeeggayaga lagu dhisay macnaha taariikh gaar ah, tusmooyinka iyaga laga soo bilaabo "wakhtiyada aan la qaybin" waxay ahaayeen dhammaan noocyada (Server, Taariikhda, Qorshaha Qorshaha), (Server, Taariikhda, Qorshe noode), (Taariikhda, Qaladka fasalka, Server)...
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΆΠΈΠ²ΡΡ koobiyadaada index kasta oo sida... Iyo gudaha qayb kasta taariikhda waa joogto ah... Waxaa soo baxday in hadda aan ku jirno index kasta oo noocaas ah si fudud u geli joogto ah sida mid ka mid ah beeraha, taas oo kordhisa labadaba mugga iyo wakhtiga raadinta, laakiin ma keeno wax natiijo ah. Raashinkii bay iska daayeen, ooh...
Jihada hagaajinta waa caddahay - fudud ka saar goobta taariikhda dhammaan tusmooyinka miisaska kala qaybsan. Marka la eego muggayada, faa'iidada ayaa ku saabsan 1TB/toddobaadkii!
Hadda aan ogaano in terabyte-kan weli ay ahayd in si uun loo duubo. Taasi waa, annaguna sidoo kale saxanku hadda waa inuu ka yara shubaa! Sawirkaani wuxuu si cad u muujinayaa saameynta laga helay nadiifinta, kaas oo aan u hurnay usbuuc:
#3. "Fidinta" culeyska ugu sarreeya
Mid ka mid ah dhibaatooyinka waaweyn ee nidaamyada la raray waa isku xidhid aan badnayn hawlgallada qaarkood oo aan u baahnayn. Mararka qaarkood "sababtoo ah ma aysan dareemin", mararka qaarkood " way sahlanayd sidaas", laakiin mar dhow ama ka dib waa inaad ka takhalustaa.
Aynu soo koobno ββsawirkii hore oo aynu aragno in aynu haysanno saxan "bambooyin" culeyska hoostiisa oo leh laba-weyn Inta u dhaxaysa shaybaarrada ku xiga, kuwaas oo si cad βtirakoob ahaanβ waa in aanay ku dhicin tiro hawlgallo ah:
Tani way fududahay in la gaaro. Waxaan mar hore bilownay la socodka ku dhawaad ββ1000 server, mid walba waxaa lagu farsameeyaa dun macquul ah oo gaar ah, oo dun kasta waxay dib u dejisaa macluumaadka la ururiyey si loogu diro xogta inta jeer ee go'an, wax sidan oo kale ah:
setInterval(sendToDB, interval)
Dhibaatadu halkan waxay si sax ah ugu jirtaa xaqiiqda taas Dhammaan duntadu waxay bilaabaan qiyaastii isku mar, sidaas darteed waqtigooda dirista waxay had iyo jeer ku beegan yihiin "ilaa heerka." Hooy #2...
Nasiib wanaag, tani way fududahay in la hagaajiyo, ku darida "random" run-up waqtiga:
Dhibaatada saddexaad ee soo jireenka ah ayaa ah kayd la'aan meesha uu joogo karaa ahaansho.
Tusaale ahaan, waxaan suurtogal ka dhignay in lagu falanqeeyo dhinaca qanjidhada qorshaha (dhammaan kuwan Seq Scan on users), laakiin isla markiiba waxay u maleynayaan inay yihiin, inta badan, isku mid ah - way illoobeen.
Maya, dabcan, waxba laguma qorin kaydka xogta mar kale, tani waxay ku gooynaysaa kicinta INSERT ... ON CONFLICT DO NOTHING. Laakiin xogtani wali waxay gaartaa kaydka xogta, waana wax aan loo baahnayn akhrinta si aad u hubiso isku dhaca waa in la sameeyaa. Hooy #3...
Farqiga u dhexeeya tirada diiwaannada loo soo diray xogta kaydinta ka hor/kadib marka la kaydiyo waa wax iska cad:
Tanina waa hoos u dhaca kaydinta ee la socota:
Wadarta
"Terabyte-maalintii" kaliya waxay u muuqataa cabsi. Haddii aad wax walba si sax ah u sameyso, markaa tani waa kaliya 2^40 bytes / 86400 seconds = ~ 12.5MB/sin xitaa muraayadaha IDE-ga ee desktop-ka la hayo. π
Laakiin si dhab ah, xitaa iyadoo toban laab "skew" culeyska inta lagu jiro maalinta, waxaad si fudud ula kulmi kartaa awoodaha SSD-yada casriga ah.