W zależności od asortymentu może być konieczne podzielenie plików danych na kilka plików.
Kiedy używać podziału na fragmenty
- Plik danych przekracza 200 MB (po skompresowaniu gzipem). - Przykład: wygenerowany plik danych o dostępności ma rozmiar 1 GB. Powinny one zostać podzielone na co najmniej 5 oddzielnych plików (lub fragmentów).
 
- Zasoby reklamowe partnera są rozproszone między systemy lub regiony, co utrudnia ich uzgadnianie. - Przykład: partner ma zasoby reklamowe w Stanach Zjednoczonych i Europie, które znajdują się w różnych systemach. Plik danych może być generowany z 2 plikami (lub fragmentami), 1 dla Stanów Zjednoczonych i 1 dla UE z tymi samymi wartościami nonceigeneration_timestamp.
 
- Przykład: partner ma zasoby reklamowe w Stanach Zjednoczonych i Europie, które znajdują się w różnych systemach. Plik danych może być generowany z 2 plikami (lub fragmentami), 1 dla Stanów Zjednoczonych i 1 dla UE z tymi samymi wartościami 
Ogólne zasady
- Każdy fragment nie może przekraczać 200 MB na 1 plik (po kompresji gzip).
- Zalecamy stosowanie nie więcej niż 20 fragmentów na kanał. Jeśli masz uzasadnienie biznesowe, które wymaga większej kwoty, skontaktuj się z zespołem pomocy, aby uzyskać dalsze instrukcje.
- 
    Poszczególne rekordy (np. jeden obiekt Merchant) muszą być wysyłane w ramach jednego fragmentu. Nie można ich dzielić na kilka fragmentów. Nie muszą jednak być wysyłane w ramach fragmentu z tym samymshard_numberw przypadku kolejnych plików danych.
- Aby uzyskać lepszą wydajność, dane powinny być podzielone równomiernie na fragmenty, tak aby wszystkie podzielone pliki były podobne pod względem rozmiaru.
Jak dzielić pliki danych
W przypadku każdego pliku (lub fragmentu) ustaw wartość parametru FeedMetadata na:
- Ustawiono processing_instructionnaPROCESS_AS_COMPLETE.
- shard_numberustawiony na bieżący fragment pliku danych (od 0 do- total_shards- 1 bez przerw)
- total_shardsustawiona na łączną liczbę fragmentów w źródle danych (zaczynając od 1).
- nonceustawiony na unikalny identyfikator, który jest taki sam dla wszystkich fragmentów tego samego pliku danych, ale różni się od wartości innych plików danych.- noncemusi być dodatnią liczbą całkowitą (- uint64).
- generation_timestampto sygnatura czasowa w formacie Unix i EPOCH. Powinien być taki sam we wszystkich częściach pliku danych.
Zalecane: w przypadku każdego pliku (lub fragmentu) ustaw nazwę pliku tak, aby wskazywała typ pliku danych, sygnaturę czasową, numer fragmentu i łączną liczbę fragmentów. Fragmenty powinny być mniej więcej tej samej wielkości i przetwarzane po przesłaniu wszystkich fragmentów.
- Example:“availability_feed_1574117613_001_of_002.json.gz”
Przykład pliku danych z dostępnością w wersji podzielonej na fragmenty
Fragment 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"
        }
      ]
    }
  ]
}Fragment 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"
        }
      ]
    }
  ]
}Fragment 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"
        }
      ]
    }
  ]
}Używanie podziału na segmenty w przypadku zasobów reklamowych rozproszonych między partnerów
Partnerzy mogą mieć problemy ze skonsolidowaniem zasobów reklamowych rozproszonych w wielu systemach lub regionach w jednym pliku danych. Podział na fragmenty może być używany do rozwiązywania problemów z zgodnością przez dopasowywanie każdego fragmentu do każdego zbioru zasobów reklamowych rozproszonego systemu.
Załóżmy na przykład, że zasoby reklamowe partnera są podzielone na 2 regiony (zasoby reklamowe w USA i w UE), które znajdują się w 2 oddzielnych systemach.
Partner może podzielić każdy plik danych na 2 pliki (lub fragmenty):
- Plik danych sprzedawcy: 1 część dla Stanów Zjednoczonych, 1 część dla UE
- Plik danych usług: 1 fragment dla Stanów Zjednoczonych, 1 fragment dla UE
- Plik danych o dostępności: 1 część dla Stanów Zjednoczonych, 1 część dla UE
Aby mieć pewność, że pliki danych są prawidłowo przetwarzane:
- Ustal harmonogram przesyłania i skonfiguruj każdą instancję zasobu reklamowego, aby przestrzegała harmonogramu.
- Przypisz unikalne numery fragmentów do każdej instancji (np. US = N, EU = N + 1).
    Ustaw wartość parametru total_shardsna łączną liczbę fragmentów.
- W przypadku każdego zaplanowanego przesyłania zdecyduj, jakie wartości przyjmą odpowiednio generation_timestampinonce. W sekcjiFeedMetadataustaw wszystkie wystąpienia tak, aby miały te same wartości w tych 2 polach.- generation_timestamppowinna być bieżąca lub z niedawnej przeszłości (najlepiej odpowiadająca sygnaturze czasowej odczytu z bazy danych partnera).
 
- Po przesłaniu wszystkich fragmentów Google grupowanie ich za pomocą funkcji generation_timestampinonce.
Google przetworzy plik danych jako jeden, mimo że każdy fragment reprezentuje inny region asortymentu partnera i może zostać przesłany o innej porze dnia, o ile wartość generation_timestamp jest taka sama we wszystkich fragmentach.
Przykład pliku danych z podziałem na regiony
Ułamek 0 – zasoby reklamowe w Stanach Zjednoczonych
{
  "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"
        }
      ]
    }
  ]
}Ułamek 1 – zasoby reklamowe w UE
{
  "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"
        }
      ]
    }
  ]
}