스냅샷
콘텐츠 서버는 자신이 호스팅하는 활성 엔티티들의 요약을 주기적으로 컴파일하며, 이를 스냅샷이라고 합니다. 이는 일반적인 파일 이며 식별자를 사용해 다운로드할 수 있습니다.
스냅샷은 일별, 주별, 월별, 연별 기준으로 생성됩니다. 각 스냅샷에는 해당 범위에서 이전 스냅샷 이후로 변경된 활성 엔티티 집합이 포함됩니다.
스냅샷에는 같은 엔티티의 서로 충돌하는 버전(즉, 서로 다른 매니페스트 파일 이 동일한 포인터에 연결된 경우)이 업데이트되면서 포함됩니다. 이를 스캔할 때 클라이언트는 가장 최근 스냅샷의 버전을 유지해야 합니다. 콘텐츠 서버는 비활성 파일을 삭제할 수 있으므로, 오래된 엔티티 버전이 다운로드 가능하다고 보장되지 않습니다.
새 스냅샷이 대체하면 이전 것들(예: 여러 일별 스냅샷을 결합한 주별 스냅샷)을 대체하며, 해당 메타데이터는 어떤 이전 파일이 대체되었는지를 나타내므로 클라이언트가 이를 다운로드할 필요가 없습니다.
사용 가능한 모든 스냅샷을 결합하고(이에 대한 자세한 내용은 아래 참조), 각 포인터 를 따라 발견된 가장 최근 엔티티를 유지하면 전체 활성 엔티티 집합을 찾을 수 있습니다.
실습 섹션의 작동하는 코드로 스냅샷을 실험해 볼 수 있습니다. 섹션입니다.
스냅샷 찾기
현재 스냅샷 집합을 찾으려면 스냅샷 엔드포인트를사용하세요. 응답에는 다음 필드를 가진 항목 배열이 포함됩니다:
generationTimestamp
이 스냅샷이 생성된 Unix UTC 타임스탬프입니다.
hash
스냅샷 파일.
numberOfEntities
스냅샷 파일의 항목 수입니다.
replacedSnapshotHashes
이 스냅샷에 의해 대체된 스냅샷들의 hash 배열입니다.
timeRange.initTimestamp
스냅샷 범위 시작의 Unix UTC 타임스탬프(밀리초)입니다.
timerange.endTimestamp
스냅샷 범위 끝의 Unix UTC 타임스탬프(밀리초)입니다.
예를 들면:
{
"generationTimestamp": 1684979298844,
"hash": "bafybeiflmm46nr4vv2h3wuzbx3pukcz7ju4fhbfzt6yxmoo533uktlgru4",
"numberOfEntities": 12345,
"replacedSnapshotHashes": [ "bafybeicw6x75ieaxfwynekbyhpcsgctpjkt6cb4j6oa7s57qjj6e4b5phd" ],
"timeRange": {
"initTimestamp": 1684281600000,
"endTimestamp": 1684886400000
}
}스냅샷 다운로드
스냅샷의 hash 필드를 사용하면, 클라이언트는 해당 시간 범위에서 생성되거나 업데이트된 관련 포함 엔티티를 다운로드할 수 있습니다.
스냅샷 파일은 다음 정확한 줄로 시작합니다:
그다음 각 줄은 다음 필드를 가진 엔티티를 설명하는 JSON 문서입니다:
일반적인 항목은 다음과 같습니다:
엔티티 인덱스 시작하기
전체 활성 엔티티 집합을 인덱싱하려는 클라이언트는 현재 사용 가능한 모든 스냅샷을 처리하고, 가장 최근의 엔티티를 각 포인터.
가장 간단한 전략은 스냅샷을 시간 역순(즉, 최신 것부터)으로 처리하면서 이미 발견한 포인터는 무시하여 최신 엔티티에 대한 참조를 유지하는 것입니다.
의사 코드로:
개별 엔티티는 여러 포인터로 참조될 수 있으므로(예: 장면), 항목을 유지할지 버릴지 결정하기 전에 모두 확인해야 합니다.
엔티티 인덱스 업데이트하기
최신 엔티티 인덱스를 유지하는 클라이언트는 스냅샷 엔드포인트에 주기적으로 요청하고, 다음을 고려하여 각 파일을 다운로드할지 판단할 수 있습니다:
다음에 의해 식별된 스냅샷은
hash이미 다운로드되었나요?다음은
hash다른 스냅샷의replacedSnapshotHashes목록에 이미 다운로드된 것이 있나요?다음은
timeRange현재 목적에 관련이 있나요?
처리해야 할 새 스냅샷이 있다면, 기존 데이터셋을 업데이트하는 데 위와 동일한 전략을 사용할 수 있습니다.
예시
에서 섹션의 작동하는 코드로 스냅샷을 실험해 볼 수 있습니다. 섹션에는 스냅샷 시스템과 함께 작동하는 코드 예제가 있습니다.
마지막 업데이트