2014-11-24 2 views
1

Есть ли что-нибудь неправильно с обертыванием процесса, который занимает три часа, чтобы работать в TransactionScope, как это:Сделка открыта в течение многих часов

Dim transactionOptions As TransactionOptions = New TransactionOptions() 
Using scope As New TransactionScope(TransactionScopeOption.Required, transactionOptions) 
msgbox("Message Box 1") 
scope.complete() 
End Using 
msgbox("Message Box 2") 

Чтобы получить из сообщения Box 1 к Message Box 2 занимает около пяти часов.

Уверен, что я пробовал это в прошлом с еще одним длительным процессом, и транзакция продолжала время (я мог ошибаться), поэтому я выполнял на каждом цикле. Я где-то читал, что вы должны совершать как можно чаще. Что-то не так с моим подходом?

+0

Если у вас есть транзакция, которая длится пять часов, у вас возникнут большие проблемы с вашим дизайном. –

+0

@Matt Wilko, что произойдет, если у вас есть программа, проходящая через один миллиард записей, и каждый занимает одну долю секунды для запуска ? Думаю, вы скажете; зафиксировать в каждом цикле. – w0051977

+0

Во-первых, вы должны спросить, почему вы это делаете. Добавьте предложение WHERE, чтобы уменьшить объем данных, которые вы читаете. Seconly Чтение данных не должно быть частью транзакции, только вставлять/обновлять/удалять, поэтому запустите транзакцию непосредственно перед этим. Возможно, вам придется реорганизовать свой код, чтобы сначала получить список записей для обновления, прежде чем делать обновления. –

ответ

1

Существует четыре основных свойства .. да, все это знают ... Вызывается ACID.

Только первый здесь.

Атомность: Итак, это свойство говорит, что «в атомной транзакции происходит либо серия операций с базой данных, либо ничего не происходит».
Итак, скажем, ваша транзакция на 5 часов имеет 10000 операций с базой данных. Вы действительно хотите, чтобы они происходили все (10000 операций) или вообще не были? В лучшем случае, возможно ли, что вы можете разделить больше транзакций, а не одну транзакцию?

1

Как часто совершать? В основном возникает вопрос: какова ваша самая маленькая сделка?

Рассмотрите пример банковского счета (очень упрощенный): у вас может быть 10000 денежных переводов с одной учетной записи на другую, но если вы переводите со счета А на счет B (предположим, что это будет выполнено две вставки) ЭТО ОДНА ОПЕРАЦИЯ - сделайте это. а затем следующий.

+0

"маленькая работа" +1. – w0051977

 Смежные вопросы

  • Нет связанных вопросов^_^