A ScyllaDB használata a producer előtt antipattern. Hogyan szervezzük meg helyesen a deduplikációt?
Golang
Tegyük fel, hogy egy nagy reklámhálózat vagyunk. Bannereket helyezünk el partneroldalakon világszerte. Olyan rendszert kell terveznünk, amely valós idejű eseménygyűjtést és feldolgozást végez. Ezek az adatok két célból kritikusak: Számlázás: A kattintásokért pénzt vonunk le a hirdetőktől. Elemzés: A kampányok aktuális hatékonyságának (CTR, megjelenítések) megjelenítése a személyes irányítópulton. Bemeneti adatok (a terhelés kiszámításához) Önnek kell saját magának értékelnie a szükséges kapacitásokat (RPS, forgalom, tárolás), az alábbi metrikák alapján: Partnerhálózat: 500.000 aktív oldal. Forgalom: Átlagosan minden oldal 2 oldalmegtekintést kap másodpercenként. Hirdetési blokkok: Minden oldalon egyszerre 3 banner jelenik meg. Átváltás: Az átlagos CTR (Click-Through Rate) 1%. Eltérés: A csúcsterhelés (esti órák) négyszerese az átlagosnak. Esemény mérete: Az esemény objektuma (Banner ID, Oldal ID, UserID, Timestamp, eseménytípus) kb. 500 bájt. Műszaki követelmények Near Real-Time: Az analitikai felületen az adatok legfeljebb 10 másodperces késleltetéssel jelenjenek meg. Megbízhatóság: A kattintások elvesztése nem elfogadható (ez közvetlen pénzveszteséget jelent). A megjelenések elvesztése (impressions) legfeljebb 0,01% lehet. Skálázhatóság: A rendszernek könnyen bővíthetőnek kell lennie a platformok számának növekedésével.
Miért kell nyers adatokat tárolni az S3 tárolóban? Helyes-e 5 perc TTL-t használni a Redis-ben, vagy jobb-e hosszabb ideig — 24 óráig, tárolni, és a ScyllaDB-t használni az adatellenőrzés forrásaként?