Použitie ScyllaDB pred producentom je antipattern. Ako správne zorganizovať deduplikáciu?
Golang
Pretpostavimo da smo velika oglasna mreža. Postavljamo bannere na partnerskim sajtovima širom sveta. Moramo da dizajniramo sistem za prikupljanje i obradu događaja u realnom vremenu. Ovi podaci su kritični za dva cilja: Fakturisanje: Oduzimanje novca od oglašivača za klikove. Analitika: Prikaz trenutne efikasnosti kampanja (CTR, prikazi) u ličnom panelu. Ulazni podaci (za računanje opterećenja) Morate sami proceniti potrebne kapacitete (RPS, saobraćaj, skladište), na osnovu sledećih metrika: Partner mreža: 500.000 aktivnih sajtova. Saobraćaj: U proseku, svaki sajt prima 2 prikaza stranica po sekundi. Reklamni blokovi: Na svakoj stranici se istovremeno prikazuju 3 banera. Konverzija: Prosečan CTR (Click-Through Rate) je 1%. Nepravilnost: Pikovno opterećenje (večernji sati) je 4 puta više od proseka. Veličina događaja: Objekat događaja (ID banera, ID sajta, UserID, Timestamp, tip događaja) teži otprilike 500 bajtova. Tehnički zahtevi Near Real-Time: Podaci u analitičkom interfejsu treba da se pojavljuju sa zakašnjenjem ne većim od 10 sekundi. Pouzdanost: Gubitak klikova nije prihvatljiv (ovo znači direktan gubitak novca). Gubitak prikaza (impressions) je prihvatljiv do 0,01%. Skalabilnost: Sistem treba lako da se proširuje sa rastom broja platformi.
Prečo musíme ukladať surové údaje do úložiska S3? Je správne použiť TTL 5 minút v Redis, alebo je lepšie ich ukladať dlhšie — 24 hodín, a použiť ScyllaDB ako zdroj overovania údajov?