Fala Galerinha Massa!
Acho que ficou pra aula 2 👨🏫 mostrar mais detalhes do cache implementado no Pagar.me pra gente ver melhor o tradeoff 🤓, mas algo importante para avaliar é a proporção de leituras/gravações de saldo em cada um dos dois sistemas.
Imagino que no Pagar.me o número de leituras de saldo seja um pouco maior que o de gravações, mas no TabNews o número de leituras vai ser ordens de grandeza maior do que o de gravações. Pelo menos foi o que considerei quando fiz essa sugestão na PR #462 que é bem alinhada com a sugestão do Rodrigo.
Para impedir inconsistências, poderia colocaria uma coluna a mais que seta o saldo acumulado como outdated quando outro saldo acumulado é calculado. Com isso, no início da transação, é feito o lock da linha que continha o saldo mais atual e, ao final da transação, ele é setado como outdated. Assim a escrita ocorreria de forma serial para cada usuário/conteúdo, sem risco de inconsistência.
-> | sequence | balance_type | recipient_id | amount | last_balance | outdated | <- |
---|---|---|---|---|---|---|---|
... | 1 | user:tabcoin | aa | 5 | 5 | true | ... |
... | 2 | content:tabcoin | bb | 1 | 1 | true | ... |
... | 3 | user:tabcoin | aa | 5 | 10 | false | ... |
... | 4 | content:tabcoin | bb | 1 | 2 | false | ... |
O que acham dessa abordagem?