Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Incrementando centenas de contadores de uma só vez, redis ou mongodb?


Dependendo de como sua estrutura de chaves é apresentada, eu recomendaria canalizar os comandos do zincor. Você tem um gatilho "commit" fácil - o pedido. Se você iterar sobre seus parâmetros e zincor cada chave, no final da solicitação, passe o comando execute, será muito rápido. Eu implementei um sistema como você descreve como um aplicativo cgi e Django. Eu configurei uma estrutura de chave ao longo das linhas disso:

AAAA-MM-DD:HH:MM -> conjunto ordenado

E foi capaz de processar algo como 150.000-200.000 incrementos por segundo no lado do redis com um único processo que deve ser suficiente para o cenário descrito. Essa estrutura de chave me permite obter dados com base em janelas de tempo. Também adicionei uma expiração às chaves para evitar escrever um processo de limpeza de banco de dados. Eu então tinha um cronjob que faria operações definidas para "agregar" as estatísticas para as variantes horárias, diárias e semanais usando variantes do padrão de chave mencionado acima. Eu trago essas ideias, pois são maneiras de aproveitar os recursos integrados do Redis para simplificar o lado dos relatórios. Existem outras maneiras de fazer isso, mas esse padrão parece funcionar bem.

Conforme observado por eyossi, o bloqueio global pode ser um problema real com sistemas que fazem gravações e leituras simultâneas. Se você estiver escrevendo isso como um sistema em tempo real, a simultaneidade pode ser um problema. Se for um sistema de análise de log "final se dia", provavelmente não acionaria a contenção, a menos que você execute várias instâncias do analisador ou relatórios no momento da entrada. Com relação a manter as leituras rápidas No Redis, eu consideraria configurar uma instância redis somente leitura escravizada da principal. Se você colocá-lo no servidor executando o relatório e apontar o processo de relatório para ele, deve ser muito rápido gerar os relatórios.

Dependendo de sua memória disponível, tamanho do conjunto de dados e se você armazena qualquer outro tipo de dados na instância redis, considere executar um servidor redis de 32 bits para manter o uso de memória baixo. Uma instância 32b deve ser capaz de manter muitos desse tipo de dados em um pequeno pedaço de memória, mas se a execução do Redis normal de 64 bits não estiver consumindo muita memória, sinta-se à vontade para usá-lo. Como sempre, teste seus próprios padrões de uso para validar