Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

Не пойму сути компонентов а-ля TTransaction   Найти похожие ветки 

 
Игорь Шевченко ©   (2009-06-10 17:56) [40]


> В противном случае апи сервера состояло бы из одной функции
> function ExecStmt(Stmt: string): string; {в строке результата
> - информация об ошибке}


Собственно, так оно и есть. В большинстве случаев основные API - это Exec и Fetch, так как Exec должен откуда брать параметры в случае параметризованных запросов, добавляется Bind, так как Fetch должен куда-то класть то, что он нафетчил, добавляется Describe. Собственно, все.
Еще Connect и Disconnect.

Некоторые серверы реализуют отдельные вызовы управления транзакциями, типа BeginTransaction, Commit и Rollback, но это по большому счету излишне.
Говорю за те СУБД, с которыми более или менее знаком - Oracle, Interbase, ADABAS и за стандарт ODBC


 
Пит   (2009-06-10 18:35) [41]


> по моему убеждению все параметры нуно отдавать в формальном
> виде

сразу видно адепта строго типизированных ЯВУ )))

А вот какой-нибудь PHP"шник высказался бы по-другому.

Текстовое общение имеет ряд преимуществ. Многие очень используемые современные протоколы имеют именно текст-основу: тот же HTTP.

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


 
PEAKTOP ©   (2009-06-10 18:43) [42]

> А я не пойму. Транзакция одна в контексте соединения, то
> есть TpFIBDatabase в данном случае. Это шо это получается,
>  компонент TpFIBTransaction ставит в очередь все эти транзакции,
>  или по надобности одну "резка" завершает, или как-то готовит
> активную для 2-хфазного коммита, или чего там происходит?


Все, что написано ниже, относиться к Firebird c учетом последней версии 2.5. Как там дела у Interbase позже версии 6.0 - не знаю.

Как вообще Джимом Старки все задумывалось: крутиться себе процесс (SuperServer или Embedded) или процессы (ClassicServer или SuperClassicServer) сервера. К нему есть подключения (имеющие свой ID)  и транзакции (тоже имеющие свой ID). Отсюда правила:
1) Каждое подключение може иметь N транзакций, где N-инкрементальное число от 0 для последнего restore файла базы данных до предела типа данных LongInt (в Delphi Int64).
2) Каждая транзакция может относится к M подключениям, где M - число типа LongInt (в Delphi Int64).
До конца этот механизм не был реализован в InterBase6.0, но позже путем добавлений feature requests в Firebird этот механизм был реализован на 100%.

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

В рамках одной транзакции у тебя может быть несколько подключений, например, как в Cross-Database запросах, когда ты внутри тела хранимой процедуры или триггера обращаешься к другой БД ( http://firebirdsql.su/doku.php?id=execute_statement) с параметром WITH COMMON TRANSACTION.

В рамках одной транзакции у тебя может быть вложенная транзакция, которая может выполняться с другим уровнем изоляции данных и блокировки данных. Например, когда ты внутри триггера или хранимой процедуры выполняешь некоторые действия в рамках другой транзакции (http://firebirdsql.su/doku.php?id=autonomous_transaction).

<OFFTOP>
Ув. pasha_golub, можно личный вопрос ? А во сколько ты родился ? Я в 10:00 утра.
День, думаю, уточнять не надо. =))
</OFFTOP>


 
MsGuns ©   (2009-06-10 23:13) [43]

Первый полноценный скл-сервер, с которым пришлось работать, был ИБ (точнее ФБ 1.0). Быстро "привык" к транзакциям и был весьма раб "рулить" ими, благо сам сервер другого и не преждполагает.
Потом переехал на мсскл. Первое время в голове был "белый шум" с транзакциями ибо "рулить ими как в ИБ просто нельзя. После внятной и прозрачной концепции транзакций ИБ въехать в "мутную" неявную транзакцию мсскл было крайне сложно (может быть возраст сказался). Особенно  меня колбасило от вложенности транзакция и неявных транзакций.

Но ничего, привык.

ИМХО, чтобы понять принцип транзакций сервера, нужно прежде всего "въехать" в его "виртуальность", т.е. способ представления данных БД для конкретного клиента (соединения).
Если ИБ есть версионник и хранит версии записей ДЛЯ КАЖДОЙ ТРАНЗАКЦИИ, то мсскл - блокировочник и "пасет" клиента в целом, т.е. коннект.

Возможно, написал коряво, но все-таки истина, ИМХО, где-то здесь ;)


 
turbouser ©   (2009-06-10 23:21) [44]


> MsGuns ©   (10.06.09 23:13) [43]


> Потом переехал на мсскл.

+1 После ib/fb - сущий ужас :(


 
Игорь Шевченко ©   (2009-06-10 23:29) [45]

MsGuns ©   (10.06.09 23:13) [43]
turbouser ©   (10.06.09 23:21) [44]

Что лишний раз подтверждает тезис о трудоемкости и часто бессмысленности написания приложений, абстрагированных от СУБД (дескать, чуть слой доступа к данным подкрутим и все будет работать). Фиги. Не будет или не все или не так, как хотелось. Разумеется, речь не идет о тривиальных приложениях.


 
MsGuns ©   (2009-06-10 23:39) [46]

Была статья в свое время Акопьянца "Блеск и нищета клиент-серверных технологий" - она в свое время направила меня на путь истинный.

Сегодня она висит у нас в отделе на самом видном месте. Каждого нового сотрудника первым делом заставляю штудировать и читать до полного проникновения.


 
MsGuns ©   (2009-06-10 23:40) [47]

Кстати, а ведь жив, курилка ;)

http://www.computerra.ru/offline/1999/302/3766/print.html


 
Игорь Шевченко ©   (2009-06-10 23:54) [48]

MsGuns ©   (10.06.09 23:40) [47]

Благодарю. А можно ссылки на остальные части ?


 
MsGuns ©   (2009-06-11 09:14) [49]

Вечером отправлю тебе полную статью по почте, ежели твое мыло актуально
С работы сделать этого не могу ибо тут свои правила :)


 
TIniFile   (2009-06-11 09:26) [50]


> А можно ссылки на остальные части ?


http://akop.ru/personal/1856


 
vuk ©   (2009-06-11 11:29) [51]

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


 
PEAKTOP ©   (2009-06-11 11:43) [52]

> Если ИБ есть версионник и хранит версии записей ДЛЯ КАЖДОЙ ТРАНЗАКЦИИ

Это есть не совсем так. Все зависит от уровня изоляции транзакции и того, что эта транзакция делает (только чтение или чтение/запись). Давайте рассмотрим варианты.

Вариант № 1: транзакция isc_tpb_read_committed + isc_tpb_read, то она только читает данные с сервера и на сервере не создаются новые версии записей. При этом:
1) если в параметрах стоит isc_tpb_rec_version, то будут читаться данные от самой последней закоммитченной транзакции.
2) если же будет установлен isc_tpb_no_rec_version, то будет читаться самая последняя версия записей, даже если она принадлежит еще незакоммитченной транзакции.

Вариант № 2 и 3: транзакция isc_tpb_concurrency+isc_tpb_read (еще ее называют SNAPSHOT), то старт ее единственной тоже не приведет к появлению новых версий записей. Зато если после старта этой транзакции стартанет другая (третья, десятая) с любым уровнем изоляции (кроме isc_tpb_read_committed+isc_tpb_read), то версии записей будут плодится как кролики, т.к. серверу нужно будет хранить версию записей на момент старта ЭТОЙ транзакции. А если эта транзакция еще будет и isc_tpb_concurrency+isc_tpb_write (это значение по-умолчанию, когда в любых компонентах доступа не заполнено свойство T<X>Transaction.Params:TStrings), то ко всем вышеперечисленным прелестям добавляются еще и возможные deadlock-и.

Вариант № 4: транзакция isc_tpb_consistency+isc_tpb_write. Лично я бы рекомендовал использовать этот уровень изоляции исключительно для операторов INSERT/UPDATE/DELETE и DDL, т.к. данная транзакция создает новую версию записей "палюбому". А элементарный SELECT * FROM TABLE_NAME (за звездочку в SELECT вообще надо бить молотком по пальцам) в рамках этой транзакции приведет к появлению новой версии записей для всей таблицы. А если в таблице 8-10 млн. записей, то... ну, вы понимаете... =)

Это я все к чему. Firebird версионник, но с настраиваемыми параметрами транзакций. Поэтому он может вести себя по-разному, в зависимости от случая. Из Firebird сделать M$ SQL получиться, для этого нужно использовать во всех наборах данных в свойстве T<X>DataSet.Transaction := T<X>DataBase.InternalTransaction, а свойство T<X>DataBase.InternalTransaction.Params выставить при старте приложения в isc_tpb_concurrency+isc_tpb_write. И мы получаем поведение блокировочника.


 
Sergey Masloff   (2009-06-11 11:49) [53]

PEAKTOP ©   (11.06.09 11:43) [52]
>2) если же будет установлен isc_tpb_no_rec_version, то будет читаться >самая последняя версия записей, даже если она принадлежит еще >незакоммитченной транзакции.

В FB нет (и надеюсь никогда не будет) dirty read

Эта опция читает последнюю ЗАКОММИЧЕНУЮ версию записи. Если после нее есть еще неподтвержденная версия то в зависимости от других параметров или ждем подтверждения/отката или если ожидание не установлено то выдается исключение


 
PEAKTOP ©   (2009-06-11 12:02) [54]

> В FB нет (и надеюсь никогда не будет) dirty read

Вот, только что у Влада Хорсуна спросил - таки да. Вы абсолютно правы.


 
Sergey13 ©   (2009-06-11 12:14) [55]

> [51] vuk ©   (11.06.09 11:29)

Все таки ей (статье) уже 10 лет. Тогда, ИМХО, многие истины еще не были азбучными.
Мне лично, при прочтении, было жалко, что не читал ее тогда.


 
Игорь Шевченко ©   (2009-06-11 12:37) [56]


> Мне лично, при прочтении, было жалко, что не читал ее тогда.


Осталось понять, какие статьи надо читать сейчас, чтобы через 10 лет не жалеть:)

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


 
Пит   (2009-06-11 13:18) [57]

PEAKTOP, спасибо больше за пост [52] и Сергею за уточнение.


 
sniknik ©   (2009-06-11 13:32) [58]

> Все таки ей (статье) уже 10 лет.
это да ... знать бы про нее раньше было бы подспорье в "войне" с TADOTable воспроизводящему десктопную идеологию (первое же "откровение" в статье, да еще с таким примером крушения банка), которую веду с 200x-ного года.
логики на словах у нас не воспринимают, но была бы ссылка на написанное... написанному почему то  верят, наверное привычка со времен СССР.

да и остальное полезно, даже сейчас много непонимающих, вот например любой кто задал вопрос в базах и не указал тип субд/используемый к ней доступ, должен прочитать про идентичность.

и про аксесс... прослеживается развитие, тогда это значит было только "фичей" аксесса, ну то как он обновляет данные в связанных структурах (хотя я и не согласен, что не понятно, просто непривычно для IB-шника), а теперь это есть в ADO... похоже тренировались "на кошках". ;)


 
sniknik ©   (2009-06-11 13:34) [59]

> должен прочитать про идентичность.
вернее про иллюзию идентичности в статье.


 
Sergey13 ©   (2009-06-11 13:47) [60]

> [56] Игорь Шевченко ©   (11.06.09 12:37)
> Осталось понять, какие статьи надо читать сейчас, чтобы
> через 10 лет не жалеть:)

Лишь бы не инструкцию по сборке/разборке автомата. 8-)
Сейчас то все таки проще. Интернет есть уже практически везде - рой сколько угодно. А тогда, в конце 90-х, с этим было (особенно в провинции) ой как не просто. Да и книг в магазах было все таки значительно меньше. Поэтому путь проб и ошибок был практически единственным из доступных.


 
vuk ©   (2009-06-11 14:02) [61]

to Sergey13 ©   (11.06.09 12:14) [55]:
>Все таки ей (статье) уже 10 лет. Тогда, ИМХО,
>многие истины еще не были азбучными.
Не, если сидеть под файлсерверными базами, то да, наверное не были. Я, насколько себя помню, тогда уже под MS SQL писал. И никаких иллюзий не было. Так что мне что тогда, что сейчас, ничего нового в той статье не открылось бы.


 
sniknik ©   (2009-06-11 14:02) [62]

> Интернет есть уже практически везде
А помните голодные годы? Интернет по карточкам...


 
sniknik ©   (2009-06-11 14:08) [63]

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


 
Игорь Шевченко ©   (2009-06-11 14:08) [64]

vuk ©   (11.06.09 14:02) [61]

Я в те годы под Оракл и под Interbase писал. Но иллюзии были не сколько у программистов, сколько у потенциальных заказчиков. Может и мне нового не открылось бы, но в статье, на мой взгляд, все очень удачно собрано вместе.


 
Игорь Шевченко ©   (2009-06-11 14:09) [65]


> А помните голодные годы? Интернет по карточкам...


а за каждой карточкой 5 км в гору зимой по гололеду


 
Игорь Шевченко ©   (2009-06-11 14:15) [66]

И вообще - транзакции, фигакции, пустое это все.
Вот как надо делать системы:

http://www.sql.ru/forum/actualthread.aspx?bid=9&tid=669844&pg=1


 
pasha_golub ©   (2009-06-11 14:24) [67]


>
> <OFFTOP>
> Ув. pasha_golub, можно личный вопрос ? А во сколько ты родился
> ? Я в 10:00 утра.
> День, думаю, уточнять не надо. =))
> </OFFTOP>
>

Полдень.


 
Sergey13 ©   (2009-06-11 14:27) [68]

> [61] vuk ©   (11.06.09 14:02)
> Не, если сидеть под файлсерверными базами, то да, наверное не были.

А я тогда как раз с Клиппера на Делфийского Оракула переползал. С трудом.


 
pasha_golub ©   (2009-06-11 14:33) [69]

Для мозгов переползание с файлсерверного чуда трудно дается. По себе помню. Буря прямо внутре.


 
sniknik ©   (2009-06-11 14:55) [70]

> А я тогда как раз с Клиппера на Делфийского Оракула переползал. С трудом.
> Для мозгов переползание с файлсерверного чуда трудно дается. По себе помню. Буря прямо внутре.
да бросьте, нормально с фохпро на первасвиль "пересел".
сначала непривычно было, и только то, что нельзя напрямую таблицу отрыть/индекс ей назначить (начал естественно с этого), но как только "дошло", что работая с сервером работаешь не с самими таблицами, а по сути с другим приложением "дошло" и то, что все это совсем совсем другое и надо не "пересаживаться", а изучать новое. и в общем то все, "буря" кончилась, не начинаясь, буквально при первом прямом знакомстве (читал про сервер первасвиля, пока он у меня не появился, несколько дольше, но "осознания" этого простого факта не было, пока сам не "пощупал").
кстати потом это понимание, перенес и на компоненты ADO которые борланд делал именно для переходя с BDE (десктоп в основном) программ, ратуя за то, чтобы их убрать, а к ADO относится как к новому, и изучать именно то, что он есть, его родные компоненты, а не "привычные переходники" (старые привычки = новые глюки в новом).


 
vuk ©   (2009-06-11 16:28) [71]

to Игорь Шевченко ©   (11.06.09 14:08) [64] :
>Но иллюзии были не сколько у программистов, сколько
>у потенциальных заказчиков.
Потенциальный заказчик, начитавшись такого, скорее всего сделает вывод, что серверные БД - дерьмо и развод лохов на баппки. :)


 
MsGuns ©   (2009-06-11 16:37) [72]

Во как задела статья :)

Почему на стене объясню.

Практически 100% приходящих выпускников и практикантов (дипломников) нашего политеха имеют типичное файл-серверное мышление, старательно втоптанное в их чистые светлые головы преподавателями - "мастерами". Бороться с которым (мышлением) в одиночку ох как тяжко. А тут тнкул носом в стену, дал срок неделю-другую для воплощения прочитанного - и проверяй результат.
Как показывает практика - весьма эффективная метода.

Мне кажется, что подобная ситуация далеко не редкость. Более того, встречается чуть ли не повсеместно.


 
Игорь Шевченко ©   (2009-06-11 16:44) [73]

vuk ©   (11.06.09 16:28) [71]

Потенциальный заказчик таких статей не читает. Потенциальный заказчик, хочет, чтобы его задачи решались в приемлемое время. А исполнители заказчика хотят, чтобы был приемлемый отклик. Когда им объясняют, что приемлемый отклик будет за счет отсутствия привычных удобств (в ряде случаев), у них начинается внутренний конфликт. Иногда заказчик игнорирует мнений своих исполнителей, иногда нет :)


 
PEAKTOP ©   (2009-06-11 16:51) [74]

> Практически 100% приходящих выпускников и практикантов (дипломников)
> нашего политеха имеют типичное файл-серверное мышление,
> старательно втоптанное в их чистые светлые головы преподавателями
> - "мастерами"


+ 1 000 000


-- Как я Вас понимаю...
-- Нет, Вы не понимаете...
-- Я отлично Вас понимаю...
.......
(с) Реклама по ящику


Обратное "размагничивание" мозгов выпускников - это отдельная тема. И очень даже не юмора. Особенно когда их старательно "намагничивали" в течение пяти лет придурки, оставшиеся на уровне развития технологий середины 90-х годов. У нас в провинции это особенно актуально.


 
PEAKTOP ©   (2009-06-11 16:57) [75]

> pasha_golub ©   (11.06.09 14:24) [67]
>
> Полдень.
>


Значит, на пару часов младше :)))))


 
vuk ©   (2009-06-11 19:20) [76]

to PEAKTOP ©   (11.06.09 16:51) [74]
>Особенно когда их старательно "намагничивали"
>в течение пяти лет придурки, оставшиеся на уровне
>развития технологий середины 90-х годов.
А, собственно, кто мешал этим выпускникам самим поинтересоваться, что же там нынче на дворе происходит? Их в яндексе поголовно забанили?


 
PEAKTOP ©   (2009-06-11 19:58) [77]

> кто мешал этим выпускникам самим поинтересоваться

Да кто его знает...
Но, как говорил первый президент Украины Л.М.Кравчук "Имеем то, что имеем..."
В условиях 200 000 города с единственным ВУЗом, готовящим по специальности, выбирать особенно не приходится.

Приходится "перезатачивать" !
=))))


 
MsGuns ©   (2009-06-11 20:55) [78]

>vuk ©   (11.06.09 19:20) [76]
>А, собственно, кто мешал этим выпускникам самим поинтересоваться, что >же там нынче на дворе происходит? Их в яндексе поголовно забанили?

Я, конечно, извиняюсь, но..
Такое впечатление, что Вы учились в Массачусетском технологическом ;)


 
Игорь Шевченко ©   (2009-06-11 20:58) [79]

Я вот учился вообще не по программированию, и как ни странно, Яндекса в то время ну нифига не было. И за каждой книжкой в библиотеку по 5 км в гору зимой по гололеду, да еще очередь отстаивать. И неплохо, надо признать, при всем при этом выучился программировать.


 
MsGuns ©   (2009-06-11 21:04) [80]

Так веь на одного Шевченко триста тридцать три Ковалей и Петренок ;)))



Страницы: 1 2 3 4 вся ветка

Форум: "Прочее";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.026 c
1-1212166661
MIOW
2008-05-30 20:57
2009.08.16
Портирование кода программы на Turbo Pascal в Delphi


2-1245298026
novai
2009-06-18 08:07
2009.08.16
Как изменить цвет полос прокрутки в TRichEdit?


2-1245167149
worldmen
2009-06-16 19:45
2009.08.16
Бастро посчитать в TEdit сумму


15-1245357007
Юрий
2009-06-19 00:30
2009.08.16
С днем рождения ! 19 июня 2009 пятница


15-1245308606
тимохов
2009-06-18 11:03
2009.08.16
Ограничения VS 2088 Express и MSSQL Server 2008 Express





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский