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. Powinien być podzielony na co najmniej 5 oddzielnych plików (lub fragmentów).
Zasoby reklamowe partnera są rozproszone w różnych systemach lub regionach, co utrudnia ich uzgadnianie.
- Przykład: partner ma zasoby reklamowe w Stanach Zjednoczonych i Unii Europejskiej, które znajdują się w różnych systemach. Plik danych może być wygenerowany z 2 plikami (lub fragmentami), 1 dla USA i 1 dla UE z tymi samymi wartościami
nonce
igeneration_timestamp
.
- Przykład: partner ma zasoby reklamowe w Stanach Zjednoczonych i Unii Europejskiej, które znajdują się w różnych systemach. Plik danych może być wygenerowany z 2 plikami (lub fragmentami), 1 dla USA 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_number
w 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:
processing_instruction
ustawiono naPROCESS_AS_COMPLETE
.shard_number
ustawiony na bieżący fragment pliku danych (od 0 dototal_shards
- 1 bez przerw)total_shards
ustaw na łączną liczbę fragmentów w źródle danych (zaczynając od 1).nonce
ustawiony 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.nonce
musi być dodatnią liczbą całkowitą (uint64
).generation_timestamp
to 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 wielu częściach
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:
- Określ 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_shards
na łączną liczbę fragmentów. - W przypadku każdego zaplanowanego przesyłania zdecyduj, jakie będą wartości parametrów
generation_timestamp
inonce
. W sekcjiFeedMetadata
ustaw wszystkie wystąpienia tak, aby zawierały te same wartości w tych 2 polach.generation_timestamp
powinna być bieżąca lub z niedawnej przeszłości (najlepiej odpowiadająca sygnaturze czasu odczytu w bazie danych partnera).
- Po przesłaniu wszystkich fragmentów Google grupował je za pomocą funkcji
generation_timestamp
inonce
.
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 generation_timestamp
jest taki sam 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" } ] } ] }