Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-99937
Artem K.
2002-01-12 13:51
2002.01.31
Добавление TChartSeries во время выполнения программы


4-100116
Miwa
2001-11-30 16:25
2002.01.31
Вывод сообщения


6-100020
Unforgiven
2001-11-08 02:36
2002.01.31
Работа с майлслотами


3-99867
Andrey196
2001-12-26 20:12
2002.01.31
Где взять отфильтрированные данные таблици


3-99836
Сержик
2001-12-26 09:13
2002.01.31
Как спрятать путь к базе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский