Pliki danych do fragmentowania

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

Kiedy używać fragmentowania

  • Plik danych przekracza 200 MB w przypadku 1 pliku (po kompresji plików gzip).

    • Przykład: wygenerowany plik danych o dostępności to 1 GB. Powinien być on podzielony na co najmniej 5 osobnych plików (lub fragmentów).
  • Zasoby reklamowe partnera są rozproszone we wszystkich systemach lub regionach, co utrudnia uzgodnienie tych zasobów.

    • Przykład: partner ma zasoby reklamowe ze Stanów Zjednoczonych i UE, które znajdują się w osobnych systemach. Plik danych może być wygenerowany na podstawie 2 plików (lub fragmentów), 1 dla Stanów Zjednoczonych i 1 dla Unii Europejskiej o tych samych wartościach nonce i generation_timestamp.

Ogólne zasady

  • Rozmiar jednego fragmentu nie może przekraczać 200 MB w przypadku 1 pliku (po kompresji plików gzip).
  • Zalecamy używanie nie więcej niż 20 fragmentów na kanał. Jeśli masz uzasadnienie biznesowe, które wymaga więcej, skontaktuj się z zespołem pomocy.
  • Poszczególne rekordy (np. 1 obiekt Merchant) muszą być wysyłane w 1 fragmentie. Nie można ich podzielić na wiele fragmentów. Nie trzeba ich jednak wysyłać w fragmentie z tym samym parametrem shard_number na potrzeby przyszłych plików danych.
  • Aby uzyskać lepszą wydajność, dane powinny być rozdzielane równomiernie między fragmenty, tak aby wszystkie pliki podzielone na fragmenty były podobne.

Jak podzielić kanały na segmenty

Dla każdego pliku (lub fragmentu) ustaw właściwość FeedMetadata w ten sposób:

  • processing_instructionustawiony na PROCESS_AS_COMPLETE.
  • Parametr shard_number został ustawiony na bieżący fragment kanału (od 0 do total_shards – 1 bez przerw)
  • Parametr total_shards został ustawiony na łączną liczbę fragmentów pliku danych (zaczyna się 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.
  • generation_timestamp to sygnatura czasowa w formacie Unicode i EPOCH. Powinien być taki sam we wszystkich fragmentach pliku danych.

Zalecane: w przypadku każdego pliku (lub fragmentu) ustaw jego nazwę tak, aby wskazywała typ pliku danych, sygnaturę czasową, numer fragmentu i łączną liczbę fragmentów. Fragmenty powinny mieć mniej więcej taki sam rozmiar i być przetwarzane po przesłaniu wszystkich fragmentów.

  • Example: „availability_feed_1574117613_001_of_002.json.gz”

Przykład pliku danych z fragmentacją dostępności

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

Fragmentacja w przypadku zasobów reklamowych rozpowszechnianych przez partnera

Partnerzy mogą skonsolidować zasoby reklamowe w wielu systemach i regionach w jednym pliku danych. Fragmentacja może służyć do rozwiązywania problemów z uzgodnieniami przez ustawienie każdego fragmentu do dopasowania do zestawu zasobów reklamowych każdego rozproszonego systemu.

Załóżmy na przykład, że zasoby reklamowe partnera są podzielone na 2 regiony (zasoby reklamowe w Stanach Zjednoczonych i UE), które należą do 2 osobnych systemów.

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

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

Aby mieć pewność, że pliki danych będą prawidłowo przetwarzane:

  1. Wybierz harmonogram przesyłania i skonfiguruj poszczególne instancje zasobów reklamowych zgodnie z harmonogramem.
  2. Przypisz unikalne numery fragmentów dla każdej instancji (np. US = N, EU = N + 1). Ustaw ciąg total_shards na łączną liczbę fragmentów.
  3. O każdym zaplanowanym terminie przesłania określ funkcje generation_timestamp i nonce. W FeedMetadata ustaw wszystkie instancje, aby w obu tych polach miały takie same wartości.
    • Właściwość generation_timestamp powinna być bieżącą lub najnowszą datą (najlepiej sygnaturą czasową odczytanej bazy danych partnera)
  4. Po przesłaniu wszystkich fragmentów Google grupuje je za pomocą właściwości generation_timestamp i nonce.

Google przetwarza plik danych jako jeden, mimo że każdy fragment reprezentuje inny region zasobów reklamowych partnera i może być przesyłany o innej porze dnia, o ile generation_timestamp jest taki sam we wszystkich fragmentach.

Przykład pliku danych z fragmentacją dostępności według regionu

Fragment 0 – USA – zasoby reklamowe

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