Основные транзакции EF через несколько сообщений DbContexts vs Queue - PullRequest
0 голосов
/ 17 октября 2018

Какой подход использовать при хранении / обновлении данных для нескольких DbContex'ов?Сравнение производительности: и в каком случае когда использовать что:

 using (var scope = new TransactionScope())
        {
            using (var context1 = new ItemContext(userOptions))
            {
                context1.Items.Add(item);
                context1.SaveChanges();
            }

            using (var context2 = new OrderContext(orderOptions))
            {
                testOrder.ItemId = item.Id;
                context2.Orders.Add(testOrder);
                context2.SaveChanges();
            }

            if(testOrder.SunIsShining){
               using (var context1 = new ItemContext(itemOptions))
               {
                  item.SunIsShining= true;
                  context1.Items.Update(item);
                  context1.SaveChanges();
               }
            }
            scope.Complete();
        }

A.Пример выше с использованием области транзакции и изменением / обновлением записей между различными контекстами на одном физическом сервере.

B.Используйте сообщения.Например, после сохранения пользователя в БД.Служба сообщений о вызовах, которая вставляет информационные сообщения в очередь (записи информации об элементе).Затем ItemOrderProcessingService будет читать эту очередь каждые 10 секунд, принимая все новые записи в ней.И в партиях будет создавать заказы, возможно, при необходимости обновлять некоторые статусы элементов также в таблице элементов также в пакетах.(иметь логику для отката изменений при необходимости)

Когда использовать какой подход, каковы преимущества / недостатки?Например, если у нас ~ 2 тыс. транзакций в день, что довольно мало. Сколько транзакций в день нужно использовать, используя подход B. queue?

1 Ответ

0 голосов
/ 17 октября 2018

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

На основе сообщений требуется больше усилий от команды для поддержки и поддержкиМикросервисы, обрабатывающие сообщения, и для небольшого приложения, такого как ваше, могут использовать монолитное приложение.

...