Consultando uma grande quantidade de dados para processamento paralelo [fechado]

5

Eu tenho um conjunto de dados contendo uma lista de usuários (por volta de 50M).
Cada usuário tem um endereço de email, nome e mais algumas colunas de dados.
Quero enviar um email semanal para esses usuários, e o conteúdo do email será baseado nos dados do usuário.
Cada usuário deve receber o email em um dia específico da semana, com base em sua data de registro.

Como faço para projetar um sistema que me permita consultar os usuários e enviar-lhes o e-mail personalizado? Como posso tornar esse sistema escalável?

Uma abordagem em que pensei foi escrever um worker que consultará todos os usuários que precisam receber o email no dia atual (isso será paginado) e os inserirá em uma fila onde vários funcionários poderão processá-los. / p>

O problema com essa abordagem é que não posso adicionar trabalhadores que consultam os dados e os inserem na fila, porque não posso garantir que cada usuário seja consultado por um único trabalhador.

Talvez exista uma ferramenta de acesso a dados ou banco de dados específica que eu possa usar? Existe um padrão conhecido para esse tipo de processamento?

Eu apreciaria suas sugestões e pensamentos sobre o assunto.

    
por ItayMaoz 30.11.2015 / 12:27
fonte

1 resposta

2

Você já pensou em criar um índice na sua tabela de usuários para cada dia da semana? Então você deve ser capaz de recuperar rapidamente o subconjunto de usuários que você deseja. A criação do índice provavelmente levará um pouco de tempo, mas as atualizações subseqüentes não devem ser muito ruins (a menos que você tenha tendência a preencher sua tabela de usuários em massa).

Se isto não parece viável, então você pode querer considerar o particionamento ou sharding seu banco de dados. Essas abordagens dividem a tabela em tabelas separadas com base em algum critério (dia da semana, no seu caso). Você provavelmente deseja criar uma visualização que englobe todas as partições / shards para fornecer uma tabela completa, mas seus threads de trabalho podem se concentrar apenas em um.

    
por 30.11.2015 / 16:21
fonte