Snapshots

Os content servers irão periodicamente compilar resumos das entidades ativas que estão hospedando, chamados snapshots. Eles são arquivos regulares filesarrow-up-right e podem ser baixados usando seu identificador.

Snapshots são criados diariamente, semanalmente, mensalmente e anualmente. Cada um contém o conjunto de entidades ativas que mudaram desde o snapshot anterior para esse intervalo.

Snapshots conterão versões conflitantes das mesmas entidades (ou seja, diferentes manifest filesarrow-up-right associados ao mesmo pointer) conforme são atualizados. Ao examiná-los, os clientes devem manter a versão presente no snapshot mais recente. Como os content servers podem excluir arquivos inativos, versões antigas de entidades não são garantidas para download.

Quando um novo snapshot replaces os mais antigos (por exemplo, um snapshot semanal que combina uma série de diários), seus metadados indicam quais arquivos anteriores são substituídos para que os clientes não precisem baixá-los.

O conjunto completo de entidades ativas pode ser descoberto combinando todos os snapshots disponíveis (mais abaixo há mais detalhes), mantendo a entidade mais recente referenciada por cada pointerarrow-up-right descoberto ao longo do caminho.

Você pode experimentar com snapshots usando código funcional na practicearrow-up-right seção.

Descobrindo Snapshots

Para localizar o conjunto atual de snapshots, use o snapshots endpointarrow-up-right. A resposta contém um array de itens com estes campos:

Campo
Valor

generationTimestamp

O timestamp Unix UTC quando este snapshot foi criado.

hash

O snapshot filearrow-up-right.

numberOfEntities

O número de entradas no arquivo de snapshot.

replacedSnapshotHashes

Um array com os hash de quaisquer snapshots substituídos por este.

timeRange.initTimestamp

O timestamp Unix UTC (em milissegundos) para o início do intervalo do snapshot.

timerange.endTimestamp

O timestamp Unix UTC (em milissegundos) para o fim do intervalo do snapshot.

Por exemplo:

{
  "generationTimestamp": 1684979298844,
  "hash": "bafybeiflmm46nr4vv2h3wuzbx3pukcz7ju4fhbfzt6yxmoo533uktlgru4",
  "numberOfEntities": 12345,
  "replacedSnapshotHashes": [ "bafybeicw6x75ieaxfwynekbyhpcsgctpjkt6cb4j6oa7s57qjj6e4b5phd" ],
  "timeRange": {
     "initTimestamp": 1684281600000,
     "endTimestamp": 1684886400000
  }
}

Baixando Snapshots

Usando o hash campo de um snapshot, os clientes podem baixar o associado contendo entidades criadas ou atualizadas nesse intervalo de tempo.

Os arquivos de snapshot começam com esta linha exata:

Depois disso, cada linha é um documento JSON descrevendo uma entityarrow-up-right com os seguintes campos:

Campo
Valor

entityId

O identificador imutável para esta entityarrow-up-right.

entityType

Um de cena, perfil, wearable, emote, store ou outfits.

pointers

Um array de pointersarrow-up-right que resolvem (ou costumavam resolver) para esta entidade.

entityTimestamp

O timestamp Unix UTC (em milissegundos) quando esta entidade foi enviada.

authChain

O auth_chainarrow-up-right para esta entidade.

Uma entrada típica se parece com isto:

circle-info

Se você pretende analisar um snapshot linha por linha, lembre-se de pular (ou, melhor ainda, validar) a primeira com o cabeçalho, e esteja pronto para lidar com uma linha vazia no final do arquivo.

Iniciando um Índice de Entidades

Clientes que queiram indexar o conjunto inteiro de entidades ativas devem processar todos os snapshots atualmente disponíveis, e manter a mais recente entityarrow-up-right para cada pointerarrow-up-right.

A estratégia mais simples é processar os snapshots em ordem reversa cronológica (ou seja, do mais recente para o mais antigo), ignorando pointers que já foram descobertos, a fim de manter a referência para a entidade mais recente.

Em pseudo-código:

Como entidades individuais podem ser referenciadas por múltiplos pointers (como é comum com cenas), todos eles devem ser verificados antes de decidir manter ou descartar o item.

circle-info

Os arquivos de snapshot para os intervalos de tempo maiores podem ser muito grandes. Para propósitos de desenvolvimento e experimentação que não exigem indexar o conjunto inteiro de entidades, é recomendável usar os snapshots menores. O conjunto resultante de entidades será incompleto, mas válido.

Atualizando um Índice de Entidades

Clientes que mantêm um índice de entidades atualizado podem fazer chamadas periódicas ao snapshotsarrow-up-right endpoint, e determinar se devem baixar cada arquivo considerando:

  • O snapshot identificado por hash já foi baixado?

  • Está hash na replacedSnapshotHashes lista de outro snapshot que já foi baixado?

  • O timeRange é relevante para os propósitos atuais?

Se quaisquer novos snapshots precisarem ser processados, a mesma estratégia acima pode ser usada para atualizar um conjunto de dados existente.

Exemplos

Na practicearrow-up-right seção, você encontrará exemplos de código que funcionam com o sistema de snapshots.

Atualizado