인벤토리에 따라 샤딩 (또는 피드를 여러 파일로 분할)이 필요할 수 있습니다.
샤딩을 사용해야 하는 경우
피드가 1개 파일의 경우 200MB를 초과합니다 (gzip 압축 후).
- 예: 생성된 가용성 피드가 1GB입니다. 5개 이상의 별도 파일 (또는 샤드)로 샤딩해야 합니다.
파트너 인벤토리가 시스템 또는 지역에 분산되어 인벤토리를 조정하기가 어렵습니다.
- 예: 파트너가 별도의 시스템에 있는 미국 및 EU 인벤토리를 보유하고 있습니다. 피드는 미국용 1개와 EU용 1개 등 2개의 파일 (또는 샤드)로 생성될 수 있으며, 이 파일은 동일한
nonce및generation_timestamp를 사용합니다.
- 예: 파트너가 별도의 시스템에 있는 미국 및 EU 인벤토리를 보유하고 있습니다. 피드는 미국용 1개와 EU용 1개 등 2개의 파일 (또는 샤드)로 생성될 수 있으며, 이 파일은 동일한
일반 규칙
- 각 샤드는 파일 1개당 200MB를 초과할 수 없습니다 (gzip 압축 후).
- 피드당 샤드는 20개 이하로 사용하는 것이 좋습니다. 이 금액을 초과하는 금액이 필요한 비즈니스 근거가 있는 경우 지원팀에 문의하여 추가 안내를 받으세요.
-
개별 레코드 (예: 하나의
Merchant객체)는 하나의 샤드로 전송해야 하며 여러 샤드로 분할할 수 없습니다. 하지만 향후 피드에서 동일한shard_number를 사용하여 샤드로 전송하지 않아도 됩니다. - 성능을 향상하려면 데이터를 샤드 간에 균등하게 분할하여 모든 샤드 파일의 크기를 비슷하게 만듭니다.
피드를 샤딩하는 방법
각 파일 (또는 샤드)에 대해 FeedMetadata를 다음과 같이 설정합니다.
processing_instruction이PROCESS_AS_COMPLETE로 설정됩니다.shard_number이 피드의 현재 샤드로 설정됩니다(0부터total_shards- 1까지 불연속 없이).total_shards은 피드의 총 샤드 수로 설정됩니다 (1부터 시작).nonce는 동일한 피드의 모든 샤드에서 동일하지만 다른 피드의 값과는 다른 고유 식별자로 설정됩니다.generation_timestamp은 유닉스 및 EPOCH 형식의 타임스탬프입니다. 피드의 모든 샤드에서 동일해야 합니다.
권장: 각 파일 (또는 샤드)의 파일 이름을 설정하여 피드 유형, 타임스탬프, 샤드 번호, 총 샤드 수를 나타냅니다. 샤드는 크기가 거의 같아야 하며 모든 샤드가 업로드되면 한 번 처리됩니다.
Example:“availability_feed_1574117613_001_of_002.json.gz”
샤딩된 사용 가능 여부 피드 예시
샤드 0
{
"metadata": {
"processing_instruction": "PROCESS_AS_COMPLETE",
"shard_number": 0,
"total_shards": 3,
"nonce": "111111",
"generation_timestamp": 1524606581
},
"service_availability": [
{
"availability": [
{
"spots_total": 1,
"spots_open": 1,
"duration_sec": 3600,
"service_id": "1000",
"start_sec": 1577275200,
"merchant_id": "merchant1",
"confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
}
]
}
]
}샤드 1
{
"metadata": {
"processing_instruction": "PROCESS_AS_COMPLETE",
"shard_number": 1,
"total_shards": 3,
"nonce": "111111",
"generation_timestamp": 1524606581
},
"service_availability": [
{
"availability": [
{
"spots_total": 1,
"spots_open": 1,
"duration_sec": 3600,
"service_id": "1000",
"start_sec": 1577620800,
"merchant_id": "merchant2",
"confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
}
]
}
]
}샤드 2
{
"metadata": {
"processing_instruction": "PROCESS_AS_COMPLETE",
"shard_number": 2,
"total_shards": 3,
"nonce": "111111",
"generation_timestamp": 1524606581
},
"service_availability": [
{
"availability": [
{
"spots_total": 1,
"spots_open": 1,
"duration_sec": 3600,
"service_id": "1000",
"start_sec": 1576670400,
"merchant_id": "merchant3",
"confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
}
]
}
]
}파트너 분산 인벤토리에 샤딩 사용
파트너가 여러 시스템 또는 지역에 분산된 인벤토리를 단일 피드로 통합하기 어려울 수 있습니다. 샤딩은 각 샤드를 각 분산 시스템의 인벤토리 세트와 일치하도록 설정하여 조정 문제를 해결하는 데 사용할 수 있습니다.
예를 들어 파트너의 인벤토리가 2개의 별도 시스템에 있는 2개의 리전 (미국 및 EU 인벤토리)으로 구분된다고 가정해 보겠습니다.
파트너는 각 피드를 2개의 파일 (또는 샤드)로 나눌 수 있습니다.
- 판매자 피드: 미국용 샤드 1개, EU용 샤드 1개
- 서비스 피드: 미국용 샤드 1개, EU용 샤드 1개
- 이용 가능 여부 피드: 미국용 샤드 1개, EU용 샤드 1개
피드가 올바르게 처리되도록 하려면 다음 단계를 따르세요.
- 업로드 일정을 정하고 각 인벤토리 인스턴스가 일정을 따르도록 구성합니다.
- 각 인스턴스에 고유한 샤드 번호를 할당합니다 (예: 미국 = N, EU = N + 1).
total_shards를 총 샤드 수로 설정합니다. - 예약된 각 업로드 시간에
generation_timestamp및nonce을 결정합니다.FeedMetadata에서 모든 인스턴스가 이 두 필드에 동일한 값을 갖도록 설정합니다.generation_timestamp은 현재 또는 최근 과거여야 합니다(이상적으로는 파트너의 읽기 시점 데이터베이스 타임스탬프).
- 모든 샤드가 업로드되면 Google은
generation_timestamp및nonce를 통해 샤드를 그룹화합니다.
각 샤드가 파트너 인벤토리의 다른 지역을 나타내고 모든 샤드에서 generation_timestamp가 동일한 경우 하루 중 다른 시간에 업로드될 수 있지만 Google에서는 피드를 하나로 처리합니다.
지역별 샤딩된 가용성 피드 예시
샤드 0 - 미국 인벤토리
{
"metadata": {
"processing_instruction": "PROCESS_AS_COMPLETE",
"shard_number": 0,
"total_shards": 2,
"nonce": "111111",
"generation_timestamp": 1524606581
},
"service_availability": [
{
"availability": [
{
"spots_total": 1,
"spots_open": 1,
"duration_sec": 3600,
"service_id": "1000",
"start_sec": 1577275200,
"merchant_id": "US_merchant_1",
"confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
}
]
}
]
}샤드 1 - EU 인벤토리
{
"metadata": {
"processing_instruction": "PROCESS_AS_COMPLETE",
"shard_number": 1,
"total_shards": 2,
"nonce": "111111",
"generation_timestamp": 1524606581
},
"service_availability": [
{
"availability": [
{
"spots_total": 1,
"spots_open": 1,
"duration_sec": 3600,
"service_id": "1000",
"start_sec": 1577620800,
"merchant_id": "EU_merchant_1",
"confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
}
]
}
]
}