Il caso d'uso che sto cercando di risolvere è quello di assegnare milioni di utenti ai loro gruppi / segmenti. Ho migliaia di criteri diversi da cui vengono creati i bucket degli utenti. Per esempio. criteri del bucket:
All married males in NY or LA assign to Bucket/Segment 1;
Attualmente alla fine della giornata, interrogo gli utenti da una tabella della scala TB in cloud, un criterio bucket alla volta, basato su migliaia di criteri bucket differenti. Quindi generare un feed giornaliero per ciascuno di questi segmenti.
Uso il database ogni notte, ma il numero di segmenti / bucket è diventato così grande che non è più possibile interrogare in batch ogni criterio del bucket ogni notte e riempire i bucket.
Invece sto pensando di passare all'architettura di streaming in cui un utente viene assegnato al segmento mentre entra. Per questo sto cercando di caricare le definizioni dei segmenti in una struttura di dati del grafico direzionale (multi-edge) e determinare quale utente si qualifica per quale segmento viene visualizzato dall'utente. Esempio grafico sotto:
Nelcasotistiachiedendoperchéhobisognodipiùspigolitraduevertici,èdirappresentareandcondition
percriteridibucket.Ades.seilsegmento1è
AllmarriedmalesinNYorLAassigntoBucket/Segment1;
Eilsegmento2è:
AllmarriedmalesassigntoBucket/Segment2;
Seisegmenti1e2condividonolostessobordo,questosaràunproblemaperchéirisultatidelsegmento1sonosolounsottoinsiemedeirisultatidelsegmento2.Ilsegmento2nonhafiltridicittà.
Questograficorappresentateoricamentetuttelerelazioniperilmiousoallaperfezione,mailproblemaèchedopoaverimplementatoquestograficoleprestazionidell'algoritmodicreazionedelgraficosonostatedeludenti.Lamaggiorpartedeltempovieneimpiegatapercrearespigoliperiverticineicriteridiunbucketpertuttiipossibilipercorsifinoaquelbordo.
Alcunivaloridifiltrocomeicodicipostalipossonoaveredecinedimigliaiadivalorichesitraduconoinunaproliferazionedispigolitrainodi.Stocercandounmodoperottimizzarequestacreazionedelgrafico.
Modifica:forniscepiùdettaglicomedarispostadiseguito;
- Tecnologiachestousando:GoogleCloudDataflow(gestitoApacheBeam).Maggioridettaglisucomestoimplementandoquestosononelcommento
qui - Pulisci le regole impostate per utilizzare gli insiemi invece dei valori effettivi: utilizzo set per un sacco di regole come i codici di avviamento postale e l'ho già implementato come zip in {"98500", "98800", ....}. Ma per alcune regole per es. l'e-mail utente non può avere un set e rappresentare ogni e-mail utente nel grafico come un vertice.
- Implementa il grafico di propagazione della verità: guarderò più in dettaglio al momento, sto usando HashMap per il mio vertice e i miei bordi. Il mio vertice è v = {vertex_id, HashMap} e il mio bordo = {edge_id, edge_to_vertex}. E il mio grafico è implementato come HashMap