Поделиться через


Использование канала изменений Azure Cosmos DB для визуализации аналитики данных в реальном времени

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Канал изменения Azure Cosmos DB — это механизм получения непрерывного и добавочного канала записей из контейнера Azure Cosmos DB по мере создания или изменения этих записей. Для поддержки канала изменений осуществляется прослушивание контейнера на наличие изменений. Затем он выводит отсортированный список документов в порядке, в котором они были изменены. Дополнительные сведения о канале изменений см. в статье Работа с поддержкой веб-канала изменений в Azure Cosmos DB.

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

Компоненты решения

На следующей схеме представлен поток данных и компоненты, участвующие в решении:

Визуальное представление проекта

  1. Создание данных: симулятор данных используется для создания розничных данных, представляющих такие события, как просмотр товара пользователем, добавление товара в корзину и его покупка. Вы можете создать большой набор примера данных с помощью генератора данных. Сгенерированные данные содержат документы в следующем формате:

    {
      "CartID": 2486,
      "Action": "Viewed",
      "Item": "Women's Denim Jacket",
      "Price": 31.99
    }
    
  2. Azure Cosmos DB: созданные данные хранятся в контейнере Azure Cosmos DB.

  3. Канал изменений: веб-канал изменений будет прослушивать изменения в контейнере Azure Cosmos DB. Каждый раз, когда новый документ добавляется в коллекцию (то есть когда происходит такое событие, как просмотр товара пользователем, добавление товара в корзину и его покупка), канал изменений вызывает функцию Azure.

  4. Функция Azure: Функция Azure обрабатывает новые данные и отправляет их в Центры событий Azure.

  5. Концентратор событий: концентратор событий Azure хранит эти события и отправляет их в Azure Stream Analytics для дальнейшего анализа.

  6. Azure Stream Analytics: этот модуль определяет запросы для обработки событий и выполнения анализа данных в реальном времени. Затем эти данные отправляются в Microsoft Power BI.

  7. Power BI: это решение используется для визуализации данных, отправленных Azure Stream Analytics. Вы можете создать панель мониторинга, чтобы увидеть, как метрики изменяются в реальном времени.

Необходимые компоненты

  • Microsoft .NET Framework 4.7.1 или более поздняя версия.

  • Microsoft .NET Core 2.1 или более поздняя версия.

  • Рабочие процессы разработки в Visual Studio с универсальной платформой Windows, классического приложения .NET и ASP. NET и веб-разработки.

  • Подписка на Microsoft Azure

  • Учетная запись Microsoft Power BI.

  • Скачайте задание канала изменений Azure Cosmos DB на GitHub.

Создание ресурсов Azure

Создайте требуемые для решения ресурсы Azure: экземпляр Azure Cosmos DB, учетную запись хранения, концентратор событий и Stream Analytics. Эти ресурсы можно развернуть с помощью шаблона Azure Resource Manager. Для развертывания этих ресурсов выполните следующие действия:

  1. Установите для политики выполнения Windows PowerShell значение Unrestricted. Для этого откройте Windows PowerShell в качестве администратора и выполните следующие команды:

    Get-ExecutionPolicy
    Set-ExecutionPolicy Unrestricted 
    
  2. Из репозитория GitHub, скачанного на предыдущем шаге, перейдите в папку Azure Resource Manager и откройте файл parameters.json.

  3. Укажите значения для параметров cosmosdbaccount_name, eventhubnamespace_name, storageaccount_name, как указано в файле parameters.json. Позже вам понадобятся имена, которые вы даете каждому из своих ресурсов.

  4. В Windows PowerShell перейдите в папку Azure Resource Manager и выполните следующую команду:

    .\deploy.ps1
    
  5. При появлении запроса введите идентификатор подписки Azure, укажите changefeedlab для имени группы ресурсов и run1 для имени развертывания. Для завершения развертывания ресурсов может потребоваться до 10 минут.

Создание базы данных и коллекции

Теперь создайте коллекцию для хранения событий сайта электронной коммерции. Когда пользователь просматривает товар, добавляет его в свою корзину или приобретает, коллекция получает запись, которая содержит действие ("просмотрено", "добавлено" или "приобретено"), название товара, его стоимость и идентификационный номер корзины пользователя.

  1. Перейдите на портал Azure и найдите учетную запись Azure Cosmos DB, созданную при развертывании шаблона.

  2. На панели Обозреватель данных выберите Новая коллекция и заполните форму следующими данными:

    • Для поля Идентификатор базы данных выберите Создать, а затем введите changefeedlabdatabase. Не устанавливайте флажок Provision database throughput (Подготовить пропускную способность базы данных).
    • В поле Коллекция введите changefeedlabcollection.
    • Для поля Ключ раздела введите /Item. Это поле чувствительно к регистру, поэтому убедитесь, что вы ввели ключ правильно.
    • В поле Пропускная способность введите 10000.
    • Выберите кнопку ОК.
  3. Затем создайте еще одну коллекцию с именем leases для обработки канала изменений. Коллекция аренд координирует обработку веб-канала изменений для нескольких рабочих ролей. Отдельная коллекция используется для хранения аренд на каждую секцию.

  4. На панели Обозреватель данных выберите Новая коллекция и заполните форму следующими данными:

    • Для поля Идентификатор базы данных выберите Использовать существующий, а затем введите changefeedlabdatabase.
    • В поле Идентификатор коллекции введите leases.
    • Для параметра Емкость хранилища выберите Фиксированная.
    • Оставьте для поля Пропускная способность значение по умолчанию.
    • Выберите кнопку ОК.

Получение строки подключения и ключей

Получение строки подключения к Azure Cosmos DB

  1. Перейдите на портал Azure и найдите учетную запись Azure Cosmos DB, созданную при развертывании шаблона.

  2. Перейдите к панели Ключи, скопируйте основную строку подключения и скопируйте ее в блокнот или другой документ, к которому у вас будет доступ в рамках этого задания. Вы должны пометить ее строкой подключения Azure Cosmos DB. Вам нужно будет скопировать строку в ваш код позже, поэтому сохраните ее и запомните место хранения.

Получение ключа учетной записи хранения и строки подключения

Учетные записи хранения Azure позволяют пользователям хранить данные. В этом задании вам понадобится учетная запись для хранения данных, которые используются функцией Azure. Функция Azure активируется, когда в коллекцию вносятся какие-либо изменения.

  1. Вернитесь в свою группу ресурсов и откройте созданную ранее учетную запись хранения.

  2. Выберите Ключи доступа в меню в левой части окна.

  3. Скопируйте значения под ключом 1 в блокнот или другой документ, к которому у вас будет доступ в рамках этого задания. Вы должны пометить ключ как Ключ к хранилищу данных, а строку подключения как Строка подключения к хранилищу. Вам нужно будет скопировать эти строки в ваш код позже, поэтому сохраните их и запомните место хранения.

Получение строки подключения пространства имен концентратора событий

Концентратор событий Azure принимает данные о событиях, сохраняет, обрабатывает и пересылает их. В этом задании концентратор событий будет получать документ каждый раз, когда происходит новое событие (например, товар просматривается пользователем, добавляется в корзину или приобретается), а затем пересылать этот документ в Azure Stream Analytics.

  1. Вернитесь в свою группу ресурсов и откройте пространство имен Центров событий, которое вы создали и назвали в предварительных шагах.

  2. Выберите Политики общего доступа в меню в левой части окна.

  3. Выберите RootManageSharedAccessKey. Скопируйте первичный ключ строки подключения в блокнот или другой документ, к которому у вас будет доступ в рамках этого задания. Вы должны пометить его как строку подключения Пространство имен концентратора событий. Вам нужно будет скопировать строку в ваш код позже, поэтому сохраните ее и запомните место хранения.

Настройка функции Azure для чтения канала изменений

При создании нового документа или текущего документа в контейнере Azure Cosmos DB веб-канал изменений автоматически добавляет измененный документ в журнал изменений коллекции. Сейчас вы создадите и запустите функцию Azure, которая обрабатывает канал изменений. При создании или изменении документа в созданной коллекции канал изменений активирует функцию Azure. Затем Функция Azure отправит измененный документ в концентратор событий.

  1. Вернитесь в репозиторий, который вы клонировали на вашем устройстве.

  2. Щелкните правой кнопкой мыши файл с именем ChangeFeedLabSolution.sln и выберите Открыть с помощью Visual Studio.

  3. Перейдите к файлу local.settings.json в Visual Studio. Затем используйте значения, записанные ранее, чтобы заполнить пропуски.

  4. Перейдите к файлу ChangeFeedProcessor.cs. В параметрах функции Run выполните следующие действия:

    • Замените текст YOUR COLLECTION NAME HERE именем вашей коллекции. Если вы следовали более ранним инструкциям, имя вашей коллекции — changefeedlabcollection.
    • Замените текст YOUR LEASES COLLECTION NAME HERE именем вашей коллекции аренд. Если вы следовали более ранним инструкциям, имя аренды вашей коллекции — leases.
    • В верхней части Visual Studio убедитесь, что в поле "Запускаемый проект" слева от зеленой стрелки указано ChangeFeedFunction.
    • Выберите Запуск в верхней части страницы, чтобы запустить программу.
    • Вы узнаете, что функция запущена, когда в консольном приложении будет указано "Job host started" (Узел задания запущен).

Вставка данных в Azure Cosmos DB

Чтобы увидеть, как канал изменений обрабатывает новые действия на сайте электронной коммерции, необходимо имитировать данные, представляющие события просмотра пользователями товаров из каталога продуктов, добавление этих товаров в корзины и их покупки. Эти данные произвольны и используются для репликации данных на сайте электронной коммерции.

  1. Перейдите в репозиторий в проводнике и щелкните правой кнопкой мыши ChangeFeedFunction.sln, чтобы открыть его снова в новом окне Visual Studio.

  2. Перейдите к файлу App.config. В блоке <appSettings> добавьте конечную точку и уникальный ПЕРВИЧНЫЙ КЛЮЧ вашей учетной записи Azure Cosmos DB, который вы получили ранее.

  3. Добавьте имена коллекции и базы данных. (Эти имена должны быть changefeedlabcollection и changefeedlabdatabase, если вы не решите назвать их по-другому.)

    Обновление строк подключения

  4. Сохраните изменения во всех отредактированных файлах.

  5. В верхней части Visual Studio убедитесь, что в поле Startup Project слева от зеленой стрелки указано DataGenerator. Выберите Запуск в верхней части страницы, чтобы запустить программу.

  6. Подождите, пока программа запустится. Звездочки означают, что поступают данные! Программа должна быть в рабочем состоянии, так как важно собрать много данных.

  7. Если перейти к портал Azure, то в учетную запись Azure Cosmos DB в группе ресурсов вы увидите случайные данные, импортированные в changefeedlabcollection.

    Данные, созданные на портале

Настройка задания Stream Analytics

Azure Stream Analytics — это полностью управляемая облачная служба для обработки потоковых данных в реальном времени. В этом задании вы будете использовать Stream Analytics для обработки новых событий из концентратора событий (то есть когда товар просматривается, добавляется в корзину или приобретается), включать эти события в анализ данных в реальном времени и отправлять их в Power BI для визуализации.

  1. На портале Azure перейдите к своей группе ресурсов, а затем в streamjob1 (задание потоковой аналитики, которое вы создали при настройке задания).

  2. Выберите Входные данные, как показано ниже.

    Создание входных данных

  3. Выберите + Добавить потоковый вход. В раскрывающемся меню выберите пункт Концентратор событий.

  4. Заполните новую форму ввода следующими данными:

    • В поле псевдонима Входные данные введите входные данные.
    • Выберите параметр Выбрать концентратор событий в подписках.
    • Введите вашу подписку в поле Подписка.
    • В поле Пространство имен Центров событий введите имя пространства имен концентратора событий, которое было создано во время настройки задания.
    • В поле Имя концентратора событий выберите Использовать существующий, а затем event-hub1 в раскрывающемся меню.
    • Оставьте значение по умолчанию для поля Event Hub policy (Политика концентратора событий).
    • В поле Формат сериализации событий выберите JSON.
    • В поле Encoding field (Поле кодирования) выберите UTF-8.
    • В поле Тип сжатия событий выберите Отсутствует.
    • Выберите кнопку Сохранить.
  5. Перейдите на страницу задания Stream Analytics и выберите Выходные данные.

  6. Выберите Добавить. В раскрывающемся меню выберите пункт Power BI.

  7. Чтобы создать новые выходные данные Power BI для визуализации средней цены, выполните следующие действия:

    • В поле Выходной псевдоним введите averagePriceOutput.
    • В поле Рабочая область группы выберите Authorize connection to load workspaces (Авторизовать подключение для загрузки рабочих областей).
    • В поле Имя набора данных введите averagePrice.
    • В поле Имя таблицы введите averagePrice.
    • Нажмите кнопку Авторизовать, а затем следуйте инструкциям для авторизации подключения к Power BI.
    • Выберите кнопку Сохранить.
  8. Затем вернитесь к streamjob1 и выберите Изменить запрос.

    Изменить запрос

  9. Вставьте следующий запрос в окно запроса. Запрос СРЕДНЯЯ ЦЕНА вычисляет среднюю цену всех товаров, которые просматриваются пользователями, среднюю цену всех товаров, которые добавляются в корзины пользователей, и среднюю цену всех товаров, которые они покупают. Эта метрика может помочь компаниям электронной коммерции решить, по каким ценам продавать товары и в какие ресурсы инвестировать. Например, если средняя цена просматриваемых товаров намного выше средней цены купленных товаров, тогда компания может захотеть добавить менее дорогие товары в свой ассортимент.

    /*AVERAGE PRICE*/      
    SELECT System.TimeStamp AS Time, Action, AVG(Price)  
     INTO averagePriceOutput  
     FROM input  
     GROUP BY Action, TumblingWindow(second,5) 
    
  10. Затем нажмите кнопку Сохранить в верхнем левом углу.

  11. Теперь вернитесь к streamjob1 и нажмите кнопку Запуск в верхней части страницы. Azure Stream Analytics может потребоваться несколько минут, но, в конце концов, вы увидите, что состояние изменилось с "Запуск" на "Выполняется".

Подключение к Power BI

Power BI — это пакет средств бизнес-аналитики для анализа данных и обмена аналитикой. Это отличный пример того, как вы можете стратегически визуализировать проанализированные данные.

  1. Войдите в Power BI и перейдите на вкладку Моя рабочая область, открыв меню в левой части страницы.

  2. Выберите + Создать в верхнем правом углу, а затем выберите Панель мониторинга, чтобы создать панель.

  3. Выберите + Добавить плитку в верхнем правом углу.

  4. Выберите Пользовательские данные потоковой передачи, а затем нажмите кнопку Далее.

  5. Выберите averagePrice из ваших наборов данных, а затем нажмите кнопку Далее.

  6. В поле Тип визуализации выберите Линейчатая диаграмма с группировкой в раскрывающемся меню. В разделе Оси добавьте действие. Оставьте поле Условные обозначения без изменений. Затем в следующем разделе с названием Значение добавьте avg. Нажмите кнопку Далее, укажите заголовок диаграммы и выберите Применить. Вы должны увидеть новую диаграмму на панели мониторинга.

  7. Теперь, если вы хотите визуализировать больше метрики, можете вернуться к streamjob1 и создать еще три набора выходных данных со следующими полями.

    a. Выходной псевдоним — incomingRevenueOutput, имя набора данных — incomingRevenue, имя таблицы — incomingRevenue.
    b. Выходной псевдоним — top5Output, имя набора данных — top5, имя таблицы — top5.
    c. Выходной псевдоним — uniqueVisitorCountOutput, имя набора данных — uniqueVisitorCount, имя таблицы — uniqueVisitorCount.

    Затем выберите Изменить запрос и вставьте следующие запросы над уже написанными.

     /*TOP 5*/
     WITH Counter AS
     (
     SELECT Item, Price, Action, COUNT(*) AS countEvents
     FROM input
     WHERE Action = 'Purchased'
     GROUP BY Item, Price, Action, TumblingWindow(second,30)
     ), 
     top5 AS
     (
     SELECT DISTINCT
     CollectTop(5)  OVER (ORDER BY countEvents) AS topEvent
     FROM Counter
     GROUP BY TumblingWindow(second,30)
     ), 
     arrayselect AS 
     (
     SELECT arrayElement.ArrayValue
     FROM top5
     CROSS APPLY GetArrayElements(top5.topevent) AS arrayElement
     ) 
     SELECT arrayvalue.value.item, arrayvalue.value.price,   arrayvalue.value.countEvents
     INTO top5Output
     FROM arrayselect
    
     /*REVENUE*/
     SELECT System.TimeStamp AS Time, SUM(Price)
     INTO incomingRevenueOutput
     FROM input
     WHERE Action = 'Purchased'
     GROUP BY TumblingWindow(hour, 1)
    
     /*UNIQUE VISITORS*/
     SELECT System.TimeStamp AS Time, COUNT(DISTINCT CartID) as uniqueVisitors
     INTO uniqueVisitorCountOutput
     FROM input
     GROUP BY TumblingWindow(second, 5)
    

    Запрос TOP 5 вычисляет 5 основных товаров, ранжированных по количеству раз приобретения. Эта метрика может помочь компаниям электронной коммерции оценить, какие товары наиболее популярны, и может влиять на решения компании о рекламе, ценообразовании и ассортименте.

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

    Запрос UNIQUE VISITORS подсчитывает, сколько уникальных посетителей находится на сайте каждые 5 секунд, обнаруживая уникальные идентификаторы корзин. Эта метрика может помочь компаниям электронной коммерции оценить активность своего сайта и разработать стратегию привлечения большего количества клиентов.

  8. Теперь вы можете добавить плитки для этих наборов данных.

    • Для запроса Top 5 было бы целесообразно сделать гистограмму с группировкой с осью товаров и количеством в качестве значения.
    • Для запроса Revenue было бы целесообразно сделать график с осью по времени и суммой цен в качестве значения. Окно времени для отображения должно быть максимально возможным, чтобы предоставить как можно больше информации.
    • Для запроса Unique Visitors было бы целесообразно сделать визуализацию "Карточка" с количеством уникальных посетителей в качестве значения.

    Так выглядит пример панели мониторинга с этими диаграммами:

    Снимок экрана: пример панели мониторинга с диаграммами Average Price of Items by Action (Средняя цена товаров по действию), Unique Visitors (Уникальные посетители), Revenue (Доход) и Top 5 Items Purchased (5 самых популярных товаров).

Дополнительно: визуализация с использованием сайта электронной коммерции

Теперь вы увидите, как вы можете использовать свой новый инструмент анализа данных для подключения к реальному сайту электронной коммерции. Чтобы создать сайт электронной коммерции, используйте базу данных Azure Cosmos DB для хранения списка категорий продуктов, каталога продуктов и списка наиболее популярных элементов.

  1. Вернитесь к портал Azure, а затем в учетную запись Azure Cosmos DB, а затем в обозреватель данных.

    Добавьте две коллекции в changefeedlabdatabase - products и categories с фиксированной емкостью хранения.

    Добавьте еще одну коллекцию в changefeedlabdatabase с именем topItems и ключом раздела /Item.

  2. Выберите коллекцию topItems и в разделе Scale and Settings (Масштаб и параметры) задайте значение 30 секунд для Time to Live (Срок жизни), чтобы topItems обновлялся каждые 30 секунд.

    Срок жизни

  3. Чтобы заполнить коллекцию topItems наиболее часто приобретаемыми товарами, перейдите к streamjob1 и добавьте новые выходные данные. Выберите Azure Cosmos DB.

  4. Заполните обязательные поля, как показано ниже.

    Выходные данные Azure Cosmos DB

  5. Если вы добавили дополнительный запрос TOP 5 в предыдущую часть задания, перейдите к части 5a. В противном случае перейдите к части 5b.

    5a. В streamjob1 выберите Изменить запрос и вставьте следующий запрос в свой редактор запросов Azure Stream Analytics под запросом TOP 5, но над остальными запросами.

    SELECT arrayvalue.value.item AS Item, arrayvalue.value.price, arrayvalue.value.countEvents
    INTO topItems
    FROM arrayselect
    

    5б. В streamjob1 выберите Изменить запрос и вставьте следующий запрос в свой редактор запросов Azure Stream Analytics над всеми остальными запросами.

    /*TOP 5*/
    WITH Counter AS
    (
    SELECT Item, Price, Action, COUNT(*) AS countEvents
    FROM input
    WHERE Action = 'Purchased'
    GROUP BY Item, Price, Action, TumblingWindow(second,30)
    ), 
    top5 AS
    (
    SELECT DISTINCT
    CollectTop(5)  OVER (ORDER BY countEvents) AS topEvent
    FROM Counter
    GROUP BY TumblingWindow(second,30)
    ), 
    arrayselect AS 
    (
    SELECT arrayElement.ArrayValue
    FROM top5
    CROSS APPLY GetArrayElements(top5.topevent) AS arrayElement
    ) 
    SELECT arrayvalue.value.item AS Item, arrayvalue.value.price, arrayvalue.value.countEvents
    INTO topItems
    FROM arrayselect
    
  6. Откройте EcommerceWebApp.sln и перейдите к файлу Web.config в обозревателе решений.

  7. В блоке <appSettings> добавьте URI и первичный ключ, которые вы сохранили ранее, где указано Введите здесь URI и Введите здесь первичный ключ. Затем добавьте имя базы данных и имя коллекции, как указано. (Эти имена должны быть changefeedlabdatabase и changefeedlabcollection, если вы не решите назвать их по-другому.)

    Укажите имя коллекции товаров, коллекции категорий и коллекции популярных товаров, как указано. (Эти имена должны быть products, categories и topItems, если вы не решили назвать их по-другому.)

  8. Найдите и откройте папку извлечения в EcommerceWebApp.sln. Затем откройте файл Web.config в этой папке.

  9. В блоке <appSettings> добавьте URI и первичный ключ, которые вы сохранили ранее, где указано. Затем добавьте имя базы данных и имя коллекции, как указано. (Эти имена должны быть changefeedlabdatabase и changefeedlabcollection, если вы не решите назвать их по-другому.)

  10. Нажмите кнопку Запуск в верхней части страницы, чтобы запустить программу.

  11. Теперь вы можете экспериментировать на сайте электронной коммерции. При просмотре элемента добавьте элемент в корзину, измените количество элемента в корзине или приобрести элемент, эти события будут передаваться через канал изменений Azure Cosmos DB в концентратор событий, Stream Analytics и Power BI. Мы рекомендуем продолжить работу DataGenerator для создания большего объема данных веб-трафика и предоставления реалистичного набора "популярных продуктов" на сайте электронной коммерции.

Удаление ресурсов

Чтобы удалить ресурсы, созданные в ходе выполнения этого задания, перейдите к группе ресурсов на портале Azure, а затем щелкните Удалить группу ресурсов в меню вверху страницы и следуйте инструкциям.

Следующие шаги