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
igeneration_timestamp
.
- 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
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 parametremshard_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_instruction
ustawiony naPROCESS_AS_COMPLETE
.- Parametr
shard_number
został ustawiony na bieżący fragment kanału (od 0 dototal_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:
- Wybierz harmonogram przesyłania i skonfiguruj poszczególne instancje zasobów reklamowych zgodnie z harmonogramem.
- 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. - O każdym zaplanowanym terminie przesłania określ funkcje
generation_timestamp
inonce
. WFeedMetadata
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)
- Właściwość
- Po przesłaniu wszystkich fragmentów Google grupuje je za pomocą właściwości
generation_timestamp
inonce
.
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" } ] } ] }