샤드 피드 파일

인벤토리에 따라 샤딩 (또는 피드를 여러 파일로 분할)이 필요할 수 있습니다.

샤딩을 사용해야 하는 경우

  • 피드가 1파일당 200MB를 초과합니다 (gzip 압축 후).

    • 예: 생성된 어베일러빌리티 피드는 1GB입니다. 5개 이상의 별도 파일 (또는 샤드)로 샤딩해야 합니다.
  • 파트너 인벤토리가 시스템 또는 지역에 분산되어 인벤토리를 조정하기 어렵습니다.

    • 예: 파트너에게 별도의 시스템에 있는 미국 및 EU 인벤토리가 있습니다. 피드는 2개의 파일 (또는 샤드)로 생성될 수 있으며, 하나는 미국용, 하나는 EU용으로 동일한 noncegeneration_timestamp를 사용합니다.

일반 규칙

  • 각 샤드는 파일당 200MB를 초과할 수 없습니다 (gzip 압축 후).
  • 피드당 샤드는 20개 이하로 사용하는 것이 좋습니다. 이 금액을 초과하는 비즈니스 사유가 있는 경우 지원팀에 문의하여 추가 안내를 받으세요.
  • 개별 레코드 (예: 하나의 Merchant 객체)는 하나의 샤드로 전송해야 하며 여러 샤드로 분할할 수 없습니다. 그러나 이후 피드에서 동일한 shard_number를 사용하여 샤드로 전송하지 않아도 됩니다.
  • 성능을 향상하려면 데이터를 샤드 간에 균등하게 분할하여 모든 샤드 파일의 크기를 비슷하게 만듭니다.

피드를 샤딩하는 방법

단일 JSON을 겹치지 않는 이벤트가 포함된 별도의 JSON 파일로 분할하고 JSON 파일 이름 목록으로 파일 설명자 JSON을 업데이트하여 이벤트 피드를 샤딩할 수 있습니다.

권장: 각 파일 (또는 샤드)의 파일 이름을 피드 유형, 타임스탬프, 샤드 번호를 나타내도록 설정합니다. 샤드의 크기는 대략 같아야 하며 모든 샤드가 업로드되면 처리됩니다.

샤딩된 예

파일 설명자 - event.feeddata.v1_1728306001.filedescriptor.json

{
  "generation_timestamp": 1728306001,
  "name": "event.feeddata.v1",
  "data_file": [
    "event.feeddata.v1_1728306001_001.json",
    "event.feeddata.v1_1728306001_002.json"
  ]
}

샤드 0 - event.feeddata.v1_1728306001_001.json

{
  "data": [
    {
      "id": "event-1",
      ...
    },
    {
      "id": "event-2",
      ...
    }
  ]
}

샤드 1 - event.feeddata.v1_1728306001_002.json

{
  "data": [
    {
      "id": "event-3",
      ...
    },
    {
      "id": "event-4",
      ...
    }
  ]
}

파트너 분산 인벤토리의 샤드

파트너가 여러 시스템 또는 지역으로 분산된 인벤토리를 단일 피드로 통합하는 것은 쉽지 않을 수 있습니다. 샤딩은 각 샤드를 각 분산 시스템의 인벤토리 세트에 맞게 설정하여 조정 문제를 해결하는 데 사용할 수 있습니다.

예를 들어 파트너의 인벤토리가 두 개의 시스템에 있는 두 지역 (미국 및 EU 인벤토리)으로 분할되었다고 가정해 보겠습니다.

파트너는 각 피드를 2개의 파일 (또는 샤드)로 분할할 수 있습니다.

피드가 올바르게 처리되는지 확인하려면 다음 단계를 따르세요.

  1. 업로드 일정을 결정하고 일정에 따라 인벤토리의 각 인스턴스를 구성합니다.
  2. 각 인스턴스에 고유한 샤드 번호를 할당합니다 (예: 미국 = N, EU = N + 1). total_shards를 총 샤드 수로 설정합니다.
  3. 예약된 업로드 시간마다 generation_timestamp를 결정합니다. 모든 파일 이름이 이 두 필드에 동일한 값을 포함하도록 설정하고 설명자 파일에 예상되는 모든 파일 이름을 나열합니다.
    • generation_timestamp은 현재 또는 최근 과거여야 합니다(가급적 파트너의 읽기 데이터베이스 타임스탬프).
  4. 모든 샤드가 업로드되면 Google은 generation_timestampnonce를 사용하여 샤드를 그룹화합니다.

각 샤드가 파트너 인벤토리의 서로 다른 지역을 나타내고 generation_timestamp가 모든 샤드에서 동일한 경우에도 Google은 피드를 하나로 처리합니다. 단, 하루 중 다른 시간에 업로드될 수 있습니다.