Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
ВнизМногопоточность при работе с базой Найти похожие ветки
← →
leonon © (2004-08-04 17:43) [0]Хочу сделать HTTP сервер, который взаимодействовал бы с базой данных. При формировании ответа на запрос пользователя работает примерно такой код:
var
Query : TIBQuery;
begin
Query := TIBQuery.Create(Nil);
try
Query.DatabaseName := IBDatabase;
Query.SQL.Add(какой-то запрос);
Query.Open;
{обработка данных}
finally
if Query.Active then Query.Close;
FreeAndNil(Query);
end;
end;
Все работает просто замечательно, если коннектится 1 пользователь. Но если их больше и одновременно запрашивают документы, то вылезает ошибка EIBError - немогу прочитать данные из соединения. Как быть?
← →
dtm © (2004-08-04 17:48) [1]А по-больше информации?
Не на Yaffil Personal случайно работаешь?
← →
leonon © (2004-08-04 17:50) [2]Нет с FireBird 1.02
← →
dtm © (2004-08-04 17:55) [3]А что за "НТТР сервер"? =)
← →
leonon © (2004-08-04 17:58) [4]Использую библиотеку Indy. В качестве сервера выступает TIdHTTPServer.
← →
dtm © (2004-08-04 18:01) [5]Так тебе Web - сервер нужен или App Server?
← →
leonon © (2004-08-04 18:09) [6]Мне нужно, что бы мое приложение выступало в роли сервера приложений, осуществляло всю бизнес-логику по работе с базой, а ответы кидало HTML документами, ну и соответственно обрабатывало запросы клиентов. Т.е. на их стороне обычный броузер, посредством которого они с моим сервером работают.
← →
Desdechado © (2004-08-04 18:15) [7]небе на каждого пользователя придется открывать отдельное соединение или же ставить их в очередь и обрабатывать последовательно. Это потому, что IB-клиент не является tread-safe, т.е. через одно подключение 2 параллельных запроса подерутся.
← →
leonon © (2004-08-04 18:17) [8]Я так и думал... :(((
← →
dtm © (2004-08-04 18:20) [9]Ты когда будешь создавать (или уже создавал) библиотеку типов сервера приложений, укажи в графе Instance значение Multi-threaded.
Хотя конкретный выбор этого значения зависит от назначеия программы и ещё многих факторов.
← →
leonon © (2004-08-04 18:24) [10]Хорошо, тогда такой вопрос, что лучше ставить их в очередь, или делать параллельные соединения?
← →
dtm © (2004-08-04 19:02) [11]Instancing. Use the instancing combo box to indicate how your remote data module application is launched. The following table lists the possible values:
Value Meaning
1. Internal
The remote data module is created in an in-process server. Choose this option when creating a remote data module as part of an active library (DLL).
2. Single Instance
Only a single instance of the remote data module is created for each executable. Each client connection launches its own instance of the executable. The remote data module instance is therefore dedicated to a single client.
3. Multiple Instance
A single instance of the application (process) instantiates all remote data modules created for clients. Each remote data module is dedicated to a single client connection, but they all share the same process space.
← →
Desdechado © (2004-08-04 19:25) [12][10]
зависит от интенсивности и тяжести запросов, а также от кол-ва юзеров
← →
leonon © (2004-08-04 19:38) [13]Пользователей 50-70, запросы средней тяжести. Приложение общается с базой локально. Сервер 1G Xeon
← →
Desdechado © (2004-08-05 11:12) [14]а теперь построй мат модель твоей СМО и проанализируй, достаточно ли одного обслуживающего прибора или надо несколько при известной интенсивности запросов, распределении времени обслуживания и ограничений на него
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.061 c