Fragmenty plików danych

W zależności od asortymentu – fragmentacja (czyli podzielenie plików danych na kilka elementów) ).

Kiedy używać fragmentacji

  • Wielkość pliku danych przekracza 200 MB dla 1 pliku (po skompresowaniu gzip).

    • Przykład: wygenerowany plik danych o dostępności ma 1 GB. Powinien to być na fragmenty na więcej niż 5 osobnych plików (lub fragmentów).
  • Zasoby reklamowe partnera są rozłożone w różnych systemach lub regionach co skutkuje trudnościami z uzgodnieniem zasobów.

    • Przykład: partner ma zasoby reklamowe w USA i Unii Europejskiej, które znajdują się w oddzielnych lokalizacjach systemów uczących się. Kanał może być generowany z 2 plików (lub fragmentów), jednego dla Stanów Zjednoczonych i 1 dla Unii Europejskiej z tymi samymi zasadami nonce i generation_timestamp
.

Ogólne zasady

  • Żaden fragment nie może przekraczać 200 MB na 1 plik (po skompresowaniu gzip).
  • Zalecamy używanie nie więcej niż 20 fragmentów na kanał. Jeśli masz uzasadnienie biznesowe, wymaga więcej niż tej kwoty, skontaktuj się z obsługą klienta, aby uzyskać dalsze instrukcje.
  • Poszczególne rekordy (na przykład 1 obiekt Merchant) muszą być wysłane w jednym fragmencie, nie można ich podzielić na wiele fragmentów. Nie trzeba ich jednak wysyłać we fragmencie z tym samym atrybutem shard_number dla przyszłych plików danych.
  • Aby uzyskać lepszą skuteczność, dane powinny być równomiernie podzielone między na fragmenty, aby wszystkie pofragmentowane pliki miały podobny rozmiar.
.

Jak dzielić kanały na fragmenty

Dla każdego pliku (lub fragmentu) ustaw FeedMetadata na :

  • processing_instructionustaw na PROCESS_AS_COMPLETE
  • shard_number jest ustawione na bieżący fragment kanału (od 0 do total_shards – 1 bez nieciągłości)
  • total_shards jest ustawiona na łączną liczbę fragmentów w kanału (od 1).
  • W polu nonce ustawiono unikalny identyfikator, który jest taki sam we wszystkich fragmentach tego samego kanału, ale różniących się od wartości innych plików danych. nonce musi być dodatnią liczbą całkowitą (uint64).
  • generation_timestamp to sygnatura czasowa w systemach Unix i EPOCH . Powinny być takie same we wszystkich fragmentach kanału.

Zalecane: dla każdego pliku (lub fragmentu) ustaw odpowiednią nazwę pliku typ kanału, sygnatura czasowa, numer fragmentu i łączna liczba fragmenty. Fragmenty powinny mieć mniej więcej taki sam rozmiar i są przetwarzane raz fragmenty zostały przesłane.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Przykład pliku danych dostępności w 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"
        }
      ]
    }
  ]
}

Używanie fragmentacji w przypadku zasobów reklamowych rozproszonych przez partnera

Partnerzy mogą mieć problem z konsolidacją rozproszonych zasobów reklamowych w wielu systemach i regionach w jednym pliku danych. Fragmentacja może być używane do rozwiązywania wyzwań uzgodnień przez ustawienie każdego fragmentu tak, aby był dopasowany do do zestawu zasobów reklamowych rozproszonego systemu rozproszonego.

Załóżmy na przykład, że zasoby reklamowe partnera są podzielone na 2 regiony (USA i UE) ), które funkcjonują w 2 oddzielnych systemach.

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

  • Plik danych sprzedawców: 1 fragment dla USA, 1 dla UE
  • Plik danych o usługach: 1 fragment dla USA, 1 dla UE
  • Kanał dostępności: 1 fragment dla USA, 1 dla UE

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

  1. Ustal harmonogram przesyłania i skonfiguruj każde wystąpienie zasobów reklamowych, aby przestrzegaj harmonogramu.
  2. Przypisz unikalne numery fragmentów do każdej instancji (np. US = N, EU = N + 1). Ustaw total_shards na łączną liczbę fragmentów.
  3. Przy każdym zaplanowanym przesyłaniu wybierz generation_timestamp i nonce. W FeedMetadata, ustaw wszystkie instancje tak, aby przechowywać te same wartości dla tych dwóch pól.
    • Pole generation_timestamp powinno być aktualne lub z przeszłości (najlepiej będzie to sygnatura czasowa partnera do odczytu w bazie danych)
  4. Po przesłaniu wszystkich fragmentów Google grupuje je według generation_timestamp i nonce.
.

Google przetworzy kanał jako jeden, mimo że każdy fragment reprezentuje z różnych regionów zasobów reklamowych partnera i można je przesłać o innej porze dnia, dopóki generation_timestamp jest taka sama we wszystkich fragmentach.

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

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