Parça feed dosyaları

Envanterinize bağlı olarak, parçalama (veya feed'leri birden fazla) dosyalar) 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'tır. Bu özellik, 5'ten fazla ayrı dosyaya (veya kırıka) bölündü.
  • İş ortağı envanteri sistemler ve/veya bölgeler arasında dağıtılır Bu da envanterin mutabakatını zorlaştırır.

    • Örnek: İş ortağının ABD ve AB envanteri var ve bu envanterler ayrı yerlerde sistemlerdir. Feed, ABD için biri olmak üzere 2 dosya (veya parçayla) ile oluşturulabilir, ve aynı nonce ile AB için 1 ve generation_timestamp.
ziyaret edin.

Genel kurallar

  • Her kırık, 1 dosya için 200 MB'ı aşamaz (gzip sıkıştırmasından sonra).
  • Feed başına 20 parçadan fazla olmamasını öneririz. İş gerekçesi, daha fazla bilgi için lütfen destek ekibiyle bağlantı kurun.
  • Bağımsız kayıtlar (örneğin, bir Merchant nesnesi) tek bir kırıkta gönderilmelidir. birden fazla parçaya bölünemezler. Ancak, bunların kırık içine gönderilmeleri gerekmez. gelecekteki feed'ler için aynı shard_number ile.
  • Daha iyi performans için, verileriniz her iki taraf arasında eşit olarak bölünmelidir bu parçaların hepsinin benzer boyuta sahip olmasını sağlayın.
ziyaret edin.

Feed'leri parçalama

Her bir dosya (veya kırık) için FeedMetadata özelliğini takip etmek için:

  • processing_instructionşu değere ayarla: PROCESS_AS_COMPLETE.
  • shard_number, feed'in mevcut kırığına ayarlandı (0 ile total_shards arasında başlar - süreksizlikler olmadan 1)
  • total_shards, şu öğe için toplam kırık sayısına ayarlandı: feed'i seçin (1'den itibaren).
  • nonce, aynı benzersiz tanımlayıcı olarak ayarlandı aynı feed'in tüm parçalarında diğer feed'lerde nonce, pozitif bir tam sayı (uint64) olmalıdır.
  • generation_timestamp, unix ve EPOCH'taki zaman damgasıdır biçimindedir. 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ı, parça numarasını ve parçalar. Parçalar aşağı yukarı aynı boyutta olmalı ve hepsi bir kez işlenmelidir parçalar yüklenir.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Parçalı Kullanılabilirlik 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ç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 parçalama kullanma

İş ortaklarının, dağıtılan envanteri birleştirmesi zor olabilir. verileri tek bir feed'de birleştirir. Parçalama, her bir parçayı her bir parçayla eşleşecek şekilde ayarlanarak mutabakat zorluklarını çözmek için kullanılır dağıtılmış sistemin envanterini belirleyin.

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

İş ortağı her bir 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
  • Hizmet 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 düzgün şekilde işlendiğinden emin olmak için aşağıdaki adımları uygulayın:

  1. Bir yükleme planı belirleyin ve her bir envanter örneğini yapılandırarak takip etmek.
  2. Her örnek için benzersiz kırık 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 zamanında generation_timestamp ve nonce. FeedMetadata, tüm örnekleri şunun için aynı değerleri tutacak şekilde ayarla: sağlandığından emin olun.
    • generation_timestamp, güncel veya yakın bir tarih olmalıdır. (ideal olarak, iş ortağının veritabanının okuma zaman damgası)
  4. Tüm parçalar yüklendikten sonra, Google kırıkları generation_timestamp ve nonce.
ziyaret edin.

Google, her kırık bir parçayı temsil etse bile feed'i tek bir feed olarak işler iş ortağı envanterinin farklı bir bölgesine generation_timestamp, günün farklı bir saatinde tüm parçalarda aynıdır.

Bölgeye göre Parçalı Stok Durumu feed'i örneği

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

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