Ricerca di grandi quantità di dati per l'elaborazione parallela [chiusa]

5

Ho un set di dati contenente un elenco di utenti (circa 50 milioni).
Ogni utente ha un indirizzo email, un nome e altre colonne di dati.
Voglio inviare un'email settimanale a quegli utenti e il contenuto dell'email sarà basato sui dati dell'utente.
Ogni utente dovrebbe ricevere la posta in uno specifico giorno della settimana, in base alla sua data di registrazione.

Come faccio a progettare un sistema che mi consentirà di interrogare gli utenti e inviare loro l'e-mail personalizzata? Come posso rendere scalabile quel sistema?

Un approccio a cui ho pensato è scrivere un worker che interrogherà tutti gli utenti che hanno bisogno di ricevere l'e-mail nel giorno corrente (questo verrà impaginato) e li inserirà in una coda in cui diversi lavoratori possono elaborarli.

Il problema con questo approccio è che non posso aggiungere lavoratori che eseguono query sui dati e li inserisco in coda, perché non posso garantire che ogni utente verrà interrogato da un singolo operatore.

Forse posso utilizzare uno specifico DB o strumento di accesso ai dati? Esiste uno schema noto per questo tipo di elaborazione?

Apprezzerei i tuoi suggerimenti e pensieri sull'argomento.

    
posta ItayMaoz 30.11.2015 - 12:27
fonte

1 risposta

2

Hai considerato di creare un indice sulla tabella degli utenti per ogni giorno della settimana? Quindi dovresti essere in grado di recuperare rapidamente il sottoinsieme di utenti che desideri. La creazione dell'indice richiederà probabilmente un po 'di tempo, ma gli aggiornamenti successivi non dovrebbero essere troppo negativi (a meno che tu non tenda a popolare in blocco la tua tabella utente).

Se questo non sembra fattibile, allora potresti prendere in considerazione partizionamento o sharding il tuo database. Questi approcci dividono la tabella in tabelle separate basate su alcuni criteri (giorno della settimana, nel tuo caso). Probabilmente vorresti creare una vista che comprenda tutte le partizioni / frammenti per fornire una tabella completa, ma i tuoi thread di lavoro potrebbero concentrarsi solo su uno.

    
risposta data 30.11.2015 - 16:21
fonte

Leggi altre domande sui tag