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

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

Firebird+многопоточность [D7, FireBird]


Kobylyansky ©   (2010-04-23 11:41:00) 

Если я в каждом потоке использую два TiBquery которые создаю в runtime тогда мне для каждого TiBquery нада создавать отдельную TIbDataBase и TIbTransaction, или TIbDataBase - одну для обоих TiBquery, а TIbTransaction - для каждого разную??? И для чего в TiBquery свойство Tranzaction, если транзакция есть в TIBDataBase??


Loginov Dmitry   (2010-04-27 12:16:00) [1]


> Недопустимо с точки зрения кривости чего, сервера или клиента
> ?


Сервер здесь не причем.
Ограничения связаны с реализацией IBX.

В принципе, все стандартные компоненты, наследуемые от TCustomConnection, страдают той же болезнью (в меньшей степени страдает TDataBase).


MsGuns   (2010-04-27 11:33:00) [2]

>Loginov Dmitry ©   (24.04.10 00:20) [3]
>- одновременно работать с одним подключением из нескольких потоков - недопустимо.

Недопустимо с точки зрения кривости чего, сервера или клиента ?
Каким боком сервер узнаЁт, что два запроса, поступающие от одного коннекта, выполняются на клиенте в разных потоках, и даже если узнает, какие проблемы этот факт у него вызывает ?

Если вопросы покажутся "ламерскими" на всякий случай внесу ясность - с птицей работал давно


Игорь Шевченко   (2010-04-27 00:36:00) [3]

А с ораклом можно...Клиент позволяет. Может у FB тоже клиент умеет ?


Loginov Dmitry   (2010-04-26 21:37:00) [4]


> А в разных потоках нельзя использовать FireBird согласно
> утверждениям в обсуждение. Я естественно в подобное не верю,
>  даже в рамках одной программ, поскольку это дурдом.


Анатолий, перечитайте ветку еще разок.


Anatoly Podgoretsky   (2010-04-26 12:14:00) [5]

> Loginov Dmitry  (26.04.2010 11:25:11)  [11]

Так каждая программа, это как минимум один поток. А в разных потоках нельзя использовать FireBird согласно утверждениям в обсуждение. Я естественно в подобное не верю, даже в рамках одной программ, поскольку это дурдом.


Loginov Dmitry   (2010-04-26 11:25:00) [6]


> То есть на компьютере можно запускать только одну программу.


Зачем?
Сколько угодно.


Anatoly Podgoretsky   (2010-04-26 08:48:00) [7]

> Loginov Dmitry  (24.04.2010 00:20:03)  [3]

То есть на компьютере можно запускать только одну программу.


Дмитрий Белькевич   (2010-04-25 11:57:00) [8]


>  при этом не нужно держать подключения долгое время. Только
> на время выполнения требуемого запроса.


Еще интересное. Замечено, что когда коннекты подключены, из параллельного потока, долго (недели), то, после некоторого момента, по непонятной причине скорость выполнения запросов начинает сильно (иногда - на порядок) падать.

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

IBX 7.11, D7, FB 2.0.1.


Loginov Dmitry   (2010-04-24 12:05:00) [9]

И еще:
Библиотека IBX, идущая в составе D7, не рассчитана на многопоточность.

Необходимо ее обновить до версии 7.11. Скачать можно с www.ibase.ru


Loginov Dmitry   (2010-04-24 08:17:00) [10]


> Наверное я что-то неправильно делал :)


Наверное.
На 1-м ядре прога годами может работать безо всяких ошибок.
Интересное начинается, когда начинаешь тестировать это добро на многоядерном.


turbouser   (2010-04-24 00:32:00) [11]


> Loginov Dmitry ©   (24.04.10 00:27) [5]

Наверное я что-то неправильно делал :)


Loginov Dmitry   (2010-04-24 00:27:00) [12]


> Вполне допустимо.. Косяков не было.. Хотя, давно это было.
> .


Вам просто повезло. Косяки были, есть и будут.
Сами IBX-ные компоненты не рассчитаны на такой режим работы.


turbouser   (2010-04-24 00:22:00) [13]


> Loginov Dmitry ©   (24.04.10 00:20) [3]


> - одновременно работать с одним подключением из нескольких
> потоков - недопустимо.

Вполне допустимо.. Косяков не было.. Хотя, давно это было.. :(


Loginov Dmitry   (2010-04-24 00:20:00) [14]

Добавлю лишь следующее:
- одновременно работать с одним подключением из нескольких потоков - недопустимо.
- динамическое подключение к БД (и отключение) через TIbDataBase.Connected := True / False ОБЯЗАТЕЛЬНОдолжно быть защищено с помощью критической секции (либо (что хуже) с помощью других способов синхронизации).
- не обязательно для каждого подключения создавать TIbDataBase. Можно использовать пул подключений.
- при этомне нужно держать подключения долгое время. Только на время выполнения требуемого запроса.


turbouser   (2010-04-23 11:59:00) [15]

см.
http://ibase.ru/devinfo/ibx.htm
да и вообще - http://ibase.ru/


turbouser   (2010-04-23 11:57:00) [16]


> Kobylyansky   (23.04.10 11:41)  


> нада создавать отдельную TIbDataBase

нинада отдельную.

> TIbTransaction - для каждого разную???

Если TiBquery только для чтения данных - достаточно одной readonly транзакции для всех. Если read/write - то лучше отдельные.


Наверх

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