Feed dosyalarını bölme

Envanterinize bağlı olarak, parçalara ayırma (veya feed'leri birden fazla dosyaya bölme) işlemi yapmanız gerekebilir.

Bölme işlemi ne zaman kullanılır?

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

    • Örnek: Oluşturulan müsaitlik durumu feed'i 1 GB'tır. Bu, 5'ten fazla ayrı dosyaya (veya parçaya) bölünmelidir.
  • İş ortağı envanteri sistemler ve/veya bölgelere dağıtıldığından envanterin uyumlulaştırılmasında zorluk yaşanır.

    • Örnek: İş ortağının ayrı sistemlerde bulunan ABD ve AB envanteri var. Feed, 2 dosya (veya parça) ile oluşturulabilir. ABD için 1 dosya, AB için ise aynı nonce ve generation_timestamp ile 1 dosya oluşturulur.

Genel kurallar

  • Her bir 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 kullanmanızı öneririz. Bu tutardan daha fazlasını gerektiren bir işletme gerekçeniz varsa daha fazla bilgi için lütfen destek ekibiyle iletişime geçin.
  • Tekil kayıtlar (ör. 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 parçaya gönderilmeleri gerekmez.
  • Daha iyi performans için verileriniz, tüm parçalara bölünmüş dosyaların boyutunun benzer olması amacıyla parçalar arasında eşit olarak bölünmelidir.

Feed'leri bölme

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

  • processing_instruction şu değere ayarlandı: PROCESS_AS_COMPLETE.
  • shard_number, feed'in mevcut parçasını temsil eder (0 ile total_shards - 1 arasında kesintisiz olarak)
  • total_shards, feed'in toplam bölüm sayısına (1'den başlayarak) ayarlanır.
  • nonce, aynı feed'in tüm parçalarında aynı ancak diğer feed'lerin değerlerinden farklı bir benzersiz tanımlayıcı olarak ayarlanmalıdır. nonce pozitif bir tam sayı (uint64) olmalıdır.
  • generation_timestamp, Unix ve EPOCH biçiminde zaman damgası 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çalı kullanılabilirlik feed'i örneği

0. Parça

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

1. Parça

{
  "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ça 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 bölme kullanma

İş ortaklarının birden fazla sistem ve/veya bölgede dağıtılan envanteri tek bir feed'de birleştirmesi zor olabilir. Her bir parçayı dağıtılmış sistemlerin envanter kümesiyle eşleşecek şekilde ayarlayarak birleştirme sorunlarını çözmek için parçalara ayırma işlemi kullanılabilir.

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

İş 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, AB için 1 bölüm
  • Kullanılabilirlik feed'i: ABD için 1, AB için 1 bölüm

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

  1. Bir yükleme planına karar verin ve her envanter örneğini planı izleyecek ş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 zamanında bir generation_timestamp ve nonce seçin. FeedMetadata içinde, tüm örnekleri bu iki alan için aynı değerleri içerecek şekilde ayarlayın.
    • generation_timestamp, mevcut veya yakın geçmiş olmalıdır (ideal olarak iş ortağının veritabanında okunma zaman damgası)
  4. Tüm parçalar yüklendikten sonra Google, parçaları generation_timestamp ve nonce ile gruplandırır.

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

Bölgeye göre ayrılmış kullanılabilirlik feed'i örneği

0. Kırıntı - ABD Envanteri

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

1. Kırıntı: 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"
        }
      ]
    }
  ]
}