Recentemente, aprendi sobre logs de gravação antecipada e recuperação de falhas no contexto de armazenamentos de valor-chave como Cassandra e tenho algumas perguntas de acompanhamento:
- Os WALs são persistidos em instantâneos menores para que precisemos apenas recuperar do instantâneo mais recente em vez de todo o histórico de confirmação? Qual é o mecanismo de alto nível para persistir e recuperar desses instantâneos?
- Os logs são agrupados ao gravar no disco para desempenho? Isso corre o risco de perder dados permanentemente?
- O que acontece quando uma máquina falha durante a recuperação de um WAL? Acabamos com resultados parciais no banco de dados? Como nos recuperamos desse estado na próxima vez que o banco de dados for iniciado?
Quando um aplicativo emite uma solicitação de gravação:
memtable
, ecommitlog
(WAL).O acréscimo ao
commitlog
é feito por dois motivos:Os dados nas memtables eventualmente serão liberados para um arquivo de dados no disco chamado SSTable (arquivo de tabela de strings classificadas). A liberação da tabela de memória é acionada quando:
Depois que uma memtable é liberada para o disco, os dados em seu commitlog correspondente são removidos.
Como as mutações persistem no disco, elas são duráveis e sobreviverão a reinicializações e interrupções não planejadas. No pior cenário em que o disco/volume do commitlog é perdido, os dados não são perdidos para sempre porque as mutações são enviadas para todas as réplicas no cluster, portanto, existem cópias que podem ser sincronizadas com outras réplicas por meio de reparos.
Para obter mais informações, consulte Como os dados são gravados no Cassandra . Saúde!