Parçalı feed dosyası

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ırma işleminden sonra).

    • Örnek: Oluşturulan stok durumu feed'i 1 GB'tır. Bu, 5'ten fazla ayrı dosyaya (veya parçaya) parçalanır.
  • İş ortağı envanteri, sistemler ve/veya bölgeler arasında dağıtılır. Bu sayede, envanter mutabakatında zorluk yaşarsınız.

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

Genel kurallar

  • Her bir parça, 1 dosya için 200 MB'ı aşamaz (gzip sıkıştırma işleminden sonra).
  • Özet akışı başına en fazla 20 parça kullanmanızı öneririz. Bir işletme gerekçeniz bu tutarın üzerinde olmalıdır. Daha fazla talimat için lütfen destek ekibiyle iletişime geçin.
  • Tek tek parçalar (örneğin, bir Merchant nesnesi) tek bir parçada gönderilmelidir. Birden fazla parçaya bölünemezler. Ancak bu API'lerin sonraki feed'ler için parçada aynı shard_number ile gönderilmesi gerekmez.
  • Daha iyi performans için verilerinizin parçalarına eşit olarak bölünmesi gerekir. Böylece, tüm kırık dosyaların boyutu benzer olur.

Feed'leri parçalama

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

  • processing_instructionPROCESS_AS_COMPLETE olarak ayarlandı.
  • shard_number, feed'in mevcut kırığına (0'dan total_shards - 1'den itibaren aralıksız olarak) ayarlandı
  • total_shards, feed için toplam parça sayısına (1'den başlayarak) ayarlandı.
  • nonce, aynı feed'in tüm parçalarında aynı ancak diğer feed'lerin değerinden farklı olan benzersiz bir tanımlayıcı olarak ayarlandı.
  • generation_timestamp, unix ve EPOCH biçimindeki zaman damgasıdır. Bu, feed'in tüm parçalarında aynı olmalıdır.

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

  • Example: "availability_feed_1574117613_001_of_002.json.gz"

Parçalı Stok Durumu feed örneği

Kırık 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"
        }
      ]
    }
  ]
}

1. Kırık

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

2. Kırık

{
  "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çalamayı kullanma

İş ortaklarının birden fazla sistem ve/veya bölge genelinde dağıtılan envanteri tek bir feed'de birleştirmesi zor olabilir. Parçalama, her bir kırığı dağıtılan her sistemin envanter grubuyla eşleşecek şekilde ayarlayarak mutabakat zorluklarını çözmek için kullanılabilir.

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

İş ortağı, her feed'i 2 dosyaya (veya parçaya) ayırabilir:

  • 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
  • Kullanılabilirlik feed'i: ABD için 1 parça, AB için 1 parça

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

  1. Yükleme planına karar verin ve her envanter örneğini bu planı destekleyecek şekilde yapılandırın.
  2. Her örnek için benzersiz parça numaraları atayın (ör. US = N, EU = N + 1). total_shards değerini toplam kırık 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 barındıracak şekilde ayarlayın.
    • generation_timestamp güncel veya kısa süre önce geçmiş olmalıdır (ideal olarak iş ortağının okuma veritabanı zaman damgası)
  4. Tüm kırıklar yüklendikten sonra Google, kırıkları generation_timestamp ve nonce aracılığıyla gruplandırır.

Her bir kırık, iş ortağının envanterinin farklı bir bölgesini temsil etse ve generation_timestamp tüm kırıklarda aynı olduğu sürece Google, feed'i günün farklı bir saatinde yükleyebilir. Bununla birlikte, feed'i tek bir parça olarak işler.

Bölgeye göre parçalı kullanılabilirlik özet akışı örneği

0. Kırık - 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ık - 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"
        }
      ]
    }
  ]
}