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
igeneration_timestamp
- 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
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 atrybutemshard_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_instruction
ustaw naPROCESS_AS_COMPLETE
shard_number
jest ustawione na bieżący fragment kanału (od 0 dototal_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:
- Ustal harmonogram przesyłania i skonfiguruj każde wystąpienie zasobów reklamowych, aby przestrzegaj harmonogramu.
- Przypisz unikalne numery fragmentów do każdej instancji (np. US = N, EU = N + 1).
Ustaw
total_shards
na łączną liczbę fragmentów. - Przy każdym zaplanowanym przesyłaniu wybierz
generation_timestamp
inonce
. WFeedMetadata
, 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)
- Pole
- Po przesłaniu wszystkich fragmentów Google grupuje je według
generation_timestamp
inonce
.
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" } ] } ] }