Midas, как избежать избыточности вычислений

desolator

только начинаю осваивать эту технологию,кратко проблема :клиент подключается к appserver'у , через pFIBClientDataSet вызывает ХП(или простой select * from) , appserver начинает открывать датасет и тянуть данные с FB сервера в него, потом отсылает их обратно клиенту через датасетпровайдера. получается дублирование запросов к базе т.к. 100 клиентов подключилось. и 100 раз выполнился запрос к базе.мне нужно чтобы датасет провайдер просто перекинул данные клиенту из заранее открытого датасета. датасет разместил бы на форме а датасет провайдеры в rdm ссылались бы на него.тогда при создании appservera я бы открыл датасет и больше обращений в базу небыло бы.какими свойствами/методами это можно добится ClientDataSet2.Open; - все равно переоткрывает датасет на appservere
17 ответов

desolator

desolator,100 клиентов будут просить Разные запросы.


desolator

Ваш appServer является СОМ объектом и Вы можете объявить и описать его собственные методы. Вызов такого метода из клиента не обязан чего либо переоткрывать. В самом методе доступны все датасеты сервера, посему можно сформировать из них чего надо и вернуть клиенту как результат.


desolator

датасет и тянуть данные с FB сервера в него, потом отсылает их обратно клиенту через датасетпровайдера. получается дублирование запросов к базе т.к. 100 клиентов подключилось. и 100 раз выполнился запрос к базе.
Как вариант: при старте сервера загрузить из таблицы все данные в свою потокобезопасную структуру (например динамический массив), а для провайдеров в событии OnGetData добавлять строки к DataSet (DataSet.Append; ......; DataSet.Post).Другой вариант: выставить у КлиентДатаСета DataSet PacketRecords>0, и не мучаться - нагрузка на сервер должна быть небольшой, но таблицы pFIBClientDataSet открыты будут долго.Вариант - один глобальный pFIBClientDataSet и куча клиентов - даже не рассматривай. Работать толком все равно не заставишь.


desolator

Вариант - один глобальный pFIBClientDataSet и куча клиентов - даже не рассматривай. Работать толком все равно не заставишь.
С этим конечно можно поизвращаться, если DCOM-сервер однопоточный, но для 100 клиентов он должен быть многопоточным.


desolator

Как вариант: при старте сервера загрузить из таблицы все данные в свою потокобезопасную структуру (например динамический массив)
У вас в ИС сколько таблиц на сервере? Одна? Тогда excell проще использовать.


desolator

только начинаю осваивать эту технологию
если начал, то полезно сначала прочитать:Странные мысли о 3-звенном приложении:http://www.sql.ru/forum/actualthread.aspx?tid=33967&hl=%f1%f2%f0%e0%ed%ed%fb%e5+%ec%fb%f1%**%e8ещё лучше начать с 2-х звенки - больше пользы будет.


desolator

если начал, то полезно сначала прочитать:Странные мысли о 3-звенном приложении:http://www.sql.ru/forum/actualthread.aspx?tid=33967&hl=%f1%f2%f0%e0%ed%ed%fb%e5+%ec%fb%f1%**%e8ещё лучше начать с 2-х звенки - больше пользы будет.
я начинал с 2-х звенки но сервер будет доступен по инету кому угодно. и проблемы были с управлением транзакциями и еще множество проблем которые в 3х звенки исчезают автоматом. поэтому 2-х звенная архитектура мне неподходит.


desolator

desolator,100 клиентов будут просить Разные запросы.
есть у меня такие данные которые обновляются раз в день или в неделю.


desolator

Ваш appServer является СОМ объектом и Вы можете объявить и описать его собственные методы. Вызов такого метода из клиента не обязан чего либо переоткрывать. В самом методе доступны все датасеты сервера, посему можно сформировать из них чего надо и вернуть клиенту как результат.
такой вариант мне подходит но минусы в этом есть:1.осваивая midas я рассчитывал на халяву) , т.е. нужно будет создавать методы , организовывать отправку результатов клиенту . хочется обойтись компонентами и их свойствами.а методы использовать как команды или функции возращающие чтонибудь маленькое (нетабличное)2. я не уверен, но данные между клиентдатасет и провайдердатасет уже идут в сжатом виде. т.е. экономия трафика.а когда метод возвращает результат нужно будет в ручную сжимать еще.если не найду выхода буду делать через методы.


desolator

desolator,100 клиентов будут просить Разные запросы.
к примеру больница оказывает мед.услуги есть справочник этих услуг, как администратор вбил в базу эти мед.услуги так уже 3 недели нечего неменяется.получается 100 медсестер открыла этот справочник ->сделалось 100 запросов, сделалось 100 копий датасета(в каждом потоке). и все это забило память серверу.на практике тормозов может и не заметно будет. но в теории это неверный подход явно.я пишу игру, мед услуги привел как пример, первое что пришло в голову по аналогии.проблема скорее всего тривиальная , как решают её профессионалы ?


desolator

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


desolator

только начинаю осваивать эту технологию...не стоит начинать осваивать технологию с решения надуманных проблему меня через один midas сервер работает около 150 пользователей. при этом взаимодействуют с ораклом, ms sql и кучей аксессовских баз


desolator

я пишу игру, мед услуги привел как пример, первое что пришло в голову по аналогии.
так бы и говорил 8-) Там другие законы, ЯП и форумы. Особенно для Web-игры.
проблема скорее всего тривиальная , как решают её профессионалы ?
Профи оперируют цифрами и фактами при возникновении проблемы.А также читают ссылки, которые приведены в топиках.Дополнительно улучшают ФУНКЦИОНАЛ проги с точки зрения пользователя, что бы он её купил.(за то что у тебя будет 3 звена никто кроме админа и программиста не узнает).Что за игра? Там ведь узкое место всегда в графике, а не в СУБД.


desolator

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


desolator

Petro123,игра простая 2д, пошаговая , online. что-то вроде смеси цивилизации и травиана.небраузерная. клиент -приложение win32. графика средствами direcx .


desolator

desolator,графика через движёк или самописка?ЗЫ. Сервер не жалей (в разумных пределах) - это его работа.ЗЫ.ЗЫ. Там что? В 2d без кэша данных на каждом клиенте тормозить не будет?В 3D там даже на видеокарту переносят, т.к. по шине "долго будет".


desolator

Petro123,на основе заголовочных файлов JEDI . сделал невизуальные компоненты для дельфи :инициализация d3d ,загрузка/отображение спрайтов, таймер, шрифт,кнопки. все по минимому.игра жрет и будет жрать меньше ресурсов чем старкрафт) графа там примитивная пока.