По умолчанию транзакция, пишущая или читающая?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

По умолчанию транзакция, пишущая или читающая?

Сообщение студент-практикант » 26 янв 2008, 14:03

Люди добрые подскажите пожалуйста!
Я использую IBX и на форму (Delphi) кидаю транзакцию, т.е. там уже прописаны параметры транзакции, она по умолчанию какая, пишущая или читающая?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 26 янв 2008, 16:17

Это хит. Может, не всех времён и народов, но сезона - точно. На Object Inspector уже взглянуть лень...

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Re: По умолчанию транзакция, пишущая или читающая?

Сообщение Kotъ-Begemotъ » 26 янв 2008, 19:16

студент-практикант писал(а):Люди добрые подскажите пожалуйста!
Я использую IBX и на форму (Delphi) кидаю транзакцию, т.е. там уже прописаны параметры транзакции, она по умолчанию какая, пишущая или читающая?
А что такое "пишущая" или "читающая"? В IBX есть для датасета ДВА свойства для транзакций как в FIB+ типа DefaultTransaction и UpdateTransaction? Или свойство для задания транзакции у датасета одно? Тогда от датасета зависит будет транзакция читающей или пишущей :))) Другое дело что можно задать уровень изоляции транзакции и дополнительные параметры буфера транзакции (TPB).
А пока ты на форму кинул только транзакцию, она у тебя еще ни такая ни сякая :))))))

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 янв 2008, 21:11

можно было не разводить псевдо-обсуждение, а указать на www.ibase.ru/devinfo/ibx.htm , и спросить, что там непонятно.

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 27 янв 2008, 15:16

У IBTransaction На Object Inspector я уже взглянул, а точнее я еще взглянул на прописанные параметры транзакции и что мы видим по умолчанию

read_committed
rec_version
nowait

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

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 27 янв 2008, 15:30

По указанному адресу

www.ibase.ru/devinfo/ibx.htm

я там тоже искал раньше, я не нашел ответа на мой вопрос :cry: печально, мне просто интересно это знать

Esperito
Сообщения: 10
Зарегистрирован: 09 авг 2007, 19:23

Сообщение Esperito » 27 янв 2008, 18:29

2 студент-практикант: может читать, может писать (read write). Это какая, пишущая? :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 янв 2008, 20:54

я там тоже искал раньше, я не нашел ответа на мой вопрос
что ж ты врешь, причем не краснея?

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

www.ibase.ru/devinfo/ibx.htm
TIBTransaction
...
В параметрах транзакции (картинка слева, вызывается по двойному клику на компоненте, или при нажатии кнопки ... в свойстве Params) указываются константы, соответствующие IB API (без префикса isc_tpb_). Если параметры не указаны (пусто), то IBX использует параметры транзакции по умолчанию, которые соответствуют уровню изолированности snapshot+wait (FIBPlus, в отличие от IBX, с пустыми параметрами стартует транзакцию "read write read_committed no wait"). То есть, в транзакции с такими параметрами не будут видны никакие изменения базы данных (кроме тех, которые выполнены в этой транзакции).
...

Я не знаю, как надо читать, чтобы не прочитать.
Читаю вслух:
1. если параметры в IBTransaction не указаны, то используются параметры транзакции по умолчанию (описано в ibtrans.htm). Именно так, со ссылкой, и написано в процитированном абзаце.
2. www.ibase.ru/devinfo/ibtrans.htm :
читаем про интересующий тебя read write:
"READ WRITE / READ ONLY (константы write и read) - операторы внутри транзакции могут или не могут модифицировать данные. По умолчанию READ WRITE, т.е. допускается и чтение и запись."

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 янв 2008, 21:01

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

так что статью чуть дополню, там где ты "не нашел".
Если я правильно понял, ты утюжил текст про двутранзакционный датасет, никак не понимая что делает транзакцию пишущей, а что читающей. И почему-то ты игнорировал описание параметров транзакций.

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 27 янв 2008, 21:28

Да, да, я читал.... В статье написано -->
Если параметры не указаны (пусто), то IBX использует параметры транзакции по умолчанию, которые соответствуют уровню изолированности snapshot+wait

Но!.... ПУСТО и ПО УМОЛЧАНИЮ вещи разные! У нас параметры указаны, указаны по умолчанию! У нас не пусто! У нас совсем даже не пусто, поскольку у нас по умолчанию мы видим следующее в параметрах транзакции...

read_committed
rec_version
nowait

Мы не видим пусто, а видим целые 3 строки и стало быть не пусто!
Давайте спокойно и рассудительно разберемся! :? Ну е мое надо же выяснить! :D

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 27 янв 2008, 21:35

Да вообщем то значительно все проще... Вот транзакция

read_committed
rec_version
nowait

она какая пишущая или читающая, да или нет, какая?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 28 янв 2008, 07:06

студент-практикант писал(а):Да вообщем то значительно все проще... Вот транзакция

read_committed
rec_version
nowait

она какая пишущая или читающая, да или нет, какая?
она ни да, она ни нет :) ......... абзац :(
ты доведешь kdv до инфаркта, он же тебе даже избранное процитировал, чего же боле?
По умолчанию READ WRITE, т.е. допускается и чтение и запись."
на пальцах: если в параметрах не указано явно READ или WRITE, значит подразумевается WRITE

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 янв 2008, 10:05

Но!.... ПУСТО и ПО УМОЛЧАНИЮ вещи разные! У нас параметры указаны, указаны по умолчанию!
ясно. почти диагноз. :)

объясняю по пунктам.

1. по умолчанию - это когда НЕ указано.
2. в IB API у Transaction Parameter Block есть умолчательные значения. Которые перечислены в ibtrans.htm. Я уже процитировал, что READ WRITE - ПО УМОЛЧАНИЮ.
3. компоненты, конечно, могут перекрывать пустой TPB. То есть, если он не указан, задавать свой. Но - при указании TPB в IBTransaction к этим параметрам никогда ничего лишнего не добавляется. Поэтому если что-то не указано, то оно ПО УМОЛЧАНИЮ, см пункты 1 и 2.
4. когда параметры указаны - это НЕ ПО УМОЛЧАНИЮ. Если параметры отличаются от умолчательных. Ферштейн?
Допустим, ты можешь написать в IBTransaction.Params

concurrency

и этот параметр передастся на сервер при старте транзакции, но это то же самое что и без параметров, т.е. по умолчанию.
ты можешь указать
read committed
и это будет НЕ ПО УМОЛЧАНИЮ.
она какая пишущая или читающая, да или нет, какая?
где ты в этих параметрах видишь read write ? Нету? Значит read write ПО УМОЛЧАНИЮ!

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 28 янв 2008, 10:57


Допустим, ты можешь написать в IBTransaction.Params

concurrency

это то же самое что и без параметров, т.е. ПО УМОЛЧАНИЮ.
concurrency ПО УМОЛЧАНИЮ, т.е. сдесь параметры и read и write
ты можешь указать

read committed

и это будет НЕ ПО УМОЛЧАНИЮ.
е мое а сдесь НЕ ПО УМОЛЧАНИЮ.... тут она какая тогда?
или тут по принципу, если вообще ничего не написано какая пишущая или читающая, то по умолчанию она будет и та и другая, и пишущая и читающая. так да?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 28 янв 2008, 11:29

студент-практикант писал(а):
е мое а сдесь НЕ ПО УМОЛЧАНИЮ.... тут она какая тогда?
или тут по принципу, если вообще ничего не написано какая пишущая или читающая, то по умолчанию она будет и та и другая, и пишущая и читающая. так да?
да :D по умолчанию и читает и пишет (и рисует) :D

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 янв 2008, 12:03

е мое а сдесь НЕ ПО УМОЛЧАНИЮ.... тут она какая тогда?
мда. я думал что все будет лучше....

смотри еще раз www.ibase.ru/devinfo/ibtrans.htm

итак. при старте транзакции, если НИЧЕГО не задано в ее параметрах, используются параметры по умолчанию.
Что это означает? Это означает что когда среди параметров транзакции сервер какой-либо параметр НЕ ВСТРЕЧАЕТ, то он использует ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ.

Умолчательные параметры транзакции описаны в той статье. Это
read write
concurrency
wait

Еще раз - если в параметрах транзакции пусто, то сервер будет использовать ИМЕННО ЭТИ ПАРАМЕТРЫ, которые я указал выше - read write, concurrency, wait.

При этом эти параметры можно указывать все, по отдельности, или не указывать вовсе - ничего не изменится.

Дальше. Чтобы ИЗМЕНИТЬ параметры транзакции, нужно задать НЕУМОЛЧАТЕЛЬНЫЕ значения.

Например, хочется wait сменить на nowait - надо УКАЗАТЬ NOWAIT.
Хочется сменить concurrency на read committed - укажи read committed.
Хочешь сменить read write на read - укажи READ.

Возможно, путаницу для тебя вносит само название READ_COMMITTED.
Но это УРОВЕНЬ ИЗОЛИРОВАННОСТИ, а не режим чтения или записи.

У read_committed есть также два режима - no_rec_version по умолчанию, и rec_version не по умолчанию.

Примеры:

указываем
read_committed

будет
read write
read_committed
wait

указываем
read
read_committed
nowait


- будет как сказано: только чтение (запись запрещена), уровень изолированности read committed (видимость закомиченных записей), с немедленной выдачей сообщений о конфликтах блокировок.

ТЕПЕРЬ ДОШЛО? :)

update: статью, конечно, я в таком ключе менять не буду. :) результат непонимания - абсолютно невнимательное чтение ibtrans.htm, а именно описания параметров транзакций. Ты подчеркивание у read_committed видишь? если да, то почему ты его отдельно воспринимаешь? Ты где-нибудь видел фразу, что "read_committed" это транзакция только для чтения?

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 28 янв 2008, 18:36

Ну вот теперь я счастлив! :D
Стоило только объяснить :)
Возможно, путаницу для тебя вносит само название READ_COMMITTED.
Но это УРОВЕНЬ ИЗОЛИРОВАННОСТИ, а не режим чтения или записи.
Да, я знаю :)
Ты где-нибудь видел фразу, что "read_committed" это транзакция только для чтения?
Не, не видел и не претендую на сие немного странное утверждение :)
С чего ты взял...
Ну теперь хорошо, выяснили, а то не знал и прям даже как-то печально было! Ох, прям гора с плеч!!!

студент-практикант
Сообщения: 60
Зарегистрирован: 14 дек 2007, 10:56

Сообщение студент-практикант » 28 янв 2008, 18:58

И чего так все возмущаются, я не понимаю! Ведь тоже сами когда то были маленькими, ничего не знали, а старшие товарищи учили!!! когда были грудничками ведь тоже не знали про параметры транзакции, сами когда были грудничком даже Firebird слова такого не знали! только видимо забыли уже те далекие времена...

Esperito
Сообщения: 10
Зарегистрирован: 09 авг 2007, 19:23

Сообщение Esperito » 28 янв 2008, 19:11

Лично я, когда был маленьким, сначала курил мануалы и исходники, а уж потом задавал вопросы. Да и до сих пор так делаю :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 янв 2008, 20:04

Ведь тоже сами когда то были маленькими, ничего не знали, а старшие товарищи учили!!!
черта с два. приходилось читать с трудом добытые ПЕЧАТНЫЕ мануалы. На английском. Или разбираться методом тыка.
И чего так все возмущаются, я не понимаю!
вот потому и не понимаешь. Сейчас т дока есть, на русском, книги, статьи в интернете, форумы... И, как бы, еще и приходится объяснять :)

Ответить