Главная страница
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.011 c
4-100095
Miwa
2001-11-30 20:07
2002.01.31
SendMessage


6-100027
Hawk
2001-11-06 19:44
2002.01.31
Как определить IP компа в интернете??


1-99987
Fast
2002-01-14 19:48
2002.01.31
ScreenToClient


3-99868
AlexP
2001-12-26 22:09
2002.01.31
Mетафайлы


3-99847
Koks
2001-12-21 11:44
2002.01.31
FieldByName