Parça feed dosyaları (eski)

Envanterinize bağlı olarak parçalama (veya feed'leri birden fazla dosyaya bölme) gerekebilir.

Parçalama ne zaman kullanılır?

  • Feed, 1 dosya için 200 MB'ı aşıyor (gzip sıkıştırmasından sonra).

    • Örnek: Oluşturulan stok durumu feed'i 1 GB. Bu, 5 veya daha fazla ayrı dosyaya (veya parçaya) bölünmelidir.
  • İş ortağı envanteri, sistemlere ve/veya bölgelere dağıtıldığından envanterin mutabakatı zorlaşır.

    • Örnek: İş ortağının ayrı sistemlerde bulunan ABD ve AB envanteri var. Feed, 2 dosya (veya parça) ile oluşturulabilir. Bunlardan biri ABD, diğeri ise AB için olup aynı nonce ve generation_timestamp değerlerini içerir.

Genel kurallar

  • Her parça, 1 dosya için 200 MB'ı aşamaz (gzip sıkıştırmasından sonra).
  • Feed başına en fazla 20 parça olmasını öneririz. Bu miktardan daha fazlasını gerektiren bir iş gerekçeniz varsa lütfen daha fazla bilgi için destek ekibiyle iletişime geçin.
  • Tek tek kayıtlar (örneğin, bir Merchant nesnesi) tek bir parçada gönderilmelidir. Birden fazla parçaya bölünemez. Ancak gelecekteki feed'ler için aynı shard_number ile gönderilmeleri gerekmez.
  • Daha iyi performans için verileriniz parçalar arasında eşit şekilde bölünmelidir. Böylece, tüm parçalanmış dosyalar benzer boyutta olur.

Feed'leri parçalama

Her dosya (veya parça) için FeedMetadata değerini aşağıdakilere ayarlayın:

  • processing_instruction değeri PROCESS_AS_COMPLETE olarak ayarlandı.
  • shard_number, feed'in geçerli parçası olarak ayarlanır. (0'dan başlayarak total_shards - 1'e kadar kesintisiz)
  • total_shards feed'i için toplam parça sayısına (1'den başlayarak) ayarlanır.
  • nonce Aynı feed'in tüm parçalarında aynı olan ancak diğer feed'lerin değerinden farklı olan benzersiz bir tanımlayıcıya ayarlanmalıdır.
  • generation_timestamp, Unix ve EPOCH biçimindeki zaman damgasıdır. Bu değer, feed'in tüm parçalarında aynı olmalıdır.

Önerilen: Her dosya (veya parça) için dosya adını, feed türünü, zaman damgasını, parça numarasını ve toplam parça sayısını belirtecek şekilde ayarlayın. Parçalar yaklaşık olarak eşit boyutta olmalı ve tüm parçalar yüklendikten sonra işlenmelidir.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Parçalanmış stok durumu feed'i örneği

Parça 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"
        }
      ]
    }
  ]
}

Parça 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"
        }
      ]
    }
  ]
}

Parçalama 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"
        }
      ]
    }
  ]
}

İş ortağı tarafından dağıtılan envanter için parçalama kullanma

İş ortaklarının, birden fazla sisteme ve/veya bölgeye dağıtılmış envanteri tek bir feed'de birleştirmesi zor olabilir. Parçalama, her bir parçayı her dağıtılmış sistemin envanter kümesiyle eşleşecek şekilde ayarlayarak mutabakat sorunlarını çözmek için kullanılabilir.

Örneğin, bir iş ortağının envanterinin 2 ayrı sistemde bulunan 2 bölgeye (ABD ve AB envanteri) ayrıldığını varsayalım.

İş ortağı, her feed'i 2 dosyaya (veya parçaya) bölebilir:

  • Satıcı feed'i: ABD için 1 parça, AB için 1 parça
  • Hizmetler feed'i: ABD için 1 parça, AB için 1 parça
  • Stok durumu feed'i: ABD için 1 parça, AB için 1 parça

Feed'lerin düzgün şekilde işlendiğinden emin olmak için aşağıdaki adımları uygulayın:

  1. Yükleme programına karar verin ve envanterin her örneğini programa uyacak şekilde yapılandırın.
  2. Her örnek için benzersiz parça numaraları atayın (ör. ABD = N, AB = N + 1). total_shards değerini toplam parça sayısına ayarlayın.
  3. Planlanan her yükleme saatinde bir generation_timestamp ve nonce seçin. FeedMetadata bölümünde, tüm örnekleri bu iki alan için aynı değerleri içerecek şekilde ayarlayın.
    • generation_timestamp, geçerli veya yakın geçmiş olmalıdır (ideal olarak, iş ortağının okuma zamanı veritabanı zaman damgası).
  4. Tüm parçalar yüklendikten sonra Google, parçaları generation_timestamp ve nonce aracılığıyla gruplandırır.

Her parça, iş ortağının envanterinin farklı bir bölgesini temsil etse ve generation_timestamp tüm parçalarda aynı olduğu sürece günün farklı saatlerinde yüklenebilse de Google, feed'i tek bir feed olarak işler.

Bölgeye göre parçalanmış stok durumu feed'i örneği

Shard 0 - US Inventory

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

Shard 1 - AB Envanteri

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