Мне действительно нужно использовать транзакции в хранимых процедурах? [MSSQL 2005] - PullRequest
7 голосов
/ 13 сентября 2008

Я пишу довольно просто e-commerce app в asp.net , мне нужно использовать транзакции в моих хранимых процедурах?

Коэффициент чтения / записи составляет около 9: 1

Ответы [ 5 ]

7 голосов
/ 13 сентября 2008

Многие спрашивают - нужны ли мне транзакции? Зачем они мне нужны? Когда их использовать?

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

Почему выгодны транзакции? Они помогают вам справляться со сбоями, сбоями, непротиворечивостью данных, обработкой ошибок, они помогают вам писать более простой код и т. Д. И список преимуществ со временем будет расти.

Вот еще немного информации от http://blogs.msdn.com/florinlazar/

3 голосов
/ 13 сентября 2008

Помните, что в SQL Server все операции CRUD с одним оператором по умолчанию выполняются в неявной транзакции. Вам просто нужно включить явные транзакции (BEGIN TRAN), если вам нужно, чтобы несколько операторов действовали как атомарные единицы.

1 голос
/ 13 сентября 2008

Конечно, это зависит.

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

Хорошее место для начала - просмотреть точную CRUD , выполняемую в единице работы, в данном случае в рамках вашей хранимой процедуры, и решить, может ли она a) быть затронута какой-либо другой, одновременной операция и б) если эта другая работа имеет значение для конечного результата этой работы (или даже наоборот). Если ответ «Да» на оба вопроса, рассмотрите возможность упаковки единицы работы в транзакцию.

Это говорит о том, что вы не всегда можете просто решить либо использовать, либо не использовать транзакцию s, скорее вам следует применять их, когда это имеет смысл. Используйте свойства, определенные ACID (атомарность, согласованность, изоляция и долговечность), чтобы помочь решить, когда это может иметь место.

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

К сожалению, это не простой вопрос, чтобы точно ответить: «Это зависит».

1 голос
/ 13 сентября 2008

Ответ, это зависит. Вам не всегда нужна безопасность транзакций. Иногда это излишне. Иногда это не так.

Я вижу, что, например, когда вы реализуете процесс оформления заказа, вы хотите завершить его только после того, как соберете все данные и т. Д. Подумайте о платеже, вы можете откатиться - это пример, когда вам нужно сделка Или, может быть, разумно их использовать.

Вам нужна транзакция при создании новой учетной записи пользователя? Возможно, если по 10 таблицам (по какой-либо причине), если это всего лишь одна таблица, то, вероятно, нет.

Это также зависит от того, за кого вы продали своего клиента и кем он является, и если они запросили его и т. Д. Но если вы принимаете решение, то я бы сказал, что выбирайте мудро.

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

0 голосов
/ 15 сентября 2008

Используйте их, если:

  1. Есть некоторые ошибки, которые вы можете захотеть проверить и отловить, но они не будут обнаружены, если вы не будете выполнять работу (искать вещи, проверять значения и т. Д.), Обычно из транзакции, чтобы Вы можете откатить всю операцию.
  2. Существуют многошаговые операции любого рода, которые, по логике, следует откатить как группу, если они потерпят неудачу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...