Как я могу использовать функции Azure или приложения логики для сохранения данных в базе данных sql?

У меня есть приложение ASP.NET MVC, из которого я сейчас сохраняю данные в базу данных SQL Server.

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

В настоящее время я использую Entity Framework, поскольку он находится внутри приложения ASP.NET MVC.

Вот пример кода, который у меня есть:

private async Task SaveDatabaseAsync(List<Device> deviceDataList)
{
    // save device information into database
    _Repository.InsertMultipleDevices(deviceDataList); // used AddRange

    await _Repository.SaveAsync();

    // save message data information into database
    await SaveMessageData(deviceList);
}

private async Task SaveMessageData(List<Device> deviceListData , List<MessageData> messageDataList)
{
    // replace device id PK because device id is FK in Message table which is previously saved SaveDeviceToDatabaseAsync
    foreach (var messageData in messageDataList)
    {
        var deviceData = deviceListData.FirstOrDefault(t => Convert.ToInt32(t.Id.ToString()) == messageData.Id);
        messageData.Id = deviceData?.Id ?? 0;
    }

    MessageDataRepository _messageDataRepository = new MessageDataRepository(new IoTSimulatordbContext());
    _messageDataRepository.InsertMessageDataMultiple(messageData); // used AddRange
    await _messageDataRepository.SaveAsync();
}

Теперь я пытаюсь сделать то же самое в функции Azure или приложении логики. Что будет лучше и быстрее, если записи исчисляются тысячами?

Как добиться логики замены FK в этом случае?


person Neo    schedule 27.01.2019    source источник
comment
Я не уверен, что полностью понимаю вопрос, который вы задаете... Очевидно, ничто не мешает вам запустить существующую функцию Azure или приложение логики. Связана ли основная проблема с тем, как иметь несколько независимых экземпляров функций Azure, способных сохранять данные (устройство — сообщение), которые могут быть связаны?   -  person Kzrystof    schedule 27.01.2019
comment
да, я думаю создать одну лазурную функцию триггера http, которую я буду запускать из приложения mvc и передавать данные устройства и данные сообщения в эту лазурную функцию, и я выполню хранимую процедуру для вставки данных таблицы устройства и данных таблицы сообщений, это сделает смысл ?   -  person Neo    schedule 27.01.2019
comment
Что, возможно, стоит рассмотреть, так это наличие набора функций Azure, которые действуют как микрослужба, которая является владельцем хранилища (на самом деле SQL или что-то еще)... Это включает в себя часть сохранения, а также часть извлечения...   -  person Kzrystof    schedule 28.01.2019
comment
любая ссылка на реализацию, которую вы можете предоставить, отличное начало, спасибо :)   -  person Neo    schedule 28.01.2019


Ответы (1)


Это вопрос об архитектуре, и я настоятельно рекомендую вам прочитать документацию по архитектуре Azure. Ваш вопрос касается шаблона проектирования под названием Command Query Responsibility Separation или CQRS. Вам необходимо учитывать влияние «конечной согласованности» на обновления вашей базы данных, что может привести к полной переработке вашей базы данных и бизнес-логики приложения.

По моему опыту, приложение логики настраивается быстрее, чем функция Azure, однако функции Azure будут работать быстрее и дешевле, если у вас много данных. Вам также необходимо учитывать возможное влияние задержки на взаимодействие с пользователем. Вам следует прочитать эту статью Троя Ханта: https://www.troyhunt.com/azure-functions-in-practice/

В основном я использовал Функции Azure для обновления Dynamics Customer Engagement (также известного как CRM), и мне приходилось полагаться на использование других функций Azure, таких как служебная шина Azure, для распределения работы между несколькими функциями и обработки неудачных транзакций.

person Eccountable    schedule 28.01.2019