Могу ли я отследить неожиданное отсутствие изменений, используя функции изменения каналов, функции Cosmos db и Azure? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь понять изменение фидов в Azure. Я вижу, что могу вызвать событие, когда что-то меняется в космосе. Это полезноОднако в некоторых ситуациях я ожидаю, что документ будет изменен через некоторое время. Вопрос должен иметь изменение статуса, чтобы на него был дан ответ. Через некоторое время заказ должен иметь изменение статуса «подтверждено», а проблема должна иметь изменение статуса «решено» или должно иметь изменение приоритета (на «низкий»). Полезно инициировать событие, когда такое изменение происходит для определенного документа. Тем не менее, еще более полезно инициировать событие, когда такое изменение после (указанного) времени (например, 1 часа) не происходит. Проблема должна быть решена через некоторое время, заказ должен быть подтвержден через некоторое время и т. Д. Могу ли я использовать для этого также фид изменений и лазурь? Или мне нужно что-то другое? Хорошо, что я могу визуализировать изменения (, например, в мощном BI ), если они происходят через некоторое время, но мне также интересно визуализировать изменения, которые не происходят через некоторое время, когда ониожидается, что произойдет.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Если вам не нужна слишком большая точность времени (уведомления об изменениях каналов обычно задерживаются на несколько секунд) для этой задачи канал изменений Azure CosmosDB можно легко использовать в качестве решения. , но это потребовало бы некоторой дополнительной работы от команды Microsoft, чтобы также поддержать захват событий истечения срока действия удаления TTL.

Потенциальное решение, если бы Канал изменений собирал такие события истечения срока действия TTL, было бы: всякий раз, когда вы вставляете (или в вашем случае использования: изменить приоритет) документ, для которого вы хотите отслеживать отсутствие изменений, вы также вставляете другой документ (возможно, в другую коллекцию) , который действует как таймерс указанием TTL равным 1 ч.

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

Вы также можете легко использовать из измененияПодайте событие истечения TTL и утверждайте, что если истек TTL, то в спецификации не было никаких измененийвременное окно ified.

Если вам нужна эта функция, вы должны рассмотреть вопросы голосования, такие как эта: https://github.com/Azure/azure-cosmos-dotnet-v2/issues/402 и запросы функций, такие как эта: https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/14603412-execute-a-procedure-when-ttl-expires,, котораясделайте фид изменений идеально подходящим для таких сценариев, как ваш. К сожалению, он пока недоступен: (

TL; DR Нет. Изменение подачи в том виде, в каком оно есть, не подходит для вашего случая использования. Для этого потребуются некоторые дополнительные функции, которые запланированы, но нереализовано.

PS. Если вы все равно хотите больше узнать о канале изменений и его основных случаях использования, вы можете проверить эту статьюмой :)

0 голосов
/ 18 октября 2019

Достижение этого с помощью Change Feed не представляется возможным, потому что, как вы описываете, Change Feed реагирует на происходящие операции / события.

В вашем случае это звучит так, как будто вам нужен агент, которыйдолжен выполняться каждый промежуток времени X (может быть, функции Azure с TimerTrigger?) и выполняет запрос, чтобы найти элементы с состоянием X, которые не были изменены в течение предварительно заданного интервала Y (возможно, временного интервала, связанного сTimerTrigger). Это можно сделать, проверив поле _ts документов штата или собственное поле метки времени, см. https://stackoverflow.com/a/39214165/5641598.

Если ваша цель - просто развернуть его на панели инструментов, выможно запросить с помощью Power BI.

...