Уточнения по разделению транзакций ("читающая" / "пишущая")

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

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

Ответить
Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Уточнения по разделению транзакций ("читающая" / "пишущая")

Сообщение Дмитрий Б. » 13 дек 2013, 16:27

Здравствуйте.

Прочитал следующие статьи:
http://www.ibase.ru/devinfo/ibtrans.htm
http://www.ibase.ru/devinfo/ibx.htm
http://ibase.ru/devinfo/dontdoit.htm
http://ibase.ru/devinfo/utl.htm
после этого, кое-что стало понятнее, а что-то не очень.

Использую InterBase 7.0.0.206, C++ Builder RAD XE3
Давно хотел разобраться с разделением транзакций, но руки не доходили.
В DataModule компоненты TIBDatabase (IBDB), TIBTransaction (TR_R, TR_W), TIBDataSet (IBDS_DATA), TIBSQL (IBSQL).
В инспекторе объектов для IBDB устанавливаю DefaultTransaction в качестве TR_R.
Для TR_R - DefaultDatabase устанавливаю IBDB. Также задаю параметры в качестве читающей транзакции

Код: Выделить всё

read_committed
rec_version
read
Для IBDS_DATA - указываю IBDB и TR_R.

Затем для TR_W указываю IBDB.
Для IBSQL соответственно IBDB и TR_W.

Подскажите пожалуйста ответы на следующие вопросы:
1) Будет-ли влиять как-то на работу тот факт, что у IBDB в качестве DefaultTransaction указана TR_R, а не TR_W?
2) Обязательно-ли для TR_W указывать параметры, которые назначают данную транзакцию "пишущей" или нужно оставлять по умолчанию (чтение-запись). (Планирую редактирование данных производить стандартными компонентами, а не из DataControls.)
Если нужно, то как правильно будет и будет-ли правильно задать параметры таким образом:

Код: Выделить всё

read_committed
rec_version
write
wite
3) В компонентах, относящихся к TR_R нужно/не нужно указывать запросы на добавление/изменение/удаление данных или достаточно обойтись SelectSQL?
4) Как будут видны изменения данных в одной транзакции при изменении их в другой? Я имею ввиду, то что нужно-ли повторно выполнять запрос select в IBDS_DATA (TR_R) после изменения данных в IBSQL (TR_W) или это можно как-то настроить...? Или после завершения работы "пишущей" транзакции нужно "переоткрывать" запрос на выборку данных в компоненте привязанный к "читающей" транзакции?
5) Вопрос немножко не по теме: Можно-ли производить вставку данных (допустим при импорте) так сказать блоками, как это делается например в MySQL

Код: Выделить всё

insert into TB 
set (Fld1, Fld2, Fld3, ... FldN) 
values(Val1, Val2, Val3, ... ValN), (Val1, Val2, Val3, ... ValN), (Val1, Val2, Val3, ... ValN)
Чтобы за один ExecQuery (Post) "закинуть" целый "блок" данных? Или я тут, что-то напутал и такой возможности не существует или не имеет смысла?

P.S. Какие еще могут быть нюансы/грабли, на которые следует обратить внимание?

Спасибо.
С Уважением, Дмитрий.

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

Re: Уточнения по разделению транзакций ("читающая" / "пишуща

Сообщение kdv » 15 дек 2013, 17:40

1) Будет-ли влиять как-то на работу тот факт, что у IBDB в качестве DefaultTransaction указана TR_R, а не TR_W?
не будет. defaultTransaction это транзакция, в которой выполняются запросы, не привязанные явно к какой-то другой транзакции.
2) Обязательно-ли для TR_W указывать параметры, которые назначают данную транзакцию "пишущей" или нужно оставлять по умолчанию (чтение-запись)
никогда нельзя оставлять "параметры по умолчанию". IBTransaction.Params всегда должно быть заполнено (чем угодно), чтобы впоследствии было видно, какой уровень изолированности у этой транзакции. У разных наборов компонент "параметры по умолчанию" отличаются.
Если нужно, то как правильно будет и будет-ли правильно задать параметры таким образом
write не пишется, оно по умолчанию, явно указывается только read.
В компонентах, относящихся к TR_R нужно/не нужно указывать запросы на добавление/изменение/удаление данных или достаточно обойтись SelectSQL?
в read-транзакции такие запросы работать не будут, даже на уровне Prepare.
Можно-ли производить вставку данных (допустим при импорте) так сказать блоками
в IB/FB нет такой конструкции.

Дмитрий Б.
Сообщения: 56
Зарегистрирован: 05 дек 2007, 18:09

Re: Уточнения по разделению транзакций ("читающая" / "пишуща

Сообщение Дмитрий Б. » 16 дек 2013, 13:43

Спасибо большое, теперь все понятно.
С Уважением, Дмитрий.

Ответить