Projekat 13 · Podaci i infrastruktura
Ubrzanje izvještaja bez izmjene upita i šeme
Za dobavljača velikih američkih trgovačkih lanaca ubrzao sam izvještaj najvećeg kupca s više od 15 minuta na 0,2 sekunde. Nijedan sačuvani izvještaj nije trebalo praviti iznova.
sa preko 15 minuta → 0,2 sekunde
Izvještaj najvećeg kupca
4 minute → 0,1 sekunde
Drugi izvještaj
Nijedan kupac nije morao ponovo napraviti ijedan sačuvani izvještaj
Priča u 5 koraka
Stack
- Amazon Redshift
- S3
- MySQL
- materijalizovani view-ovi
01 · Kontekst
Klijent isporučuje modne dodatke velikim američkim maloprodajnim lancima, a ti lanci podatke o svojoj prodaji gledaju u BI alatu.
Klijent isporučuje modne dodatke velikim američkim maloprodajnim lancima, a ti lanci podatke o svojoj prodaji gledaju u BI alatu. Dvije stvari se nisu smjele dirati: upiti, jer ih generiše alat, i šema, jer kupci imaju sačuvane izvještaje koji zavise od nje.
Vrijeme otvaranja izvještaja najvećeg kupca skraćeno je s više od petnaest minuta na dvije desetinke sekunde, a drugog izvještaja s četiri minute na desetinku.
Nielsen Norman Group navodi 1 sekundu kao granicu do koje misao teče bez prekida, a 10 sekundi kao granicu pažnje, nakon koje korisnik ode raditi nešto drugo. Petnaest minuta je devedeset puta više od te granice od 10 sekundi, a izvještaj se sada otvara za manje od 1 sekunde.
02 · Nije se smjelo mijenjati
Izvještaj je dio onoga što klijent prodaje: kupci ga otvaraju da vide kako se prodaju njihovi proizvodi.
Izvještaj je dio onoga što klijent prodaje: kupci ga otvaraju da vide kako se prodaju njihovi proizvodi.
Upite generiše BI alat, pa nije bilo šta prepisivati. Šema u praksi pripada kupcima, jer su na njoj napravljeni njihovi sačuvani izvještaji, i bilo kakva izmjena značila bi da svi kupci moraju ponovo praviti svoje izvještaje. Time su otpala oba uobičajena načina da se spor izvještaj ubrza: prepisivanje upita i preuređivanje šeme.
Preostalo je da upiti i šema ostanu potpuno isti, a da se promijeni sistem nad kojim se izvršavaju.
03 · Šta sam uradio
Izabrao sam Redshift zato što je klijent selio sve servise na AWS.
Izabrao sam Redshift zato što je klijent selio sve servise na AWS. Skladište u istom cloudu kao i ostatak sistema znači jednostavniji prenos podataka, jedan AWS račun, jedan model pristupa i jedan tim koji ga održava. Snowflake i BigQuery po mogućnostima ne bi bili slabiji, ali se nisu uklapali u klijentov prelazak na AWS.
Nije bilo migracije u uobičajenom smislu, jer su postojeći jobovi već izvozili podatke o više od 200 miliona proizvoda iz izvornog MySQL sistema u S3. Moj sloj preuzima te izvezene podatke i učitava ih u Redshift.
Distribution i sort ključeve izabrao sam prema upitima koje BI alat stvarno izvršava. Ti ključevi određuju na kojem se čvoru nalazi koji red i kojim su redoslijedom redovi zapisani na disku, a to nijedan upit ne spominje, pa su se mogli mijenjati dok je šema ostala potpuno ista. Da sam ključeve birao samo prema izgledu šeme, skladište bi bilo skupo, a izvještaji ne bi bili brži.
Najteže izvještaje prebacio sam na materijalizovane view-ove, sa zavisnim view-ovima nad njima, koji se inkrementalno osvježavaju jednom dnevno. Unaprijed izračunati podaci koji odstupe od izvora bili bi gori od sporih, pa validaciona skripta provjerava da li se view-ovi i izvor i dalje slažu.
04 · Rezultat
Izvještaj najvećeg kupca: sa preko 15 minuta → 0,2 sekunde
- Izvještaj najvećeg kupca: sa preko 15 minuta → 0,2 sekunde
- Drugi izvještaj: 4 minute → 0,1 sekunde
- Nijedan kupac nije morao ponovo napraviti ijedan sačuvani izvještaj
- Dnevno osvježavanje, uz provjeru prema izvoru
Kad se izvještaj otvara za manje od sekunde, kupci ga istražuju umjesto da ga zatraže i čekaju, i to ga u praksi čini drugim proizvodom: mijenjaju filter, upoređuju periode i odmah postavljaju sljedeće pitanje.
05 · Šta bih uradio drugačije
Dnevno osvježavanje bilo je ispravno za ove podatke, koji ionako stižu jednom dnevno.
Dnevno osvježavanje bilo je ispravno za ove podatke, koji ionako stižu jednom dnevno. Ako neko zatraži svježije brojke, to se ne može postići bez ponovne izrade cijelog postupka osvježavanja. Agregaciju bih napravio tako da se interval osvježavanja može promijeniti bez njenog prepravljanja.
Povezane usluge
Usluge koje se oslanjaju na ovaj projekat.
- Cloud i DevOpsMigracija bez prekida radaSkladište podataka za izvještaje ponovo smo izgradili ispod BI alata čiji su upiti i šema morali ostati potpuno isti. Izvještaj za najvećeg kupca sada se otvara za dvije desetinke sekunde, a ranije mu je trebalo više od petnaest minuta. Svi sačuvani izvještaji kupaca nastavili su raditi.
- Web razvojBrzina webaIzvještaj o prodaji u BI alatu ubrzan je s preko petnaest minuta na 0,2 sekunde, bez izmjene ijednog upita ili kolone.
- Backend, podaci i integracijeOptimizacija SQL-a i data warehouseaKlijenti jednog američkog dobavljača za maloprodaju prate vlastitu prodaju kroz BI alat, a ni upiti ni šema nisu se smjeli dirati. Izvještaj najvećeg klijenta ubrzan je s preko 15 minuta na 0,2 sekunde, a drugi s 4 minute na 0,1 sekunde. Nijedan klijent nije morao ponovo praviti sačuvani izvještaj.
- Kako možemo sarađivatiTehničko vođstvoRedshift izabran za data warehouse dobavljača modnih dodataka jer je klijent sve servise prebacivao na AWS. Tako je warehouse ostao u istom cloudu i na istom AWS računu kao i sve ostalo, a održava ga isti tim.
- Kako možemo sarađivatiTehnički due diligenceData warehouse u maloprodaji u kojem se nisu smjeli mijenjati ni upiti ni šema. Izvještaj najvećeg klijenta, kojem je trebalo više od 15 minuta, sada se otvara za 0,2 sekunde, a svi sačuvani izvještaji klijenata rade kao i prije.
Povezani tekstovi
Tekstovi nastali iz ovog projekta.
Projekat 13
Radite na sličnom problemu? Odgovaramo u roku od jednog radnog dana.
Prvi poziv traje 30 minuta i ni na šta vas ne obavezuje.