Fragmenty plików danych (starsza wersja)

W zależności od zasobów reklamowych konieczne może być fragmenty (lub podzielenie plików danych na kilka plików).

Kiedy używać fragmentacji

  • Rozmiar pliku danych przekracza 200 MB w przypadku 1 pliku (po kompresji gzip).

    • Przykład: wygenerowany plik danych o dostępności ma rozmiar 1 GB. Należy go podzielić na 5 lub więcej oddzielnych plików (lub fragmentów).
  • Zasoby reklamowe partnerów są dystrybuowane w systemach lub regionach, co powoduje problemy z uzgodnieniem zasobów.

    • Przykład: partner ma zasoby reklamowe ze Stanów Zjednoczonych i Unii Europejskiej, które znajdują się w oddzielnych systemach. Plik danych można wygenerować z 2 plików (lub fragmentów), 1 dla Stanów Zjednoczonych i 1 dla Unii Europejskiej z tymi samymi właściwościami nonce i generation_timestamp.

Ogólne zasady

  • Po kompresji gzip żaden fragment nie może przekraczać 200 MB na 1 plik.
  • Zalecamy używanie nie więcej niż 20 fragmentów na kanał. Jeśli masz uzasadnienie biznesowe, które wymaga więcej niż ta kwota, skontaktuj się z zespołem pomocy, aby uzyskać dalsze instrukcje.
  • Poszczególne rekordy (na przykład 1 obiekt Merchant) muszą być wysłane w 1 fragmentie; nie można ich dzielić między wiele fragmentów. Nie trzeba ich jednak wysyłać we fragmencie z tą samą wartością shard_number w przypadku przyszłych plików danych.
  • Aby uzyskać lepszą wydajność, dane powinny być dzielone po równo między fragmenty, tak aby rozmiar wszystkich we fragmentach plików był podobny.

Jak dzielić pliki danych na fragmenty

Dla każdego pliku (lub fragmentu) ustaw FeedMetadata na tę wartość:

  • processing_instructionustawiony na PROCESS_AS_COMPLETE.
  • shard_number ustawiono na bieżący fragment kanału (od 0 do total_shards – 1 bez ciągłości)
  • total_shards to łączna liczba fragmentów pliku danych (od 1).
  • nonce ma unikalny identyfikator, który jest taki sam we wszystkich fragmentach tego samego pliku danych, ale różni się od wartości innych plików danych.
  • generation_timestamp to sygnatura czasowa w formacie unix i EPOCH. Powinno być identyczne we wszystkich fragmentach kanału.

Zalecane: dla każdego pliku (lub fragmentu) wpisz nazwę pliku, aby wskazać jego typ, sygnaturę czasową, numer fragmentu i łączną liczbę fragmentów. Fragmenty powinny mieć mniej więcej identyczny rozmiar i są przetwarzane po przesłaniu wszystkich fragmentów.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Przykład pliku danych dostępności we fragmentach

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"
        }
      ]
    }
  ]
}

Korzystanie z fragmentacji w przypadku zasobów reklamowych dystrybuowanych przez partnerów

Połączenie zasobów reklamowych z wielu systemów i regionów w jednym pliku danych może być trudne dla partnerów. Do rozwiązywania problemów z uzgodnieniem można użyć fragmentacji, ustawiając każdy fragment tak, aby pasował do zbioru zasobów reklamowych każdego systemu rozproszonego.

Załóżmy na przykład, że zasoby reklamowe partnera są podzielone na 2 regiony (zasoby reklamowe w Stanach Zjednoczonych i Unii Europejskiej), które znajdują się w 2 osobnych systemach.

Partner może podzielić każdy plik danych na 2 pliki (lub fragmenty):

  • Plik danych sprzedawców: 1 fragment dla Stanów Zjednoczonych, 1 fragment dla UE
  • Plik danych usług: 1 fragment dla Stanów Zjednoczonych, 1 fragment dla UE
  • Plik danych o dostępności: 1 fragment dla Stanów Zjednoczonych, 1 fragment dla UE

Aby mieć pewność, że pliki danych zostaną prawidłowo przetworzone:

  1. Ustal harmonogram przesyłania i skonfiguruj zgodnie z nim poszczególne instancje zasobów reklamowych.
  2. Przypisz unikalne numery fragmentów dla każdej instancji (np. US = N, UE = N + 1). Ustaw w polu total_shards łączną liczbę fragmentów.
  3. W przypadku każdego zaplanowanego czasu przesyłania określ generation_timestamp i nonce. W FeedMetadata skonfiguruj wszystkie instancje tak, aby miały te same wartości w tych dwóch polach.
    • Wartość generation_timestamp powinna być aktualna lub niedawna (najlepiej, aby była to sygnatura czasowa odczytu bazy danych partnera)
  4. Po przesłaniu wszystkich fragmentów Google grupuje je za pomocą generation_timestamp i nonce.

Google przetworzy plik danych jako jeden, mimo że każdy fragment reprezentuje inny region zasobów reklamowych partnera. Będzie można go przesłać o innej porze dnia, pod warunkiem że generation_timestamp jest taki sam we wszystkich fragmentach.

Przykładowy plik danych dostępności podzielony według regionu

Fragment 0 – zasoby reklamowe z USA

{
  "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"
        }
      ]
    }
  ]
}

Fragment 1 – zasoby reklamowe 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"
        }
      ]
    }
  ]
}