ScyllaDB naudojimas prieš gamintoją yra antipattern. Kaip teisingai organizuoti deduplikaciją?
Golang
Tarkime, mes esame didelė reklamos tinklas. Mes įrengiame banerius partnerių svetainėse visame pasaulyje. Turime sukurti realiu laiku vykstančių įvykių rinkimo ir apdorojimo sistemą. Šie duomenys yra kritiškai svarbūs dviem tikslams: Apskaita: pinigų nuskaičiavimas iš reklamuotojų už paspaudimus. Analitika: dabartinio kampanijų efektyvumo (CTR, parodymų) rodymas asmeniniame valdymo skydelyje. Įėjimo duomenys (apkrovos skaičiavimui) Turite patys įvertinti reikalingas galimybes (RPS, srautas, saugykla), remiantis šiais rodikliais: Partnerių tinklas: 500 000 aktyvių svetainių. Srautas: Vidutiniškai kiekviena svetainė gauna 2 puslapio peržiūras per sekundę. Reklaminiai blokai: Kiekviename puslapyje vienu metu rodomi 3 baneriai. Konversija: Vidutinis CTR (Click-Through Rate) yra 1%. Nesubalansavimas: Piko apkrova (vakarais) yra 4 kartus didesnė nei vidurkis. Įvykio dydis: Įvykio objektas (Banerio ID, Svetainės ID, UserID, Timestamp, įvykio tipas) sveria apie 500 baitų. Techniniai reikalavimai Near Real-Time: Analitinėje sąsajoje duomenys turi būti rodomi ne vėliau kaip per 10 sekundžių. Patikimumas: Paspaudimų praradimas nėra priimtinas (tai reiškia tiesioginį pinigų praradimą). Rodymų praradimas (impressions) yra priimtinas iki 0,01%. Planuojama plėtra: Sistema turi būti lengvai plečiama, kai didėja platformų skaičius.
Kodėl mums reikia saugoti neapdorotus duomenis S3 saugykloje? Ar teisinga naudoti TTL Redis 5 minutės, ar geriau juos laikyti ilgiau — 24 valandas, ir naudoti ScyllaDB kaip duomenų patikros šaltinį?