streaming real-time ndjson sse websockets data-formats

Formatos de Dados em Tempo Real e Streaming: NDJSON, SSE e mais

Saiba mais sobre formatos de dados em streaming como NDJSON, JSON Lines e Server-Sent Events (SSE). Gerencie dados em tempo real de forma eficiente em aplicações web.

2026-04-15

Formatos de Dados em Tempo Real e Streaming: Um Guia Prático

No desenvolvimento web moderno, os dados não são mais apenas arquivos estáticos ou respostas únicas de API. Atualizações em tempo real, logs e conjuntos de dados massivos exigem formatos de streaming — formas de enviar e processar dados à medida que chegam, em vez de esperar que todo o pacote esteja pronto. Este guia explora os formatos mais populares para streaming e comunicação em tempo real.

1. Formatos Delimitados por Linhas (NDJSON e JSON Lines)

Quando você precisa transmitir uma lista de objetos (como registros de um banco de dados ou entradas de log), um array JSON padrão [...] é problemático porque o analisador (parser) precisa esperar pelo fechamento ] antes de poder processar qualquer coisa. Formatos delimitados por linhas resolvem isso.

NDJSON (Newline Delimited JSON)

O NDJSON é um padrão para armazenar ou transmitir dados onde cada linha é um objeto JSON válido.

  • Como funciona: {"id":1}\n{"id":2}\n...
  • Vantagem principal: Você pode analisar e processar cada objeto individualmente assim que a quebra de linha \n é recebida.
  • Caso de uso: Exportações de grandes bancos de datos, registro estruturado e pipelines de dados.

JSON Lines (JSONL)

O JSON Lines é essencialmente o mesmo que NDJSON. É um formato baseado em texto onde cada linha é um valor JSON válido.

  • Vantagem principal: Compatibilidade com ferramentas Unix como grep, awk e sed.
  • Caso de uso: Armazenamento de conjuntos de dados para treinamento de IA/ML e análise de logs.

Stream de CSV (CSV Stream)

Semelhante ao NDJSON, um Stream de CSV envia linhas de valores separados por vírgulas linha por linha.

  • Vantagem principal: Custo operacional extremamente baixo.
  • Caso de uso: Exportação de milhões de linhas para formatos compatíveis com Excel em tempo real.

2. Server-Sent Events (SSE)

O Server-Sent Events (SSE) é um padrão que permite que os servidores enviem dados para páginas web via HTTP. Ao contrário dos WebSockets, é um canal de comunicação unidirecional (Servidor -> Cliente).

  • Como funciona: O servidor mantém uma conexão HTTP aberta e envia dados em um formato específico text/event-stream.
  • Formato do protocolo:
    event: user-update
    data: {"name": "Alice"}
    
    event: chat-message
    data: "Olá mundo!"
    
  • Vantagem principal: Reconexão automática, leve e funciona sobre HTTP/HTTPS padrão.
  • Caso de uso: Resultados esportivos ao vivo, cotações de ações e notificações de redes sociais.

3. WebSockets e Formatos de Mensagens

Enquanto o SSE é para streaming unidirecional, os WebSockets fornecem um canal de comunicação full-duplex (bidirecional).

Formatos de Mensagem WebSocket

Como os WebSockets fornecem apenas uma camada de transporte, os desenvolvedores devem escolher um formato de mensagem.

  • JSON: A escolha mais comum pela facilidade de uso.

  • Binário (Protobuf/MessagePack): Usado quando baixa latência e tamanho reduzido do pacote são críticos.

  • Protocolos de texto personalizados: Às vezes usados para comandos simples.

  • Caso de uso: Edição colaborativa em tempo real (Google Docs), jogos online e aplicativos de chat.


Comparação de Abordagens de Streaming

Formato / Tecnologia Direção Custo Operacional Reconexão Ideal para
NDJSON / JSONL Unidirecional Baixo N/A (Arquivo/Stream) Logs, Exportação de dados
SSE Servidor -> Cliente Muito baixo Automática Dashboards ao vivo
WebSockets Bidirecional Médio Manual Aplicasões interativas
Stream de CSV Unidirecional Mínimo N/A Relatórios grandes

FAQ: Perguntas Frequentes

P: Por que não usar apenas um array JSON para streaming?

R: Os analisadores JSON padrão funcionam no esquema "tudo ou nada". Eles não podem retornar objetos até que todo o array seja fechado. O NDJSON permite a análise "incremental", o que economiza memória e reduz a latência.

P: Quando devo usar SSE em vez de WebSockets?

R: Use SSE se você precisar apenas que o servidor envie dados para o cliente (ex: notificações). O SSE é mais fácil de implementar, lida com desconexões automaticamente e é mais amigável a firewalls do que os WebSockets.

P: Como lidar com grandes arquivos NDJSON no Node.js?

R: Use um analisador de streaming como o readline ou uma biblioteca dedicada ao NDJSON. Isso permite processar gigabytes de dados com um consumo de memória constante e pequeno.

Ferramentas Relacionadas no Tool3M