Форум: "Базы";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c