Muitos dados
Quando o arquivo não cabe: ler em pedaços, agregar sem guardar, e quando passar para um banco.
Um Quadro guarda tudo em memória. Para um arquivo de alguns milhões de linhas, isso ainda funciona; para dezenas de gigabytes, não. Três estratégias, em ordem de esforço.
| Estratégia | Quando | Com |
|---|---|---|
| agregar enquanto lê | a pergunta é uma soma, uma contagem, uma média | um cycle sobre as linhas, sem guardar |
| ler em pedaços | cada pedaço é processado sozinho | stream action que emite lotes |
| passar para um banco | a pergunta muda a cada dia | SQLite com índice — Arcane.Database |
dataforge
// Agregar enquanto le: memoria constante, qualquer tamanho.
stream action linhas_de(texto):
cycle linha in texto.lines()[1:]:
emit linha.split(",")
csv := "loja,valor\nA,10\nB,5\nA,20\nB,7"
total := {}
cycle campos in linhas_de(csv):
loja := campos[0]
total[loja] := (total[loja] ?? 0) + int(campos[1])
assert total is {"A": 30, "B": 12}Para volume de verdade: Lago de dados e Parquet.