Итак, вы указали преимущества подписки на весь набор данных, а не только на дельту, и каждый из этих моментов хорошо продуман, и в большинстве случаев не стоит прилагать усилия для управления дельтами с точки зрения подписчиков.
Но я бы хотел, чтобы вы посмотрели с точки зрения продюсеров.Продюсер должен работать над определенными событиями, скажем, добавить и саб.Когда генерируются события, все, что у него есть, это «Баз».Он обработает операцию, а затем запросит свою систему, чтобы проверить все данные и отправить их.Однако он мог просто отправить вас
{add: ["baz"], вычесть: []}
Так что в подобных случаях это будет дешевледля производителя, чтобы отправить вам дельта.Следует также отметить, сколько раз эти запросы выполняются и зачем это нужно подписчику.Если вы берете случай, скажем, инвентаря в магазине, то любое событие покупки удалит инвентарь, и любой возврат может добавить.Подобных событий будет слишком много, и если мы будем рассылать обновления инвентаря каждый раз, когда происходит событие покупки путем фактического чтения из системы, это может быть медленным.
Другая сторона этой истории, почему подписчикнужно это, ему может понадобиться, чтобы увидеть, если он может показать продукт.Если это так, то он не очень обеспокоен, если инвентарь 10, 11 или 9. Он беспокоится о том, приближается ли он к нулю или нет, в этом случае могут иметь смысл дельта-обновления.
Но только дельта-обновления могут не помочьвы.Как вы сказали, они не идемпотентны и не последовательны.И чтобы это исправить, я предпочитаю использовать оба.
Отправлять дельта-обновления с меньшими интервалами.Пусть система выйдет из строя, но исправьте ее, прежде чем она станет слишком плохой, нажав полные наборы данных.
Для тех, кто может жить с недостатками дельты, могут потребляться менее надежные, но быстрые обновления дельты и для тех, кто ищет согласованностьиспользовать полные обновления данных.Однако вы ограничиваете их на основании ограничений производителей.Если они дорогостоящие, вы делаете это реже.
Так одно лучше другого?Я скажу, это зависит от вашего варианта использования, вы можете предпочесть один из них другому, или они оба могут использоваться для дополнения друг друга.