Instantáneas

Los servidores de contenido compilarán periódicamente resúmenes de las entidades activas que están hospedando, llamados snapshots. Son archivosarrow-up-right regulares y se pueden descargar usando su identificador.

Los snapshots se crean con base diaria, semanal, mensual y anual. Cada uno contiene el conjunto de entidades activas que cambiaron desde el snapshot anterior para ese rango.

Los snapshots contendrán versiones en conflicto de las mismas entidades (es decir, diferentes manifest filesarrow-up-right asociados al mismo pointer) a medida que se actualizan. Al escanearlos, los clientes deben conservar la versión del snapshot más reciente. Dado que los servidores de contenido pueden eliminar archivos inactivos, no se garantiza que las versiones obsoletas de entidades estén disponibles para su descarga.

Cuando un nuevo snapshot reemplaza a los anteriores (por ejemplo, un snapshot semanal que combina una serie de diarios), sus metadatos indican qué archivos previos son reemplazados para que los clientes no necesiten descargarlos.

El conjunto completo de entidades activas puede descubrirse combinando todos los snapshots disponibles (más detalles abajo), conservando la entidad más reciente referenciada por cada pointerarrow-up-right descubierto en el proceso.

Puedes experimentar con snapshots usando código funcional en la practicearrow-up-right sección.

Descubriendo Snapshots

Para ubicar el conjunto actual de snapshots, usa el snapshots endpointarrow-up-right. La respuesta contiene un arreglo de elementos con estos campos:

Campo
Valor

generationTimestamp

La marca de tiempo Unix UTC cuando se creó este snapshot.

numberOfEntities

El número de entradas en el archivo snapshot.

replacedSnapshotHashes

Un arreglo con los hash de cualquier snapshot reemplazado por este.

timeRange.initTimestamp

La marca de tiempo Unix UTC (en milisegundos) para el comienzo del rango del snapshot.

timerange.endTimestamp

La marca de tiempo Unix UTC (en milisegundos) para el final del rango del snapshot.

Por ejemplo:

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

Descargando Snapshots

Usando el hash campo de un snapshot, los clientes pueden descargar el archivo asociado que contiene las entidades creadas o actualizadas en ese rango de tiempo.

Los archivos snapshot comienzan con esta línea exacta:

Después de eso, cada línea es un documento JSON que describe una entityarrow-up-right con los siguientes campos:

Campo
Valor

entityId

El identificador inmutable para esta entityarrow-up-right.

entityType

Uno de escena, perfil, wearable, emote, store o outfits.

pointers

Un arreglo de pointersarrow-up-right que resuelven (o solían resolver) a esta entidad.

entityTimestamp

La marca de tiempo Unix UTC (en milisegundos) cuando esta entidad fue subida.

authChain

El auth chainarrow-up-right para esta entidad.

Una entrada típica se ve así:

circle-info

Si tienes la intención de parsear un snapshot línea por línea, recuerda saltarte (o mejor aún, validar) la primera con el encabezado, y estar listo para manejar una línea vacía al final del archivo.

Iniciando un Índice de Entidades

Los clientes que quieran indexar el conjunto completo de entidades activas deben procesar todos los snapshots actualmente disponibles y mantener la más reciente entityarrow-up-right para cada pointerarrow-up-right.

La estrategia más simple es procesar los snapshots en orden cronológico inverso (es decir, del más reciente al más antiguo), ignorando pointers que ya hayan sido descubiertos, para conservar la referencia a la última entidad.

En pseudocódigo:

Dado que entidades individuales pueden ser referenciadas por múltiples pointers (como es común en escenas), todos ellos deben ser verificados antes de decidir conservar o descartar el elemento.

circle-info

Los archivos snapshot para los rangos de tiempo más largos pueden ser muy grandes. Para propósitos de desarrollo y experimentación que no requieren indexar el conjunto completo de entidades, se recomienda usar los snapshots más pequeños. El conjunto resultante de entidades será incompleto pero válido.

Actualizando un Índice de Entidades

Los clientes que mantienen un índice de entidades actualizado pueden hacer llamadas periódicas al snapshotsarrow-up-right endpoint, y determinar si descargar cada archivo considerando:

  • ¿Fue el snapshot identificado por hash ya descargado?

  • ¿Está hash en la replacedSnapshotHashes lista de otro snapshot que ya fue descargado?

  • ¿Es el timeRange relevante para los propósitos actuales?

Si se deben procesar nuevos snapshots, se puede usar la misma estrategia que arriba para actualizar un dataset existente.

Ejemplos

En la practicearrow-up-right sección, encontrarás ejemplos de código que funcionan con el sistema de snapshots.

Última actualización