Snapshots
Os content servers irão compilar periodicamente resumos das active entities que estão a alojar, chamados snapshots. São regulares files e podem ser descarregados usando o seu identificador.
Os snapshots são criados numa base diária, semanal, mensal e anual. Cada um contém o conjunto de active entities que mudou desde o snapshot anterior para esse intervalo.
Os snapshots conterão versões conflituantes das mesmas entities (isto é, diferentes manifest files associados ao mesmo pointer), à medida que são atualizados. Ao analisá-los, os clients devem manter a versão no snapshot mais recente. Como os content servers podem apagar files inativos, não é garantido que versões obsoletas de entities estejam disponíveis para download.
Quando um novo snapshot substitui os mais antigos (por exemplo, um snapshot semanal que combina uma série de diários), os seus metadados indicam quais os files anteriores que são substituídos, para que os clients não precisem de os descarregar.
O conjunto completo de active entities pode ser descoberto combinando todos os snapshots disponíveis (mais sobre isso abaixo), mantendo a entity mais recente referenciada por cada pointer descoberto ao longo do caminho.
Pode experimentar snapshots com código funcional na prática secção.
Descobrir Snapshots
Para localizar o conjunto atual de snapshots, use o snapshots endpoint. A resposta contém um array de itens com estes campos:
generationTimestamp
O timestamp Unix UTC quando este snapshot foi criado.
hash
O snapshot file.
numberOfEntities
O número de entradas no snapshot file.
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.
Por exemplo:
{
"generationTimestamp": 1684979298844,
"hash": "bafybeiflmm46nr4vv2h3wuzbx3pukcz7ju4fhbfzt6yxmoo533uktlgru4",
"numberOfEntities": 12345,
"replacedSnapshotHashes": [ "bafybeicw6x75ieaxfwynekbyhpcsgctpjkt6cb4j6oa7s57qjj6e4b5phd" ],
"timeRange": {
"initTimestamp": 1684281600000,
"endTimestamp": 1684886400000
}
}Descarregar Snapshots
Usando o hash campo de um snapshot, os clients podem descarregar as entities associadas criadas ou atualizadas nesse intervalo de tempo.
Os snapshot files começam com esta linha exata:
Depois disso, cada linha é um documento JSON que descreve um entity com os seguintes campos:
entityId
O identificador imutável para esta entity.
entityType
Um de scene, perfil, wearable, emote, store ou outfits.
pointers
Um array de pointers que resolvem (ou eram usados para resolver) para esta entity.
entityTimestamp
O timestamp Unix UTC (em milissegundos) quando esta entity foi carregada.
authChain
O serializada em JSON para esta entity.
Uma entrada típica tem este aspeto:
Iniciar um Entity Index
Os clients que pretendem indexar todo o conjunto de active entities devem processar todos os snapshots atualmente disponíveis e manter a entity mais recente entity para cada pointer.
A estratégia mais simples é processar os snapshots por ordem cronológica inversa (isto é, do mais recente para o mais antigo), ignorando pointers que já tenham sido descobertos, de modo a manter a referência para a entity mais recente.
Em pseudo-código:
Como as entities individuais podem ser referenciadas por múltiplos pointers (como é comum no caso de cenas), todos eles devem ser verificados antes de decidir manter ou descartar o item.
Atualizar um Entity Index
Os clients que mantêm um entity index atualizado podem fazer chamadas periódicas ao snapshots endpoint e determinar se devem descarregar cada file considerando:
O snapshot identificado por
hashjá foi descarregado?Está
hashnareplacedSnapshotHasheslista de outro snapshot que já foi descarregado?É o
timeRangerelevante para os fins atuais?
Se houver novos snapshots a processar, pode usar-se a mesma estratégia acima para atualizar um dataset existente.
Exemplos
Na prática secção, encontrará exemplos de código que funcionam com o sistema de snapshots.
Atualizado