Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не осилил вопросы по транзакциям на собеседовании


Страницы:   1 2 3 4 5

Дельфятник ©   (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, нет таких причин.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо