![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не осилил вопросы по транзакциям на собеседовании
Дельфятник © (2006-03-06 18:29:00)1) В каких случаях надо использовать механизм транзакций
а) при редактировании данных
б) при удалении данных
в) в любом случае
г) при редактировании и/или удалении данных?
И зачем вообще нужен механизм транзакций?
2) Есть следующий код:
try
if not Database.InTransaction then Database.StartTransaction;
Database.Commit;
except
on E: Exception do
begin
ShowMessage(E.Message);
Database.Rollback
end
end;
В результате его выполнения программа выдала сообщение об ошибке. Пользователь по каким-то причинам не нажал "ОК", сообщение так и осталось висеть. По какой причине через некоторое время эта транзакция съест все ресурсы SQL-сервера?
Johnmen (2006-03-06 23:07:00) [81]>Дельфийские транзакции
:))))))))))))))
Я понимаю, что ты не очень понимаешь по теме, но это какое-то бредовое словосочетание...
1. Понятие тр-ии относится к СУБД, и только к ней.
2. НИКАКОЙ запрос к БД не м.б. выполнен вне рамок тр-ии.
3. Если в приложении нет явного старта/подтверждения/отката тр-ии, то они ВСЁ РАВНО есть, просто неявные с т.з. твоего кода.
ЗЫ
Мы говорим о настоящих серверах БД.
ЗЗЫ
В инете материала на данную тему валом...
Дельфятник (2006-03-06 22:36:00) [82]Кстати, анкету с этим вопросом я уже видел на двух собеседованиях - в Росевробанке, и в этой конторе (pmt, что ли).
Дельфятник (2006-03-06 22:28:00) [83]>Если database не реагирует на commit, то она ни на что не среагирует.
Там между StartTransaction и Commit ещё чего-то было, но я не запомнил, что именно.
Насколько я понимаю, Database.StartTransaction открывает сессию, в рамках которой можно получать данные на момент её открытия. Это что касается чтения.
Касательно редактирования/добавления/удаления. Проект с ипользованием дельфийских транзакций, который я видел, был написан сначала под BDE, потом переделан на DOA (под Oracle). Дельфийские транзакции там использовались только для редактирования и удаления записей. Они там использовались как средство обеспечения многопользовательского режима. Тот проект вообще был какой-то корявый - широко использовались TTable для всевозможных операций с данными, поэтому весь код был утыкан этими StartTransaction. Пользователь программы = пользователь Oracle.
В другом проекте, в котором не было ни строчки с StartTransaction, и который также успешно обеспечивал многопользовательский режим, использовал в основном TQuery, и вообще произвёл на меня более приятное впечатление. Пользователь программы <> пользователь Oracle.
Поэтому мне не совсем понятно, зачем в принципе нужно использовать StartTransaction, когда речь идёт о чтении или изменении данных.
Petr V. Abramov (2006-03-06 22:00:00) [84]> По какой причине через некоторое время эта транзакция съест все ресурсы SQL-сервера?
Ни по какой причине транзакция не съест все ресурсы неидиотского SQL-сервера. Если database не реагирует на commit, то она ни на что не среагирует.
> И зачем вообще нужен механизм транзакций?
Для обеспечения логической согласованности данных (логическость определяется ТЗ) Из этого и следует ответ на вопрос.
P.S. Похоже, непрохождение данного собеседования для Вас удача. Независимо от уровня владения DB Concepts Ж)
Desdechado (2006-03-06 21:34:00) [85]Romkin © (06.03.06 19:58) [13]
> На MSSQL можно менять данные не в транзакции.
Что-то слабо верится. Может, все-таки транзакция стартует неявно?
Romkin (2006-03-06 19:58:00) [86]Дельфятник (06.03.06 19:55) [11] А вот там эти два вопроса имеют другой смысл :) На MSSQL можно менять данные не в транзакции...
А атомарность при использовании select еще как может нарушиться. Прочитаешь несогласованные данные
Reindeer Moss Eater (2006-03-06 19:56:00) [87]то зачем нужно использовать транзакции для чтения?
Это определяется исключительно логикой приложения.
Дельфятник (2006-03-06 19:55:00) [88]Если всегда, то зачем нужно использовать транзакции для чтения? Разве может нарушиться атомарность при использовании select?
2 Romkin: Контора, которая проводила собеседование, использует MS SQL.
Romkin (2006-03-06 19:36:00) [89]Если это таки IB/FB, то на первый вопрос контра: А каким образом транзакцию можно не использовать?! А так ответ: всегда! И нужны они для атомарности.
А во втором вопросе: какой сервер, во-вторых, какие параметры транзакции, в-третьих, млин, нормальные люди пишут raise а не showmessage хотя бы из уважения к другим программерам. И тогда и не спутаешь, когда Rollback вызывать.
В общем, тест ясно показывает квалификацию его составителя ;)
Desdechado (2006-03-06 19:33:00) [90]все действия с БД - через транзакции, по другому не получится
дело только в явном или неявном их использовании
нужно для обеспечения целостности и непротиворечивости данных, а также для разруливания претензий пользователей при массовой работе
Дельфятник (2006-03-06 19:03:00) [91]Ладно, со вторым вопросом разобрались, спасибо. А что с первым вопросом?
Fay (2006-03-06 19:01:00) [92]Видимо, речь шла про IB/FB и кучу версий данных. Но для постоянного "поглощения ресурсов" все должны ходить пить чай. Массово и почаще.
Desdechado (2006-03-06 18:45:00) [93]вывод - откатываем, потом кричим
а жраться ничего не должно, ибо нет движения транзакции
Fay (2006-03-06 18:44:00) [94]> И пока программа будет ждать ... транзакция будет поглощать ресурсы
Бред какой-то
Дельфятник (2006-03-06 18:39:00) [95]То есть, смысл его второго вопроса был в том, что в случае, когда в результате выполнения транзакции управление передаётся в блок except .. end, то не будет выполнен откакт транзакции до тех пор, пока пользователь не нажмёт "ОК". А если пользователь, к примеру, отошёл чай попить, или ушёл с работы (в отпуск :) ), то программа так и будет дожидаться, пока он не нажмёт "ОК", и до этих пор отката транзакции не произойдёт. И пока программа будет ждать от пользователя нажатия "ОК" транзакция будет поглощать ресурсы. Я так и не понял, почему.
Fay (2006-03-06 18:38:00) [96]2 Дельфятник (06.03.06 18:34) [2]
> А интервьюер был уверен в обратном.
Это бывает. Бывает и хуже.
Дельфятник (2006-03-06 18:34:00) [97]> IMHO, нет таких причин.
Вот и я тоже так думал. А интервьюер был уверен в обратном.
Fay (2006-03-06 18:32:00) [98]2 Дельфятник (06.03.06 18:29)
> По какой причине через некоторое время эта транзакция съест все ресурсы SQL-сервера?
IMHO, нет таких причин.