Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сколько транзакций? 
:(
    Опции темы
Aprol
Дата 30.7.2007, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



КАк лучше делать?
Использовать одну транзакцию в приложении или несколько, по одной для каждого компонента?
PM MAIL   Вверх
Marduk
Дата 30.7.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 9.4.2007

Репутация: нет
Всего: 2



лучше использовать по одной транзакции на каждую операцию Insert, update, delete
PM MAIL ICQ   Вверх
Akella
Дата 30.7.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



на этот вопрос сложно ответить однозначно, читающую можно одну-две, а пишущих можно и больше,
Я разделил, например, логически (для транзакций) программу на несколько модулей: в каждом модуле своя пишущая транзакция.
Пример: в приложении может быть открыто несколько окон редактирования. Пользователь вносит данные в одно и нажимает сохранить, транзакция подтверждается и закрывается. Если одна пишущая транзакция, то во втором окне данные не сохранятся, т.к. ты закрыл транзакцию, а команду dataset.post не выполнил. Если окно редактирования в один момент времени может быть только одно, то и нет смысла создавать несколько транзакций.
PM MAIL   Вверх
DimW
Дата 30.7.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



Цитата(Aprol @  30.7.2007,  04:21 Найти цитируемый пост)
КАк лучше

лучше для кого? для тебя, юзера или сервера БД?

и ненадейся получить однозначный ответ т.к. ты не указал СУБД, а работа разных СУБД в корне не одинакова.
к примеру для ms sql приветствуются короткие таранзакции т.к. он блокиратор(хотя был какой то шаг к версионности в последних версиях), причем может заблокировать не только редактируюмую записть, но и таблицу полностью, отсуда остальные юзеры "курят"...

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

и вобще решая задачу нужно отталкиваться от конкретной ситуации.

что бы не быть голословным приведу пример по ораклу:

Код

begin
for i in 1..1000
loop
  insert into test
         (name1, name2, name3, name4, name5)
  values
         ('1111111111111111111111111111111'
         ,'2222222222222222222222222222222'
         ,'3333333333333333333333333333333'
         ,'4444444444444444444444444444444'
         ,'5555555555555555555555555555555'); 
end loop;
 commit; 
end;

 
вот эта вставка с одной транзакцией отработала за 0,110 секунды

таже вставка но разбитая на 1000 транзакций:
Код

begin
for i in 1..1000
loop
  insert into test
         (name1, name2, name3, name4, name5)
  values
         ('1111111111111111111111111111111'
         ,'2222222222222222222222222222222'
         ,'3333333333333333333333333333333'
         ,'4444444444444444444444444444444'
         ,'5555555555555555555555555555555'); 
  commit;       
end loop;
end;


отработала за 0,181

а при вставке 10 000 записей зазница очень ощутимая:
одной транзакцией: 0,437
10 000 транзакций: 1,781

это говорит о том что большую часть времени сервер трудился что бы зафиксировать изменения в таблице.


Это сообщение отредактировал(а) DimW - 1.8.2007, 08:02
PM MAIL ICQ   Вверх
Aprol
Дата 1.8.2007, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Субд firebird
вобщем буду использовать пару транзакций одну на чтение другую на запись.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.