Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.31;
Скачать: CL | DM;

Вниз

Query для каждого потока...   Найти похожие ветки 

 
Олег Лаукарт   (2001-12-25 11:07) [0]

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

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


 
panov ©   (2001-12-25 11:24) [1]

Посмотри в кладовке:
http://delphi.mastak.ru/cgi-bin/download.pl?get=990158073&n=0
В свое время мне понравилась эта библиотека.
Но если ты для подключения к БД используешь BDE, то количество подключений у тебя будет ограничено.

У меня для таких же целей используется такая архитектура(хотя и без вышеуказанной библиотеки):

Подключения к БД происходят один раз из нескольких потоков.
Для выполнения SQL динамически создаются потоки, в которых выбирается компонент БД, свободный в данный момент(не выполняется запрос), или ожидается, пока одна TDataBase из списка освободится.

После выполнения запроса данные передаются клиенту, используемый экземпляр TDataBase освобождается.

Плюс такой архитектуры: минимизировано время подключения к БД.
Минусы: пока не знаю:-)


 
Олег Лаукарт   (2001-12-25 11:28) [2]

Нужно ли и как в этой ситуации использовать Session.


 
panov ©   (2001-12-25 11:56) [3]

Да - для каждого экземпляра TDataBase указываешь сой TDataSession.


 
panov ©   (2001-12-25 11:57) [4]

Sorry - "TSession"


 
Олег Лаукарт   (2001-12-25 12:10) [5]

Хорошоб с БДЕ ситуация вроде ясна. Что делать если исполуешь dbExpress-овские TSQLConnection и TSQLClientDataSet. У них нет понятия сессии. Есть клонирование. Заменяет ли оно сессии БДЕ?


 
panov ©   (2001-12-25 13:03) [6]

Увы - тут я пас, Delphi6 у меня нет...


 
Олег Лаукарт   (2001-12-25 13:29) [7]

Как ты определяешь какой DataBase свободен? Через мьютекс?
Сортируешь ты какимто образом список баз? В некоторых случаях может быть полезным выдавать одному и томуже потоку один тотже Query с которым он работал в прошлый раз если таковой свободен (на всякий случай, может поможет :). можешь ли кинуть по почте какието исходники кроме указанной библиотеки ее я уже качаю?


 
panov ©   (2001-12-25 14:28) [8]

Лови исходники программы - на Delphi5.
Для чего написана - расскажу, если потребуется.
Кое-где коряво написано, м.б. и сам что посоветуешь мне.


 
petr_v_a ©   (2001-12-25 14:41) [9]

>panov я тоже хочу такие исходники :)


 
panov ©   (2001-12-25 15:04) [10]

Пишите по почте - отвечу.


 
Олег Лаукарт   (2001-12-25 15:31) [11]

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

Почему ты используешь именно GlobalAddAtom для блокирования? Почему не CriticalSection - традиции или есть основания?

В окне после Show я вместо BringToFront использую SetFocus.


 
panov ©   (2001-12-25 15:46) [12]

>Олег Лаукарт (25.12.01 15:31)

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

"Почему ты используешь именно GlobalAddAtom для блокирования? "
- Да сам не знаю...:-)

Для какой СУБД писать собираешься?


 
Олег Лаукарт   (2001-12-25 15:57) [13]

Хороший вопрос! должно работать независимо от базы. Запросы очень простые - выбрать запись и потом работать с полученной информацией. Удалять эти записи надо редко, но иногда надо. Если в процессе работы запись ктото удалит - не страшно - это входит в логику работы. Главный критерий скорость и память.


 
panov ©   (2001-12-25 16:16) [14]

Интересно было бы услышать подробнее о требованиях к задаче.
Может быть, еще бы какие мысли возникли.

У меня эта задача была написана как раз из требований кратковременности запросов(обработка запросов из CGI).
Поэтому интересно было бы подумать над другими применениями.



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

Текущий архив: 2002.01.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
7-100074
Win
2001-10-19 16:19
2002.01.31
Как прогу скопировать7


1-99947
Kaginava
2002-01-11 23:58
2002.01.31
как считывать строки из текстового DOS файла


1-100018
eraser
2002-01-15 14:38
2002.01.31
прерывание цикла


14-100050
Orest
2001-12-05 22:28
2002.01.31
GifAnimator, ОЧЕНЬ НУЖНО!!!!!!!!!!!!!!!!!!!


1-99926
NLO
2002-01-11 12:59
2002.01.31
OpenDialog с возможностью предосмотра