Канал изменений Cosmos DB в двух коллекциях

#azure #azure-functions #azure-cosmosdb

#azure #azure-функции #azure-cosmosdb

Вопрос:

Я хотел бы узнать, как справиться с этим сценарием в Cosmos DB:

  • У меня есть коллекция A с каналом изменений, который обновляет значения в коллекции B.
  • У меня есть коллекция B с каналом изменений, который обновляет значения в коллекции A.

Этот сценарий создает бесконечный цикл.

Есть ли конкретный способ справиться с этим сценарием?

Комментарии:

1. Идентифицируется ли изменение, которое происходит на втором шаге? Это добавление определенного свойства? Можете ли вы добавить более подробную информацию об этом?

2. Нет, он не идентифицируется и не добавляет определенное свойство. По сути, элемент в коллекции B используется во многих элементах коллекции A. Дело в том, что изменения в элементе в коллекции B должны обновлять внедренные ссылки в коллекции A, пока все хорошо. Проблема в том, что обновленный элемент в коллекции A должен обновлять свойства элемента в коллекции B на основе его присвоенного элемента.

Ответ №1:

Похоже, что предлагаемый дизайн в корне нарушает принципы шаблона поиска событий. Как обсуждалось в связанном обзоре, важным свойством архитектуры является то, что обновления являются идемпотентными, т. Е. Что Нет побочного эффекта от нескольких эквивалентных операций. В описанном случае это означало бы, что попытки обновить элемент или внедренный элемент с тем же значением будут обнаружены и предотвращены, чтобы избежать цикла.

В общем, должен быть «источник истины» с односторонним перемещением данных. Я бы вообще избегал двухсторонних архитектур каналов изменений. Если вы пытаетесь оптимизировать операции чтения путем встраивания копии другого элемента, копия должна быть доступна только для чтения и не должна подвергаться обновлениям, которые поступают в обратном направлении. Только оригинал должен быть доступен для записи.

Комментарии:

1. Вы имеете в виду, что копия должна поддерживать только запись и удаление, чтобы ее можно было использовать только для чтения и нельзя было обновлять?

2. По сути, да. Насколько я знаю, это должно быть реализовано в коде, что невозможно на уровне Cosmos.