Управление версиями сущности

К каждому объекту, отправляемому в Google через каналы или обновления в реальном времени, прикреплена версия. Эта версия поставляется в виде отметки времени. В каналах метка времени может быть указана для каждой сущности с помощью атрибута dateModified . Если атрибут не включает объекты фида, версия устанавливается на время начала приема фида. В обновлениях в реальном времени batchPush и batchDelete соответственно для установки версии используются поля generation_timestamp и delete_time . Если поле не включено, версия устанавливается на время получения запроса. См. ожидаемый формат значений времени в схеме реляционной инвентаризации.

Google обрабатывает только объекты (например, ресторан, меню или услугу), версия которых равна последней принятой версии или новее. В противном случае объект не принимается и записывается ошибка устаревшего объекта . Когда сущность обновляется до новой версии, временная метка последнего изменения обновляется до текущего времени ее обновления.

Пример

Предположим, что 16 июня в 01:10 по всемирному координированному времени создается фид, в который включен следующий пример объекта.

{
  "@type": "Restaurant",
  "@id": "restaurant12345",
  "dateModified": "2022-06-16T01:10:00.000Z",
  ...
}

Фид еще не обработан Google. Позже в тот же день в 2022-06-16T01:22:00.000Z Google получает batchPush запрос обновления в реальном времени со следующим объектом.

{
  "records": [
    {
      "data_record": "{\"@type\": \"Restaurant\",\"@id\": \"restaurant12345\" ...",
      "generation_timestamp": "2022-06-16T01:20:00.000Z"
    }
  ]
}

Версия идентификатора объекта ресторана restaurant12345 теперь равна 2022-06-16T01:20:00.000Z , а последняя измененная временная метка объекта установлена ​​на 2022-06-16T01:22:00.000Z . Таким образом, время последнего изменения — это время обновления объекта в инвентаре Google, а версия — это generation_timestamp из запроса на обновление в реальном времени или значение dateModified из фида.

Прием канала начнется 16 июня в 02:00 UTC. В этой ситуации объект, полученный в канале с версией 2022-06-16T01:10:00.000Z считается устаревшим и не принимается. Поэтому Google продолжает обслуживать объект с версией 2022-06-16T01:20:00.000Z по запросу на обновление в реальном времени .

Лучшие практики:

  • Внедрите временную метку в каналы для каждого объекта.
  • Примените изменения обновления в реальном времени к следующему фиду и установите временную метку dateModified в объектах фида на текущее время, когда вы создали фид.