Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
подскажите лучшее решение, я работал с MSSQL и Delphi, Заказчик хочет многпользовательскую базу и клиента на Accesse, я с акцессом в прошлом не рабтал вопрос 1: база акцесса является ли многопользовательской или нет, вопрос 2: писать клиент на акцессе или убедить заказчика что на дельфе лучше ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2003, 20:22 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Писать на аксессе используя MSSQL как СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2003, 20:32 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Писать клиента на акцесе есть извращение. Использовать акцесс как многопользовательскую СУБД тоже есть извращение, будет сильно тормозить, кроме того будут пропадать данные. Для многопользовательских (>=2) приложений нужно брать какой-нибудь SQL сервер, например тот же MSSQL. Пиши клиента на дельфи, раз с ним знаком, что взять в качестве SQL сервера зависит от предполагаемых объема данных, количества клиентов и трафика. Но оракл либо ДБ2 наверняка будет достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2003, 00:35 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Если пишется заказной некоммерческий продукт, то можно и на Ассеss, естественно проект adp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2003, 08:26 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Delphi + MSDE обьясни заказчику, что access имеет ряд ограничений, в а MSDE позволит без дополнительных затрат повышать производительность переходом на другие версии сервера + возможность репликации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2003, 19:24 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
У проекта adp Access есть только одно серьезное ограничение - возможность работы только с MSSQL (MSDE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 06:42 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2Tung А сколько клиентов будут работать с базой постоянно? Чем они будут заниматься? Какой объем информации планируется вводить/изменять? Какой ее прирост в месяц? И т.п. А заказчика лучше убедить использовать то, что ты знаешь: Дельфу и сиквел. Хуже от этого никому не станет. 2с127 >Писать клиента на акцесе есть извращение Если не знать акеса - то да. Так же, если у прогера извращенный вкус и любовь к красному фону форм и желтым буквам :) Только акес здесь не причем >будет сильно тормозить, кроме того будут пропадать данные Смотря сколько юзеров подключенно и на сколько качественно написан код. А данные не пропадают, они иногда могут "портится", соблюдая некоторые правила - риск порчи можно свести к минимуму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 09:26 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
MS SQL (MSDE как легкий вариант) + MS Access (ADP) - это вполне нормальная комбинация. Особенно если заказчик так настроен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:15 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Senin Viktor >Если не знать акеса - то да. Так же, если у прогера извращенный вкус и любовь к красному фону форм и желтым буквам :) Только акес здесь не причем Я почти не знаю акцесс. Я сужу в основном по тому, что он никем всерьез как клиент не рассматривается. VB, дельфи - полно, а акцесса нет. Все проекты, использующие mdb формат данных и которые я знаю, используют VB в качестве GUI. Это неспроста. >А данные не пропадают, они иногда могут "портится", соблюдая некоторые правила - риск порчи можно свести к минимуму. Совершенно непонятно зачем тратить силы и сводить риск порчи данных к минимуму какими-то специальными приемами, если есть SQL сервера, в которых такой риск уже сведен к минимуму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 00:32 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 c127 Позволь мне немного все-таки высказаться в пользу Access. Текст твоего поста наводит на мысль, что ты не в курсе, что начиная с office2000 в Access появился новый тип приложения - ADP (Access Database Project), причем он представляет из себя полностью заточенного под MS SQL клиента. Вопрос. А много ли есть программистов, пишущих клиентов на VB или Delphi, умеющих корректно обращаться с коннекшеном к MS SQL? Ведь как они "рисуют" свои формы или DataSet-ы? Они кидают компонент, представляющий из себя ADODB.Connection, открывают и пользуют его. А правильно ли это? Особенно, если к серверу одновременно подключены сотни клиентов? Конечно нет. Необходимо обыгрывать такие вещи как пул коннектов, выдавать коннекшены только на время операции (чтение рекордсета или update рекордсета), и тут же "отцеплять" их от рекордсета. Все это не сложно, но обычно этим никто не заморачивается. А вот Access очень даже заморачивается. Он генерит свои COM-объекты, совместимые по интерфесу с ADODB.Connection и ADODB.Recordset, но внутренняя реализация этих объектов "заточена" именно под MSSQL. Поэтому сотни клиентов на Access, подключенные к серваку, грузят его не так уж и сильно, ввиду корректности работы самого Access по отношению к MS SQL. Все остальное - лирика. Нет практически ничего, что можно сделать на VB, но нельзя на Access. Все тоже самое. Только на Access многие вещи даже еще гораздо проще. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 03:19 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Смотря сколько юзеров подключенно и на сколько качественно написан код. А данные не пропадают, они иногда могут "портится", соблюдая некоторые правила - риск порчи можно свести к минимуму. Можно поподробнее о причинах пропадания и способах минимизации. Руководство навязало нам систему на ACCESS и теперь у нас одно из любимых занятий вылавливать какие записи пропали и восстанавливать их из архива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 08:13 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2vdimas: А можно поподробнее, какие ресурсы SQL сервера, собственно, тратятся при открытии клиентского датасета ADO ? Или речь идет об отсоединении-восстановлении connection ? А про Access я могу сказать только то, что у каждой новой версией имеется несовместимость с предыдущей. И Access идет в составе офиса. А Office многие стараются поддерживать в "актуальном состоянии". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 09:48 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
vdimas - обычно практикой для начинающего Дельфиста является создание общего DataModule'я на котором лежит общий TADOConnection Это во-первых - во вторых ADO и так по-умолчанию использует POOL соединений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 10:01 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
vdimas писал:Ведь как они "рисуют" свои формы или DataSet-ы? Они кидают компонент, представляющий из себя ADODB.Connection, открывают и пользуют его. А правильно ли это? Особенно, если к серверу одновременно подключены сотни клиентов? Конечно нет. Необходимо обыгрывать такие вещи как пул коннектов, выдавать коннекшены только на время операции (чтение рекордсета или update рекордсета), и тут же "отцеплять" их от рекордсета. Все это не сложно, но обычно этим никто не заморачивается. А вот Access очень даже заморачивается. Он генерит свои COM-объекты, совместимые по интерфесу с ADODB.Connection и ADODB.Recordset, но внутренняя реализация этих объектов "заточена" именно под MSSQL. Поэтому сотни клиентов на Access, подключенные к серваку, грузят его не так уж и сильно, ввиду корректности работы самого Access по отношению к MS SQL. Ты на Дельфе то работал, и через ADO? Кажется нет - такую белебердень нести. Отвечать не буду - тут в каждом топике почти есть ответ по этому поводу. 2 pkarklin Придется еще и это в книгу включить -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 10:21 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 c127 > Я сужу в основном по тому, что он никем всерьез как клиент не рассматривается. VB, дельфи - полно, а акцесса нет. Все проекты, использующие mdb формат данных и которые я знаю, используют VB в качестве GUI. Это неспроста. Иногда мне кажеться, что людям просто нравится вручную колбаситт боунд/анбоунд контролы, искать аналогии выпадающим многостолбиковым спискам, использовать то какие-то левые, то сильно дорогие генераторы отчетов и т.п. вещи, котрые уже встроенные в акес. Ну не любяит у нас прогеры, чтобы без гемору >Совершенно непонятно зачем тратить силы и сводить риск порчи данных к минимуму какими-то специальными приемами, если есть SQL сервера, в которых такой риск уже сведен к минимуму? Ну я бы пару десятков строк программы не назвал бы "потерей сил", это просто необходимые действо, такое же необходимое как и создание бакапов, шринка бд, лога и т.п. в сиквеле. Никто сиквел за это не ругает? 2 f_w_p >Руководство навязало нам систему на ACCESS и теперь у нас одно из любимых занятий вылавливать какие записи пропали и восстанавливать их из архива ну записи в акесе не пропадают, если, конечно, их не удалить :) Слетают индексы (легко лечится), портится база (впринципе легко лечится). Риск слета базы сводится к минимуму при остсуствии проблем с железом, сетью, драйверами сет. карт (как и на любой другой бд - только акес уж больно к этому критичен). Ну и главное: правильно написанный код - тут уж не на акес пинять надо 2 vdimas >Нет практически ничего, что можно сделать на VB, но нельзя на Access. "Чудеса" с хэндлами контролов (верней их отсутсвии при отсуствии фокуса на контроле, да и отсуствие (либо слабая и малопонятная) поддрежка сообщений виндоуса ) - это одна из вещей могущая отравить жизнь, но без нее легко обходится. 2 Mik Prokoshin >А про Access я могу сказать только то, что у каждой новой версией имеется несовместимость с предыдущей Надуманное обвинение. А что в дельфи 3 было все то же, что и в дельфи 5? Все совместилось? Нормальная вещь - новая версия - новые функции, форматы бд. === кесарю кесарево. И выбор акеса как хранилища (mdb) и как клиента должен быть обоснован. И тот и другой продукт могут решить свою задачу...если продукт делает профессионал в своем деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 17:37 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Senin Viktor писал: Ну я бы пару десятков строк программы не назвал бы "потерей сил", это просто необходимые действо, такое же необходимое как и создание бакапов, шринка бд, лога и т.п. в сиквеле. Никто сиквел за это не ругает? В скуле, это обычно настраивается раз и навсегда. И нет необходимости в каждом клиенте городить огород Senin Viktor писал: ну записи в акесе не пропадают, если, конечно, их не удалить :) Слетают индексы (легко лечится), портится база (впринципе легко лечится). Риск слета базы сводится к минимуму при остсуствии проблем с железом, сетью, драйверами сет. карт (как и на любой другой бд - только акес уж больно к этому критичен). Ну и главное: правильно написанный код - тут уж не на акес пинять надо Так уж приключилось, что на одной машине у меня крутиться клиент к MS SQL, сама база MS SQL 6.5 и однопользовательская база на mdb. Крутяться они уже года четыре, в режиме 24х7. Про MS SQL я вспоминаю только тогда, когда нужно добавить новый функционал в клиента. Даже на новые версии не перевожу, незачем. А вот для нормальной работы mdb пришлось обучать дежурных админов, что бы они ее умели "поднимать", а то устал в 6 утра суботы бегать ее "восстанавливать". К счастью, то, что там записывается, никому не нужно. Справочники никогда не изменяются и с легкостью восстанавливаются из дистрибутива. Senin Viktor писал: Надуманное обвинение. А что в дельфи 3 было все то же, что и в дельфи 5? Все совместилось? Нормальная вещь - новая версия - новые функции, форматы бд. Все совместилось. Появились дополнительные удобства. Вот в версиях скулей структура баз меняется. Но на то они и называются РЕЛЯЦИОННЫМИ, что способ обращения не зависит от физической структуры таблиц. Так что, мои клиенты на дельфях даже "не заметили", что они работают уже не MS SQL 6.5, а с 7.0 и 2000. Senin Viktor писал: кесарю кесарево. И выбор акеса как хранилища (mdb) и как клиента должен быть обоснован. И тот и другой продукт могут решить свою задачу...если продукт делает профессионал в своем деле. На самом деле то г*, которое я описывал, представляет клиента на дельфи к mdb . Руки бы поотрывал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 21:58 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 tygra Когда ты научишься отвечать по-существу? Я не знаю, что ты имеешь в виду. ADO - это и в африке ADO, и я знаю, что в дельфи есть объекты-роперы над объектами ADO. Моя мысль сводилась о конкретном использовании ADO как такового, а не использования его именно в дельфи. Существует ошибочное расхожее мнение, что если мы имеем только один объект - ADODB.Connection, но которым пользуются одновременно несколько открытых рекордсетов, то значит и реальный конекшн к базе только один. Чушь. Сколько открытых рекордсетов с приаттаченным коннекшеном, столько реальных конекшенов и открыто. Как делаешь ты? (в двух словах). 2 Mik Prokoshin Какие именно ресурсы сервера тратятся? :) Я не разработчик этого продукта и не в состоянии дать подробного отчета. Но есть масса рекомендаций микрософт по корректной работе с их детищем. Или речь идет об отсоединении-восстановлении connection ? Да, например по таймеру (10-20сек) держать коннекшен открытым, после последнего использования (дабы не делать этого 10 раз в секунду в период активной работы :) ). Если приложение мульти-тредовое, то держать пул таких коннекшенов с ведением учета по каждому. Это так же ответ для funikovyuri. Из-за особенностей COM я избегаю использования одного и того же коннекта из разных потоков. 2 Senin Viktor "Чудеса" с хэндлами контролов (верней их отсутсвии при отсуствии фокуса на контроле, да и отсуствие (либо слабая и малопонятная) поддрежка сообщений виндоуса ) - это одна из вещей могущая отравить жизнь, но без нее легко обходится весь прикол в том, что контролов-то и нет! В смысле нормальных, виндовых контролов. Почти все встроенные контролы Access - это ActiveX WindowLess Cotrols, т.е. они просто "рисуются" в окне формы-контейнера. Именно поэтому ленточная форма на Access сама по себе - шустрое дело. Прикинь, что было бы, если бы он создавал системные окна на каждый контрол! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 22:31 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2vdimas >весь прикол в том, что контролов-то и нет! Знаю я про это. Не которые - нет. И пытаются hwnd получать да message ловить там где их нет. Простой выход уж если очень захочется: использовать сторонние компоненты. 2Cat2 >А вот для нормальной работы mdb пришлось обучать дежурных админов, что бы они ее умели "поднимать", а то устал в 6 утра суботы бегать ее "восстанавливать". Лично меня после 2-3 поломок бд это все начинает напрягать и я начинаю искать причину сбоев. Правда, там где работаю (работал), т.е при мне - нифига база не падала, а вот у клиентов (без всякого обслуживания с моей стороны - все как бы на автомате) - было несколько раз: ничего страшного - разобрались. == А главное в Акесе: делать бакапы ! Наконец-то в 2003 ввели давно нужную фичу - бакап из меню :) Глядишь в 2020 - появиться возможность создовать бакапы по расписанию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 09:45 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 vdimas автор писал:Когда ты научишься отвечать по-существу? А что тебе отвечать по существу. Чем больше ты постишь, тем больше чуши в твоих постах. автор писал:Существует ошибочное расхожее мнение, что если мы имеем только один объект - ADODB.Connection, но которым пользуются одновременно несколько открытых рекордсетов, то значит и реальный конекшн к базе только один. Чушь. Сколько открытых рекордсетов с приаттаченным коннекшеном, столько реальных конекшенов и открыто. Вот еще один пример полной чуши. Не переноси то, что городит Access при работе с сиквелом (а именно беспорядочное открыти/закрытие коннектов), с нормально разработанным приложением, которое работает через один коннект. Ты чуствуется ни разу не видел нормальных приложений, работающих через один коннект. Более того, для реализации некоторых фичей в своих проектах я еще и пуллинг соединений отключал. Как инструмент для разработки рыбы Access еще потянет. Но серьезный проект ему не позубам. 2 tygra Книгу таки придеться писать. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 09:52 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Точно, придется :) У меня 1 (один ) коннект в приложении. И на сервер идет 1 (один) коннект. Лучше писать на том, чего зависит полностью от программиста, чем на том. что работает само по себе и городит мешок коннектов. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 11:31 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2vdimas: >Существует ошибочное расхожее мнение, что если мы имеем только один объект - ADODB.Connection, но которым пользуются одновременно несколько открытых рекордсетов, то значит и реальный конекшн к базе только один. Чушь. Сколько открытых рекордсетов с приаттаченным коннекшеном, столько реальных конекшенов и открыто. Не совсем так. Так м.б. только при использовании серверных рекордсетов, при клиентских - число сессий зависит только от одновременно параллельно выполняемых запросов. Это при включенном пулинге. Без - сессия всегда одна. >>Какие именно ресурсы сервера тратятся? :) >Я не разработчик этого продукта и не в состоянии дать подробного отчета. Но есть масса рекомендаций микрософт по корректной работе с их детищем. Я извиняюсь, но просто в тех статьях, что я читал по увеличению эффективности ADO DB приложений в intranet, ничего про отсоединения не было. Напомните источники, если не трудно. >>Или речь идет об отсоединении-восстановлении connection ? >Да, например по таймеру (10-20сек) держать коннекшен открытым, после последнего использования (дабы не делать этого 10 раз в секунду в период активной работы :) ). Это делает пулинг с лишними сессиями. Одна всегда остается. Если же уничтожать все сессии, то потом будет тратиться много времени на аутентификацию. Не лучшая идея. >Если приложение мульти-тредовое, то держать пул таких коннекшенов с ведением учета по каждому. Скажу честно, что с multi-thread и ADO не работал, не знаю. Но вроде бы ADO thread-safe, нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 12:19 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2vdimas: Насчет pool'а в ADO Pooling is available in two forms for applications that use the Microsoft Data Access Components: ODBC offers connection pooling through the ODBC Data Source Administrator, and OLE DB core components provide resource pooling as well as additional services such as shaping and the client-side cursor. OLE DB Resource Pooling OLE DB resource pooling, also known as OLE DB session pooling, is handled by the OLE DB core components. To take advantage of resource pooling, an OLE DB consumer must invoke the data provider by using either the IDataInitialize or the IDBPromptInitialize interface. (ADO will attempt to do this automatically.) OLE DB resource pooling can be turned on for one provider and off for another. Это цитаты отсюда http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmdac/html/pooling2.asp P.S> так что ты там по таймеру у сооединения закрывал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 14:09 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2Mik Prokoshin Скажу честно, что с multi-thread и ADO не работал, не знаю. Но вроде бы ADO thread-safe, нет ? Use ADO Like an Apartment Model Although the ADO implementation is free-threaded, don't use it in that way in the middle tier. Don't cache an instance of an ADO object, such as a Connection, globally and invoke methods on it concurrently from multiple threads. If each client request in your application model invokes the Connection.Execute method on a globally cached Connection object on the middle tier, your application will not scale. This is because of synchronization in the Connection.Execute method. You will get much better throughput by using an application model where each client request creates a new instance of a Connection object, calls Connection.Open and then Connection.Execute, and releases the Connection object on the middle tier. Each request does have the additional overhead of creating a new instance of a Connection object and obtaining a connection from the connection pool. However, because your Connection.Execute call isn't synchronized, the throughput is much better. оригинал здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 16:39 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 pkarklin я писал: Существует ошибочное расхожее мнение, что если мы имеем только один объект - ADODB.Connection, но которым пользуются одновременно несколько открытых рекордсетов, то значит и реальный конекшн к базе только один. Чушь. Сколько открытых рекордсетов с приаттаченным коннекшеном, столько реальных конекшенов и открыто. pkarklin писал: Вот еще один пример полной чуши. :) ты вообще хоть иногда в доки заглядываешь? Disconnect Your Client Cursor from the Connection for R/O and Long-Use Scenarios Disconnected Recordset objects are supported by the client cursor engine. Use this feature when you are performing a time-consuming operation that doesn't require expensive database resources to be held open. If you need to, you can later reconnect the Recordset to the connection to perform updates. furnikovyuri уже дал ссылку. Там же прочти про пулы коннекшенов, которые создаются и множатся, независимо от твоего желания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 22:50 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
funikovyuri писал: Use ADO Like an Apartment Model Although the ADO implementation is free-threaded, don't use it in that way in the middle tier. Don't cache an instance of an ADO object, such as a Connection, globally and invoke methods on it concurrently from multiple threads. If each client request in your application model invokes the Connection.Execute method on a globally cached Connection object on the middle tier, your application will not scale. This is because of synchronization in the Connection.Execute method. You will get much better throughput by using an application model where each client request creates a new instance of a Connection object, calls Connection.Open and then Connection.Execute, and releases the Connection object on the middle tier. Each request does have the additional overhead of creating a new instance of a Connection object and obtaining a connection from the connection pool. However, because your Connection.Execute call isn't synchronized, the throughput is much better. Именно это я и имел в виду. У каждого потока (thread), обращающегося к базе должен быть свой коннект, и ни в коем случае не стоит использовать один общий из соседнего потока (именно потому, что ADO-объекты thread-safe, т.е. только один тред может одновременно использовать один объект, напр. конект). Однако, закрывать коннект его сразу после использования, как предлагает здесь микрософт - жалко, поэтому и жду несколько секунд, вдруг понадобится (я понимаю, он автоматически берется из пула и т.д. и т.п., но вот ты сам же дал цитату, где говорится, что это требует времени). Далее. Никогда не уповайте на автоматический пул коннектов. Он жив (для данной базы) только до тех пор, пока живет хоть один коннект к этой базе данных. 2 tygra (pkarklin) насколько я понял, вы обращаетесь к базе из того же треда, в котором у вас работает основное GUI??? Да еще держите ПОСТОЯННО один глобальный конекшн открытым? Тогда все вопросы к вам немедленно снимаются, извините, конечно, но мы разговариваем на разных языках :) Блин, ну меня умиляет это все У МЕНЯ ЕСТЬ ПОСТОЯННО ПОДКЛЮЧЕННЫЙ ОДИН КОННЕКТ, СМОТРИТЕ КАК Я КРУТ. мдя-я-я... а при долгих запросах у нас приложение-то замирает и даже не прорисовывается... а грид мы показать не можем, пока к нему все запрошенные данные не придут. А все запросы исполняем только последовательно, один за другим. :) Видел такого, написанного именно на дельфи, вот так в лоб, предостаточно. Блин, один глобальный постоянно подключенный коннекшн. Ты еще в книгу это включи, для оболванивания населения. Мне даже трудно представить себе конфигурацию сервера, который бы выдержал более 2 тыс одновременно подключенных таких, с позволения сказать, "программ". Насчет задержек во время постоянных процедур подключения/отключения. Экспериментально установлено, что если с некоторой базой (именно базой внути инстанса сервака) работает только ОДИН пользователь, то после отключения на некоторое продолжительное время (точно не замерял, что-то около минуты-две), повторное соединие происходит с задержкой (2-3 сек). Если же с ЭТОЙ базой работает одновременно несколько пользователей, то повторные подключения выполняются мгновенно, по крайней мере, субъективно не заметны оператору. Оператор может заполнять один документ произвольное количество времени, и к чему все это время держать конект активным? В 1999-м к моему SQL 7.0-серваку на Celeron-333 256M подключались сотни клиентов и спокойно работали. Кстати, вначале я тоже держал один коннект постоянно открытым. Пока работают десяток-другой клиентов - это не заметно. Но когда больше... Вдогонку, насчет Access. Как раз-таки Access предоставляет пользователю ОДИН ГЛОБАЛЬНЫЙ объект, совместимый по интерфейс с ADODB.Connection, но он заточен спецами по MS SQL таким образом, что клиентское приложение "щадит" ресурсы сервера. Но конечно, все это полная чушь , пришел Тигра (pkarklin) и показал разработчикам MS SQL как правильно писать клиентские приложения для ИХ SQL Server. Научи их, Тигра, научи... а то несчастные разработали MS SQL и сами не поняли, чего там они разработали. ---- В многоуровневых приложениях, где операции с базой берет на себя средний слой , нужно юзать более одного коннекта (см. последний пост funikovyuri). И там действительно полезно ВСЕГДА держать хотя бы один коннект активным. Но, дык, это же совсем другая песня. К одному SQL серваку обычно подключают весьма ограниченное число серверов приложений. А зачастую, так и вообще один. В этом последнем случае я бы вообще держал постоянно по одному открытому коннекту на каждый рабочий тред в пуле тредов, для уменьшения времени отклика сервера приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 23:15 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 Senin Viktor Member >Ну не любяит у нас прогеры, чтобы без гемору Так получается, что "у них" тоже любят потрахаться. На западе я тоже акцесс в качестве клиента не встречал. Подозрительное единство взглядов. >Ну я бы пару десятков строк программы не назвал бы "потерей сил", это просто необходимые действо, такое же необходимое как и создание бакапов, шринка бд, лога и т.п. в сиквеле. Никто сиквел за это не ругает? А акцесс по-твоему в бекапах, шринках (которые для SQL серверов вообще не нужны) не нуждается. Зачем мне лечилть индексы, восстанавливать данные, даже если это легко, если можно обойтись без всех этих хлопот, если взять нормальный SQL сервер. Как работает акцесс в многопользовательском режиме лучше веообще не вспоминать. А там ведь написано: "многпользовательскую базу". Зачем мы спорим? В первом посте Tung написал, что "работал с MSSQL и Delphi". Зачем же ему предлагать сомнительные продукты, которых он еще и не знает, если в он может успешно использовать знакомые продукты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2003, 00:20 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Senin Viktor писал: Лично меня после 2-3 поломок бд это все начинает напрягать и я начинаю искать причину сбоев. Правда, там где работаю (работал), т.е при мне - нифига база не падала, а вот у клиентов (без всякого обслуживания с моей стороны - все как бы на автомате) - было несколько раз: ничего страшного - разобрались. Разработчики давно уже в Израиле :(. Поддержки нет. А у меня - падают. И это не мои базы. Я глубоко уверен, что хороший спец по Access может написать отказоустойчивую базу на mdb. Я сам писал подержку транзакций на Clipper. Но зачем он нужен, этот гемор, если есть готовые решения? Senin Viktor писал: Ну не любяит у нас прогеры, чтобы без гемору =========== vdimas писал: Сколько открытых рекордсетов с приаттаченным коннекшеном, столько реальных конекшенов и открыто. Вы имеете ввиду многопоточные приложения. Не вижу смысла в использовании потоков для выполнения запросов. На мой взгляд, вполне достаточно асинхронного режима выполнения. Не выдавайте свои приемы работы за порочность инструмента. vdimas писал: В многоуровневых приложениях, где операции с базой берет на себя средний слой Все ясно. Еще один любитель создавать себе проблемы. На трехзвенке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2003, 18:02 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Cat2 писал:Не вижу смысла в использовании потоков для выполнения запросов. На мой взгляд, вполне достаточно асинхронного режима выполнения. Хм... Здесь на форуме меня, порой, откровенно озадачивают "неординарным" подходом. :) Что ответить?... 1. Создать еще один поток - фигня на постном масле. У меня есть идиома тасков (Tasks) - это объекты-функторы, которые просто пуляешь на исполнение в некий тред, и они становятся себе в очередь этом треде и исполняются. Разработка этой части фреймворка потребовала, ясно дело, небольших усилий, но теперь от проекта к проекту успешно повторно используется. Так что для меня описать задачу, со своими приватными данными и т.д и т.д. - фигня полная. 2. Просто ответь на такой вопрос: что удобнее, написать обыкновенный "человеческий алгоритм", который просто выполнится в соседнем потоке, или реализовывать что-то типа автомата состояний, который действует по событиям асинхронных вызовов? Вопрос не стоит, если надо просто выполнить один запрос и проконтролировать его успешность. А если необходимо выполнять довольно сложные действия, в зависимости от результатов, т.е. использовать довольно "ветвистый алгоритм"? С асинхронностью замучаешься... автор писал:Еще один любитель создавать себе проблемы. На трехзвенке. А кто сказал, что я любитель 3-х звенки? :) Если предполагается работа в быстрой локальной сети, то, чем тратиться на разработку среднего слоя и покупку сервака под app-сервер, лучше на эти же деньги купить более мощный сервак под DB и сделать клиент-сервер. У клиент-сервера время отклика значительно лучше. А вот, например, если надо, чтобы приложение адекватно через Dial-Up работало? Или через Web? Так что, нравится-не нравится, глотай, моя красавица... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2003, 20:18 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
vdimas. Сегодня я вижу, что вчера я отвечал вовсе не данный топик, а на какие-то свои мысли. Иначе зачем я приплел асинхронные запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2003, 10:32 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2vdimas: >У каждого потока (thread), обращающегося к базе должен быть свой коннект, и ни в коем случае не стоит использовать один общий из соседнего потока (именно потому, что ADO-объекты thread-safe, т.е. только один тред может одновременно использовать один объект, напр. конект). .... насколько я понял, вы обращаетесь к базе из того же треда, в котором у вас работает основное GUI??? Да еще держите ПОСТОЯННО один глобальный конекшн открытым? .... а при долгих запросах у нас приложение-то замирает и даже не прорисовывается... а грид мы показать не можем, пока к нему все запрошенные данные не придут. А все запросы исполняем только последовательно, один за другим Если поток для работы с данными один, то и смысла нет иметь несколько connections, а в большинстве задач этого вполне достаточно. Так же для объединения потока с GUI - для небольших запросов и быстрого отклика это совершенно нормально. Обычный intranet-oriented подход, который ВЕСЬМА сокращает время разработки при соблюдении критериев качества приложения (удешевляет разработку). А Вы явно с дешевыми заказами не работаете :-) При большом количестве запросов/долгом времени отклика можно и распараллелить потоки (internet-приложения, например). Зато при постоянно открытом соединении проще реализовать некоторые вещи типа блокирования документов для редактирования другим пользователем (обсуждалось недавно в MS SQL форуме) и т.д. >Экспериментально установлено, что если с некоторой базой (именно базой внути инстанса сервака) работает только ОДИН пользователь, то после отключения на некоторое продолжительное время (точно не замерял, что-то около минуты-две), повторное соединие происходит с задержкой (2-3 сек). А если один пользователь - частая ситуация. Тогда Вы предлагаете заведомо проигрышные варианты ! >Мне даже трудно представить себе конфигурацию сервера, который бы выдержал более 2 тыс одновременно подключенных таких, с позволения сказать, "программ". Не надо путать intra и inter- net приложения. Разные архитектурные подходы. Между прочим, в Инет приложении вообще трафик жать надо и т.д. >Disconnect Your Client Cursor from the Connection for R/O and Long-Use Scenarios Ну хоть слава богу, я ничего не упустил. Я уж думал про отсоединения connection речь шла. А по поводу Disconnected rescordset (IMHO) сия рекомендация вызвана не столько расходованием ресурсов сервера, сколько попыткой увеличить надежность программ, т.к. всегда можно ожидать в результате некоего глюка (в программе, скажем), что подключенный рекордсет может каким-либо ненужным образом изменить записи в базе. И блокирование записей исключить опять же (при разных моделях блокировки). Так, в свое время, обязательной рекомендацией для Foxpro 2.6 было: открывать таблицу с возможностью UPDATE ТОЛЬКО для непосредственного выполнения операций с ней, иначе всегда делать USE .. READONLY. Это очень сильно повышало надежность приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2003, 15:43 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
автор писал:Обычный intranet-oriented подход, который ВЕСЬМА сокращает время разработки при соблюдении критериев качества приложения (удешевляет разработку). А Вы явно с дешевыми заказами не работаете :-) Елы-палы... Сами подставляетесь. Причем тут цена? Цена ведь из трудоемкости складывается, так? И что он сокращает, такой подход, позвольте спросить? Отрезок времени до выхода первой рабочей формы? Потому как такую форму можно просто мышкой "накидать"? А если стоит задача сократить отрезок времени до ОКОНЧАНИЯ всего проекта, и совершенно фиолетово, когда появится ПЕРВАЯ форма? Понимаешь, от дельфийских компонент заколебешься наследоваться. Т.е. довольно трудоемко компонент писать (относительно простого наследования ради переопределения, скажем, какой-нить мелочи). А я могу наследоваться легко и непринужденно буквально за каждой мелочью. Могу вообще все основные операции в базовые классы запрятать (напр. по работе с сервером). 90% приложения работает само по себе и управляется метаданными. Ручками только всякие drag&drop-ы и прочие неординарности. Для довольно сильного изменения поведения в некотором моменте, встречающемся во всем приложении достаточно "подкрутить" только в одном месте. "Управляемость кода". Слышал такое понятие? Оно напрочь отсутствует там, где формы "рисуются" мышкой, потому как чтобы сделать такую мелочь, как поменять цвет фона или шрифт у всех меток, необходимо прошерстить все 300 и более форм, присутствующие в приложении. :) автор писал:Не надо путать intra и inter- net приложения. Разные архитектурные подходы. Между прочим, в Инет приложении вообще трафик жать надо и т.д. Ты даже не представляешь, насколько хорошо и надежно работают в интра-нет приложения, заточенные под интер-нет. автор писал:А если один пользователь - частая ситуация. Тогда Вы предлагаете заведомо проигрышные варианты ! Это уже интересно, клинический случай. Тут уже и на локальной файловой базе не грех приложение сделать. По времени отклика "уделает" любой другой вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2003, 11:07 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
>Причем тут цена? Цена ведь из трудоемкости складывается, так? И что он сокращает, такой подход, позвольте спросить? Отрезок времени до выхода первой рабочей формы? Потому как такую форму можно просто мышкой "накидать"? Не совсем, просто не надо самому изобретать велосипед и писать (тестировать) какие-то свои навороты. Накидать мышкой - именно в этом цель удешевления разработки. Сразу не пинать - читайте далее... >Понимаешь, от дельфийских компонент заколебешься наследоваться. Т.е. довольно трудоемко компонент писать (относительно простого наследования ради переопределения, скажем, какой-нить мелочи) Не вижу абсолютно ничего сложного - даже мастер есть для автоматического наследования. Руками это занимает на 3 мин. дольше :-))) А наследоваться все равно придется, если, конечно у Вас больше 2 форм и Вам знакомо то самое понятие "Управляемость кода" :-) >Могу вообще все основные операции в базовые классы запрятать (напр. по работе с сервером). 90% приложения работает само по себе и управляется метаданными. Ручками только всякие drag&drop-ы и прочие неординарности. Имеет смысл только при написании большой системы объемом более 2 чел/лет (навскидку). Потому что создание и отладка подобного движка - уже около 1-1,5 чел/года. Хотя ... Вы шутя справитесь за месяц :-))) >Для довольно сильного изменения поведения в некотором моменте, встречающемся во всем приложении достаточно "подкрутить" только в одном месте. Для этого совершенно необязательно всю логику на сервер перекидывать. Просто при написании клиента надо поменьше пользоваться Copy+Paste а побольше думать об архитектуре приложения и реинжиниринге. >"Управляемость кода". Слышал такое понятие? Оно напрочь отсутствует там, где формы "рисуются" мышкой, потому как чтобы сделать такую мелочь, как поменять цвет фона или шрифт у всех меток, необходимо прошерстить все 300 и более форм, присутствующие в приложении. :) Понятие типа слышал, типа даже стараюсь применять ;-) Достаточно использовать не стандартные компоненты, а их наследники. Все реализуется вставкой соответствующего присвоения в функцию Loaded. >Ты даже не представляешь, насколько хорошо и надежно работают в интра-нет приложения, заточенные под интер-нет. Я представляю насколько они ДОРОЖЕ!!! Я вот, когда говорю заказчику (местному), которому делаю intranet приложение на Delphi, сколько стоит аналогичное интернет приложение на VC, у него лицо меняется и он меня идиотом считает :-) А вот для буржуев - это нормально, имею опыт подобной работы. Состояние экономики+стандарты мышления - страшная сила, делающая Россию unpreferenced заказчиком :-( >Это уже интересно, клинический случай. Тут уже и на локальной файловой базе не грех приложение сделать. По времени отклика "уделает" любой другой вариант Ну, моя последняя работа, например, intranet приложение на 1-5 пользователей на MSDE. Ничего плохого в этом не вижу. А вообще бывают ситуации, когда даже на относительно загруженной базе остается, скажем, на 10-15 мин. один пользователь. Вот ему радости-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2003, 13:33 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2c127 > На западе я тоже акцесс в качестве клиента не встречал ЭрнэстЭндЯнг делало для нашей фирмы маленькие проги на Акесе. Да и сама моя фирма не со всем русская :) >если можно обойтись без всех этих хлопот, если взять нормальный SQL сервер. Полностью согласен. Сиквел лучше Акеса - как СУБД . Во много раз лучше. Но, есно, для определенных задач. Не будешь же ты ставить сиквел клиенту, которому нужна записна книжка на 1 локальном ПК? Речь в этом топике (если я еще не сбился :) идет о Акесе и Дельфях как Клиентах к некой базе (акесной или сиквельной), причем никто кроме автора не знает, какие требования к системе. М.б. в этой проге 2 человека и будут работать:один до обеда другой после. == мы обсуждаем Акес как СУБД или как клиента к СУБД? Я - как клиента. Как СУБД (для работы в сети) Акес с сивелом сравнивать даже не хочу ибо это не сранивается. А как клиента к некой СУБД - можно спорить долго и безрезультатно. Везде полно плюсов и минусов. Да и руки у каждого под разный угол заточены :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 09:30 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2vdimas: Честное слово с тобой очень сложно. Тебе говорят что используют один коннект, что ADO и так осуществляет пул соединений, что этот коннект постоянен - а ты про функторы! Понимаешь - есть различные классы задач - и в каждом из них подходы могут различаться (иногда очень существенно) - так вот для intranet приложений (не придирайся к термину) эффективно использовать именно такую стратегию как постоянный коннект и один поток. И ADO в данном сценарии предоставляет соответсвующие фичи - типа асинхронного режима выполнения запросов (т.е. режима который позволяет не создавая явно еще один поток тем не менее позволять программе работать и не ждать долгих запросов). Так вот для данного класса задач - такой подход эффективен Если твоя задача не принадлежит этому классу - то соответственно и подходы будут другими - но одно другого уж точно не исключает! Так что в данный момент ты занимаешься флеймом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 10:13 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 Юрий автор писал:Честное слово с тобой очень сложно. Тебе говорят что используют один коннект, что ADO и так осуществляет пул соединений, что этот коннект постоянен - а ты про функторы! Ну, не столько про функторы, сколько про отдельные потоки для инициации серверных операций. автор писал:И ADO в данном сценарии предоставляет соответсвующие фичи - типа асинхронного режима выполнения запросов (т.е. режима который позволяет не создавая явно еще один поток тем не менее позволять программе работать и не ждать долгих запросов). Так вот для данного класса задач - такой подход эффективен Да знаю я все про ассинхронные запросы... :) Такой подход неэфективен, я уже отвечал Cat2, да ты, видимо, пропустил. Эфективность - это когда мне не надо озабочиваться какими-то мелочами при проектировании-кодировании приложения. Т.е., долгая операция, строки приходят в грид "постепенно", - пусть его, даже голову не ломаю, перекладываю на дополнительные потоки для работы с данными и все. Да, многие короткие операции вызываю так же из основного потока (около 20%), но это скорее от лени. :) Простая ситуация: девочка набивает накладную, скорость - зверская, она "мельтешит" своими пальчиками по гриду, меняет количество в строках. При переходе на следующую строку, текущую это необходимо сохранить в базе, т.к. в моей проге отображаются среди прочих еще остатки с учетом того, что другая такая же девочка именно в этот момент тоже выписывает одноименную позицию. При решении задачи "в лоб", т.е. на событии смены строки - посылаем обновления, работать было невозможно, если одновременно работало ОЧЕНЬ много людей, кто-то вводит документы, кто-то отчеты печатает. Так вот, при интенсивной многопользовательской работе каждая строка сохраняется где-то 0.5-1.5 сек, что ни в какие ворота не лезет, т.к. девочка способна набивать 2-3 строки в секунду (а розничные накладные бывают по 2000 строк - скорость набора крайне важна). Так и что делать? Можно ту же задачу решить ассинхронными вызовами, а можно использовать дополнительный тред. При использовании дополнительного треда (и наличии отлаженного фреймворка :) ), вариант с доп. тредом обходится в 3-4 раза меньшим числом строк кода, да еще практически не нуждается в отладке, т.к. представляет из себя "обычный человеческий алгоритм". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 12:03 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2Дмитрий: Да знаю я все про ассинхронные запросы... :) я не сомневаюсь - только я считаю что как раз такой подход для большинства задач эффективен - как по сложности, так и по сопровождению и ресурсам Еще - чтоб ты знал VCL - не thread safe - так что я посмотрю как там к тебе в грид будет что-то поступать P.S> Ты говоришь не о том что эффективно в конкретной ситуации - а о том как это сделать максимально "круто" - и не так как это от тебя ожидают содатели ADO/VCL - хотя я уверен - что ты скажешь что отдельный поток - это просто и очевидно, что у тебя уже написана соответсвующая библиотека, разработа собственная идиома и т.д. Я не против - но буду стоять на том что решение должно быть адекватно задачи ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 12:54 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Юра писал:решение должно быть адекватно задачи ;-) золотые слова! только, где она - степень адекватности? На что один скажет "а-а-а, и так потянет", другой ответит: "херня получается". Псмотри как в браузере картинки грузятся. А теперь представь, что они грузятся строго по-очереди... херня получится. тоже самое с данными для гридов на форме и популяции комбобоксов. User, в общем случае, уже может начинать что-то делать с формой, пока на нее в течении 0.5-3.0 сек не "доковыляют" самые последние данные. :) VCL - не thread-safe Покажи мне хоть одну библиотеку, где контролы thread-safe И, главное, зачем? Любое окно windows создается в неком потоке и только в этом потоке на него приходят события. Thread-safe должен быть объект-источник данных для грида. Если поменяли строку с данными - имеем право вызвать грубый UpdateRect для грида, к нему придет событие WM_PAINT с соотв. параметрами, и тот, уже в своем потоке, отрисует самые последние актуальные данные. Разумеется, напрямую юзать грид не стоит, а вот отнаследовать от него маленький классик - очень даже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 14:19 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
объекты ADO ( TADOConnection, TADOQuery ) там тоже не thread safe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 14:23 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
все методы роперов этих объектов, кроме тех, которые делают attach, detach (или как там они в дедьфи называются), можешь считать thread-safe, потому как это непосредственно вызов методов COM-объектов из библиотеки ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 15:14 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Все все знают про асинхронные запросы в ADO. Только открою вам страшную тайну - ADO не может выполнять более одной асинхронной операции в рамках одного коннекта. Если попытаться запустить 2 паралельных асинхроннных запроса, то ADO создаст второй коннект - копию первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 19:14 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 Pavel: Ну, пулинг работает, ну и что ? Как это ухудшает работу приложения ? Улучшает, скорее :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 19:47 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 Pavel Открою тебе страшную тайну, ADO вообще не может "тянуть" одновременно более одного рекордсета на одном коннекшене. Так что, если из разных потоков одновременно читаются или записываются данные, то на каждый рекордсет будет создан свой коннекшн. Во всех постингах в этом топе на тему ADO, пулинга и многозадачности в сумме уже набралась картина внутренней схемы ADO и рекомендаций по ее эфективному использованию. ---------- Итак, предлагаю закрыть флейм и подвести итоги: 1. В классе приложений, предназначенных на несколько десятков одновременных подключений, и работающих в локальной сети, вполне оправданно держать один глобальный коннект к базе данных постоянно открытым. Никаких дополнительный "ритуальных приседаний" с ADO выполнять не требуется, достаточно функционала, имеющегося по-умолчанию. 2. В классе приложений, расчитанных на сотни одновременно подключенных клиентов, (независимо от того, в локальной они сети или нет) необходимо выполнять "ритуальные приседания и пляски с бубном", а именно: - "ручками" контроллировать время жизни коннектов к базе данных, по опыту, было бы неплохо держать коннект открытым 15-60 сек после последнего обращения к базе данных. (никто не мешает задать в настройках приложения этот параметр, равно как и указать, что хоть один коннект обязан быть всегда открытым) - рассмотреть вариант активного использования ассинхронных запросов или дополнительных рабочих тредов для популяции данными элементов GUI (гриды, листы, комбобоксы и их всевозможные аналоги), а так же для исполнения запросов на изменение данных, либо для запуска всевозможных операций/процедур. - кеширование (еще не обсуждалось здесь). Необходима развитая система кеширования всевозможного справочного материала, для уменьшения трафика к базе. Если у кого есть интерес, этот пункт можно рассмотреть более подробно. 3. Если используем дополнительные треды для работы с данными, то гораздо эффективней хранить по-одному коннекту на каждый тред, т.е. даже если некий коннект в неком треде и закрыт, то удалять его не следует. (вследствие аппартмент-модели ADO, неэффективно использовать один общий коннект из разных тредов). Учитывая, что при открытии коннекта в соседнем треде не всегда происходит именно создание нового коннекта, а зачастую OLEDB-коннект берется из пула, такая схема представляется наиболее эфективной в случае многопоточной организации способа работы с данными. 4. В случае одиночных "долгоиграющих" запросов вполне подходит асинхронный режим запуска запросов. В случае довольно "ветвистой" логики по исполнению цепочки таких долгоиграющих запросов стоит подумать об организации фреймворка, упрощающего передачу асинхронных задач на исполнение в рабочие треды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2003, 21:44 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 Дмитрий все методы роперов этих объектов, кроме тех, которые делают attach, detach (или как там они в дедьфи называются), можешь считать thread-safe, потому как это непосредственно вызов методов COM-объектов из библиотеки ADO. К сожалению это не так (во всяком случае у меня в свое время не получилось) - вероятно та часть этих враперов, которая отвечает за связь с Data Aware компоненами вызывала что-то типа dead lock'а В классе приложений, предназначенных на несколько десятков одновременных подключений Ну не все так страшно - и на сотни конектов все будет ok кеширование (еще не обсуждалось здесь). Необходима развитая система кеширования всевозможного справочного материала, для уменьшения трафика к базе. Если у кого есть интерес, этот пункт можно рассмотреть более подробно. Я бы тоже пообсуждал - вот что мне интересно Опыт применения application servers (EAServer,MTS) Опыт использования VFP для написания компонетов для app servers - ведь для задач кеширования движок VFP кажется очень привлекательным Сценарии кеширования ресурсов (не только данных или соединений с БД) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2003, 09:49 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Так, давненько я сюда не заглядывал. 2 vdimas автор писал::) ты вообще хоть иногда в доки заглядываешь? Disconnect Your Client Cursor from the Connection for R/O and Long-Use Scenarios Disconnected Recordset objects are supported by the client cursor engine. Use this feature when you are performing a time-consuming operation that doesn't require expensive database resources to be held open. If you need to, you can later reconnect the Recordset to the connection to perform updates. Ну и что ты хотел мне это цитатой доказать. Здесь описана одна из возможностей работы отсоединенных датасетов, но из этого никак не следует, что после открытия набора стоит сразу закрыть коннект, через который его закачали. автор писал:насколько я понял, вы обращаетесь к базе из того же треда, в котором у вас работает основное GUI??? Да еще держите ПОСТОЯННО один глобальный конекшн открытым? Тогда все вопросы к вам немедленно снимаются, извините, конечно, но мы разговариваем на разных языках :) Да, а что здесь не так. И почему это мы разговариваем на разных языках. автор писал:Блин, ну меня умиляет это все У МЕНЯ ЕСТЬ ПОСТОЯННО ПОДКЛЮЧЕННЫЙ ОДИН КОННЕКТ, СМОТРИТЕ КАК Я КРУТ. мдя-я-я... Ну если это ты так понял, то это твои проблемы. автор писал:а при долгих запросах у нас приложение-то замирает и даже не прорисовывается... Эт почему еще. ProcessMessage еще никто не отменял. И что значит долгие запросы. Может просто не надо таки запросы писать или уметь их оптимизировать. автор писал:а грид мы показать не можем, пока к нему все запрошенные данные не придут. А все запросы исполняем только последовательно, один за другим. :) Случаи в которых нужно реально выполнять несколько запросов парралельно очень редки, но и это реализовано, там где это надо. Но это единичные случаи. А что вы имели ввиду про грид. Если лимон записей на клиента гнать, то да, это будет долго. А тысяча-другая записей влетают за доли секнды. автор писал:Видел такого, написанного именно на дельфи, вот так в лоб, предостаточно. Блин, один глобальный постоянно подключенный коннекшн. Ты еще в книгу это включи, для оболванивания населения. Ты мне напомнил моего препада по вышке. Он нам так объяснял понятие не полной математической индукции. Вот идет бабка по улице и видит пьяный пацан валяется и делает вывод. Вот же, а, вся молодежь спилась. Вот и у тебя так получается. автор писал:Мне даже трудно представить себе конфигурацию сервера, который бы выдержал более 2 тыс одновременно подключенных таких, с позволения сказать, "программ". Представить очень легко, если знать, какие ресурсы сервера занимает одно открытое соединение. 64 Кб, если не ошибаюс. И что, это что по твоему нагрузка для сервера. автор писал:Насчет задержек во время постоянных процедур подключения/отключения. Экспериментально установлено, что если с некоторой базой (именно базой внути инстанса сервака) работает только ОДИН пользователь, то после отключения на некоторое продолжительное время (точно не замерял, что-то около минуты-две), повторное соединие происходит с задержкой (2-3 сек). Если же с ЭТОЙ базой работает одновременно несколько пользователей, то повторные подключения выполняются мгновенно, по крайней мере, субъективно не заметны оператору. Ну так работает именно тот самый пуллинг. автор писал:Оператор может заполнять один документ произвольное количество времени, и к чему все это время держать конект активным? А он что у тебя текст в него набивает, что на время заполнения ему ни один справочник не нужен , читай коннект к базе. автор писал:В 1999-м к моему SQL 7.0-серваку на Celeron-333 256M подключались сотни клиентов и спокойно работали. Кстати, вначале я тоже держал один коннект постоянно открытым. Пока работают десяток-другой клиентов - это не заметно. Но когда больше... Атлично работает и больше... автор писал:Вдогонку, насчет Access. Как раз-таки Access предоставляет пользователю ОДИН ГЛОБАЛЬНЫЙ объект, совместимый по интерфейс с ADODB.Connection, но он заточен спецами по MS SQL таким образом, что клиентское приложение "щадит" ресурсы сервера. Какой объект, что значит совместимый по интерфейсу. Что у него заточено, что щадит. Давайка вместо чтения рекламного проспекта конкретно с цифирьками. автор писал:Но конечно, все это полная чушь, пришел Тигра (pkarklin) и показал разработчикам MS SQL как правильно писать клиентские приложения для ИХ SQL Server. Научи их, Тигра, научи... а то несчастные разработали MS SQL и сами не поняли, чего там они разработали. А ты что, думал там боги сидят. автор писал:А если стоит задача сократить отрезок времени до ОКОНЧАНИЯ всего проекта, и совершенно фиолетово, когда появится ПЕРВАЯ форма? Понимаешь, от дельфийских компонент заколебешься наследоваться. Т.е. довольно трудоемко компонент писать (относительно простого наследования ради переопределения, скажем, какой-нить мелочи). А я могу наследоваться легко и непринужденно буквально за каждой мелочью. Могу вообще все основные операции в базовые классы запрятать (напр. по работе с сервером). 90% приложения работает само по себе и управляется метаданными. Ручками только всякие drag&drop-ы и прочие неординарности. Для довольно сильного изменения поведения в некотором моменте, встречающемся во всем приложении достаточно "подкрутить" только в одном месте. "Управляемость кода". Слышал такое понятие? Оно напрочь отсутствует там, где формы "рисуются" мышкой, потому как чтобы сделать такую мелочь, как поменять цвет фона или шрифт у всех меток, необходимо прошерстить все 300 и более форм, присутствующие в приложении. :) Ну вот, теперь ты нам прописные истины втираешь, как надо проекты делать, используя возможности ООП. автор писал:девочка набивает накладную, скорость - зверская, она "мельтешит" своими пальчиками по гриду, меняет количество в строках. При переходе на следующую строку, текущую это необходимо сохранить в базе, т.к. в моей проге отображаются среди прочих еще остатки с учетом того, что другая такая же девочка именно в этот момент тоже выписывает одноименную позицию. При решении задачи "в лоб", т.е. на событии смены строки - посылаем обновления, работать было невозможно, если одновременно работало ОЧЕНЬ много людей, кто-то вводит документы, кто-то отчеты печатает. Так вот, при интенсивной многопользовательской работе каждая строка сохраняется где-то 0.5-1.5 сек, что ни в какие ворота не лезет, т.к. девочка способна набивать 2-3 строки в секунду (а розничные накладные бывают по 2000 строк - скорость набора крайне важна). Так и что делать? Можно ту же задачу решить ассинхронными вызовами, а можно использовать дополнительный тред. При использовании дополнительного треда (и наличии отлаженного фреймворка :) ), вариант с доп. тредом обходится в 3-4 раза меньшим числом строк кода, да еще практически не нуждается в отладке, т.к. представляет из себя "обычный человеческий алгоритм". Это что ж за система, что запись сохраняется 1.5 секунды. А уж про то, что надо разносить формирование отчетов и OLTP, тут даже и говорить нечего. И объясни мне пожалуйста, почему ты решил, что основные тормаза те самые секунды вносит именно последовательная обработка запросов клиентом. Может все-таки с сервреной частью что-то не в порядке. Я не пытаюсь охаить все, что вами сделано. Но опыт работы позваляет сделать вывод, что основной путь ускорения работы - это оптимизация именно серверной части - а не геморой с многопотоковостью, IMHO. И нужна она в очень редких случаях. А если вставка записей занимает стока времени, то надо в первую очередь серверную часть смотреть и как с ней работаешь. автор писал:- кеширование (еще не обсуждалось здесь). Необходима развитая система кеширования всевозможного справочного материала, для уменьшения трафика к базе. Если у кого есть интерес, этот пункт можно рассмотреть более подробно. Ну что ж давай пообсуждаем. А зачем мне кэшировать 100 000 записей справочника продукции. Ты представляешь, что это будет стоит клиенту. И эта популяция всяких гридов, комбобоксов. Она что, медленно идет, что ты их по тредам распихиваешь? Какие объемы записей там у тебя. Почему ты за трафик то так переживаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2003, 17:18 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 praklin ну, если почитать мое подведение итогов, то можно было и не отвечать, в начало спора я "вошел" со своей ситуацией, а ты со своей. автор писал:Представить очень легко, если знать, какие ресурсы сервера занимает одно открытое соединение. 64 Кб, если не ошибаюс. И что, это что по твоему нагрузка для сервера. плюс к этому считаем память на каждый открытый рекордсет (гриды на формах) и умножаем это на количество открытых форм (к середине рабочего дня у каждой девочки может быть открыто их около 20-ти, ну не любят они формы закрывать) и умножаем на сотни клиентов т.е. + (64k (конект) + 24k*2 (среднее кол-во гридов на форме) * 20(форм) ) * 600(клиентов) = > 0.5 Gb только на служебную инфу а памяти всего 256M (было поначалу, потом 512) автор писал:А тысяча-другая записей влетают за доли секнды. ... Это что ж за система, что запись сохраняется 1.5 секунды. А уж про то, что надо разносить формирование отчетов и OLTP, тут даже и говорить нечего. И объясни мне пожалуйста, почему ты решил, что основные тормаза те самые секунды вносит именно последовательная обработка запросов клиентом. когда работают десяток другой, то запись сохраняется за доли секунды и читаются за доли секунды, когда несколько клиентов постоянно грузят сервак, скажем, перепроводками складских документов задним числом (из сотен, всегда набирается несколько, которые именно сейчас перепроводят документы), то у всех остальных небольшие тормоза. автор писал:А если вставка записей занимает стока времени, то надо в первую очередь серверную часть смотреть и как с ней работаешь. уже ответил выше, голая вставка одновременно работающих десятков чел не занимает ничего. мою систему мне заказали на тот момент потому, что вариант 1С на SQL перепроводил большую накладную (300-1000 строк) за минуты (1-5), а больше 30-ти клиентов вообще работать толком не могли. В моей системе перепроводка выполняется за секунды (1-10 в зависимости от нагруженности сервака, в среднем 2-4 сек), а когда работает только 1 клиент, то вообще глазу ничего не заметно (повторяюсь) автор писал:Ну что ж давай пообсуждаем. А зачем мне кэшировать 100 000 записей справочника продукции. Ты представляешь, что это будет стоит клиенту Прикол в том, что конфигурация клиента не намного отличается от конфигурации сервера, по крайней мере не на 2 порядка. И никто никогда все 100 000 не кеширует. Учитывая иерархичность справочников, данные считываются по мере их необходимости, или беруться из кеша, если уже ранее считавали. В момент набивки накладной почти всегда мне ничего не нужно от сервера, т.к. на 2-й или 3-й накладной уже в достаточной мере пополнен кеш. Предупреждая вопросы насчет кеша отвечу сразу - вся система ориентирована именно на такую работу - с кешированием, и актуальность поддерживается весьма красиво и не рождая лишний трафик. автор писал:Почему ты за трафик то так переживаешь? тогда это была сетка поделенная на сегменты, большинство из них - на 10Mb, (серверный - на 100Mb) да и небыстрая (по нынешним временам) конфигурация сервера отрицательно относилась к большому трафику. Вполне сносно работал со своей системой через Dial-UP, и несколько рабочих мест впоследствии работали именно так. Спорить уже не о чем, в подведении итогов я попытался разбить задачи на классы и примерить и ваших и наших. ---- мою ту старую систему они заменили только этим летом на 1C (в то время как многие фирмы за это же время успели обновить и софт и хард дважды) и взяли под это дело СУМАШЕДШУЮ конфигурацию сервака, и сетку переразвели. На момент замены моя старушка пыхтела весьма весело на P-III 1GHz, 512Mb. Почему я им не стал делать апгрейд? не сошлись по финансовым соображениям. Когда-то им это дасталось за чуть более $600. Москве этого не понять, но в 1999-м зп $250 считалась неплохой для программиста в Севастополе да и сейчас не больно-то выросло, около $400 в среднем, вот и разъезжаются все оттуда :(( . Сечас дописывать им модули ни за $600 ни за $3600 я не стал. :) Они решили, что 1С им обойдется дешевле. По моим прикидкам, для достижения того же функционала, что был в моей системе им потребуется выкинуть не меньше 20-ки дополнительно помимо покупки самой 1C :) (по Севастопольским ценам, разумеется. Боюсь предположить, сколько это стоит в Москве) хотя, у меня было гораздо меньше общее число операций. Но вот те, что реально использовались - "заточены" именно под процесс заказчика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2003, 21:29 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 vdimas автор писал:плюс к этому считаем память на каждый открытый рекордсет (гриды на формах) и умножаем это на количество открытых форм (к середине рабочего дня у каждой девочки может быть открыто их около 20-ти, ну не любят они формы закрывать) и умножаем на сотни клиентов т.е. + (64k (конект) + 24k*2 (среднее кол-во гридов на форме) * 20(форм) ) * 600(клиентов) = > 0.5 Gb только на служебную инфу а памяти всего 256M (было поначалу, потом 512) А с чего это ты мил друг считаешь память под открытые рекодсеты на клиенте?! 8-) Ты что, с серверными курсорами работаешь? После получения запрошенных данных с сервера никаких ресурсов кроме коннекта клиентское приложение не использует, скока бы рекордсетов не было открыто. автор писал:когда работают десяток другой, то запись сохраняется за доли секунды и читаются за доли секунды, когда несколько клиентов постоянно грузят сервак, скажем, перепроводками складских документов задним числом (из сотен, всегда набирается несколько, которые именно сейчас перепроводят документы), то у всех остальных небольшие тормоза. Ну так прямая дорога к оптимизации серверной части, а не пляскам с бубнами над тредами. Приложение усилий к решению первой задачи дало бы большей результат. автор писал:уже ответил выше, голая вставка одновременно работающих десятков чел не занимает ничего. мою систему мне заказали на тот момент потому, что вариант 1С на SQL перепроводил большую накладную (300-1000 строк) за минуты (1-5), а больше 30-ти клиентов вообще работать толком не могли. В моей системе перепроводка выполняется за секунды (1-10 в зависимости от нагруженности сервака, в среднем 2-4 сек), а когда работает только 1 клиент, то вообще глазу ничего не заметно (повторяюсь) Я имел ввиду не голую вставку, а сохранение новой записи той же товарной накладной, при выполнении которой срабатывает ряд триггеров и хп, обеспечивающих бизнеслогику работы системы. А потом, уж больно не подходящую систему ты выбрал для сравнения со своей - 1с. автор писал:Прикол в том, что конфигурация клиента не намного отличается от конфигурации сервера, по крайней мере не на 2 порядка. И никто никогда все 100 000 не кеширует. Учитывая иерархичность справочников, данные считываются по мере их необходимости, или беруться из кеша, если уже ранее считавали. Да уж теперь до меня доходит, раз у тебя что на клиенте, что на серваке конфигурации одинаковые - значит сиквел мы используем как хранилише таблиц. Иначе бы (достаточно мощный сервер, по современным ценам $10K за noname сборку) не было такой необходимости в танцах с бубнами над клиентским приложением. И раз по твоим словам производительность системы сильно отличается в зависимости от числа работающих пользователей (прям как в 1с), значит так оно и есть. автор писал:В момент набивки накладной почти всегда мне ничего не нужно от сервера, т.к. на 2-й или 3-й накладной уже в достаточной мере пополнен кеш. Предупреждая вопросы насчет кеша отвечу сразу - вся система ориентирована именно на такую работу - с кешированием, и актуальность поддерживается весьма красиво и не рождая лишний трафик. Сейчас на складах у нас досих пор трудятся 100 пни с 16 метрами памяти. Представляю, если б я в своей задачи кэшировал справочники продукции (около 100 000 записей) и контрагентов (около 20 000 записей) на клиенте. А решается все с помошью форм выбора из справочника по образцу. В ответ на критерии отбора пользователей на сервере вызывается соответствующая хп, которая и возвращает ограниченный набор данных. автор писал:тогда это была сетка поделенная на сегменты, большинство из них - на 10Mb, (серверный - на 100Mb) да и небыстрая (по нынешним временам) конфигурация сервера отрицательно относилась к большому трафику. О каком трафике вааще можно говорить в правильно спроектированной архитектуре клиент/сервер. У нас 100 тока от сервера до первого свича, дальше 10, через мост вааще аркнет (если помнишь на 2,5). А часть клиентов вообще работает через VIP канал шириной 128к. И клиентов (всего) уже давно ни одна сотня. Средняя загрузка 100 на сервере 3%. А у тебя откудато большой трафик нарисовался. Опять это меня заставляет сделать вывод, что система то построена ой как не оптимально. автор писал:Спорить уже не о чем, в подведении итогов я попытался разбить задачи на классы и примерить и ваших и наших. Я и не пытась спорить, а пытаюсь высказать свои мысли. :-) Дальнейшие заявления на счет замены твоей системы на 1с не буду цитировать. Потому что для меня было бы это крахом. Как мое детише, да на какуюто 1с. Да щас моих юзеров, включая высокое руководство и под дулом пистолета не загонишь на 1с. Значит все-таки система то так себе (без обид тока.) Вот такие вот, они, мои мысли. А, теперь о выводах. Основной, да и единственный главный, пожалуй. Нельзя рассуждать о способах организации клиентских приложений в отрыве от серверной части системы. Причем имеено гармотное проектировани и разработка последней отнимает гараздо больше времени. Зато результат будет гараздо ощутимей, чем геморой с мультитридом в клиентской части. Моя система охватывает практически все сферы деятельности крупного машиностроительного предприятия, и нигде, повторяю, нигде, мне не понадобилось ассинхронка. Причем не потому, что я этого не умею, а просто не вижу, в решении каких задач она бы мне помогла. Все серъезные аналитические отчеты давно вынесены из OLTP системы и варяться на отдельном серваке (OLAP). Именно принцип разделения OLTP и OLAP систем позволяет решать задачи построения отчетов без нагрузки на операционную часть. А объемы анализируються не малые (несколько лет). А те данные, которые нужны для работы операционной части (ну теже скалдские остатки) доступны в любой момент в предрасчитаном виде, так что никаких проблем ни с трафиком, ни с задержками на выполение запросов не возникает. Если есть желание еще обсудить детали, то можно продолжить. Хотя все равно каждый останется при своем мнении, IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 08:20 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Давно не заходил сюда. Почитал vdimasa. Извиняюсь, но много смеялся. Особенно вот над этим: автор писал:плюс к этому считаем память на каждый открытый рекордсет (гриды на формах) и умножаем это на количество открытых форм (к середине рабочего дня у каждой девочки может быть открыто их около 20-ти, ну не любят они формы закрывать) и умножаем на сотни клиентов т.е. + (64k (конект) + 24k*2 (среднее кол-во гридов на форме) * 20(форм) ) * 600(клиентов) = > 0.5 Gb только на служебную инфу а памяти всего 256M (было поначалу, потом 512) Я ни в коей мере не хочу обидеть, нет, просто...... Если не умеешь делать так, чтобы оно хорошо (в хорошо входит и быстро, и удобно и т.п.) работало, да еще в некоторых местах и не знаешь, то это не значит, что никто этого не умеет . Неплохо бы подучить основы кс и о том, для чего sql сервер придуман. А то действительно получается - на сервер денег тратить не хотим, делать на нем нормально не умеем, поэтому лучше поставим всем клиентов Р4 и будем обрабатывать там. Эххххх.... Я тоже раньше писал как попало. Но вот повезло - научился. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 13:15 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Вдогонку хотелось бы заметить 1) Закрытие-открытие коннекта отнимает время на клиенте. Причем установление соединения занимает относительно большое время, особенно при плохой сетке. Экономя на памяти сервера за счет закрытия неиспользуемого (свободного) соединения, теряем скорость работы клиента. Отдельно хочется отметить, что даже практически любой MSSQL сервер легко держит две-три сотни коннектов. Другое дело - активные коннекты, их должно быть как можно меньше. Но это задача именно серверной оптимизации. 2) Асинхронность в клиент/серверном приложении еще сильно ограничена тем, что - как правило - запросы к серверу взаимосвязаны, т.е. последующий запрос зависит от предыдущего. И каждый из них зависит от ввода на самом клиенте. Именно поэтому, также как и pkarklin, многопоточность, асинхронность практически не применяется (исключение могут составлять задачи обмена данными - всякие массовые загрузки/выгрузки). Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 16:36 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2pkarklin Все то у вас хорошо и красиво, только вот если часты проводки задним числом, причем это число действительно очень заднее тормоза получишь в любом случае как бы ты не разделял OLTP и OLAP... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 17:40 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Между прочим, многое из того, что vdimas говорит, очень актуально в интернет-приложениях (я с ними вплотную сталкивался и думал, что у него подобная практика). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 17:56 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Что именно актуально в интернет-приложениях? Я тут как раз такое приложение писал (не один конечно:), дык оно 200 человек одновременно держит прекрасно. Так что есть хорооооший опыт. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 20:00 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 Crip автор писал:Все то у вас хорошо и красиво, только вот если часты проводки задним числом, причем это число действительно очень заднее тормоза получишь в любом случае как бы ты не разделял OLTP и OLAP... Что вы имеете в виду под проводками очень задним числом ? Это проводки текущего рабочего периода, но в самом его начале или это проводка документа на пол года назад? Давайте определимся, что проведение чего-либо после сфрмированного баланса и финрезультатов - не допустимо с точки зрения методологии бухгалтерского учета (Тем более если уже отчетность сдали). А если уж действительно случилось страшное - надо провести документ годом раньше, то да - откат баланса, откат всех расчетов, откат закрытия месяца, проведение документа и снова формирование всего, что откатили. Естественно, что такая операция за секунду не выполниться. И я не понимаю вашего ехидства в данном конкретном примере, особенно в адрес OLTP и OLAP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 07:57 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2 tygra: К-во клиентов для Инет-приложения исчисляется, обычно, бОльшими числами. Тонкие каналы, если клиенты не корпоративные (9600-вполне реально). Вопросы защиты. И т.д.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 09:59 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2pkarklin Никакого ехидства. Просто пример приведенный vdimas стандартными средствами не решается, если сидит 100 пользователей, даже в том случае если отчетность будет строится полностью по OLAP , например по кубам репроцесенным ночью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 10:11 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Crip: Вообще-то есть еще и Real-Time OLAP и индексированные представления. На них можно очень неплохо строить отчетность и менять при этом документы любыли числами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 10:17 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2Julius Да есть - интересно у вас есть опыт работы с такими системами? Я бы послушал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 10:48 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
А чего тут слушать. Использование таких систем доступно для OLTP с любой версией SQL Server 2000 (хоть MSDE), и для Enterprise Edition в Analisys Services. В любой версии SQL Server 2000 можно построить и использовать индексированные представления, которые позволяют хранить необходимые агрегации, а не вычилять их. Достоинство индексированных представлений в том, что они автоматически обновляют соответствующую агрегацию непосредственно в транзакции изменения данных в базовой таблице. Конечно, на создание таких представлений наложены некоторые ограничения (они все есть в BOL). Делать SELECT из индексированного представления можно в любой версии сервера, если явно использовать хинт (NOEXPSND) в запросах с такими представлениями: Код: plaintext В этом случае оптимизатор SQL Server будет работать с ними как с таблицами, а не как с представлениями, что существенно (иногда в сотни раз) ускорит выполнение запросов. Что касается OLAP, то тут эта технология применима только в Enterprise Edition. При создании Real-Time куба на SQL Server создаются все те же индексированные представления для хранения отдельных его агрегаций (ROLAP-модель с индексированными представлениями вместо таблиц). Этот куб не нуждается в обновлении - индексированные представления всегда содержат актуальные данные. Так что меняйте любые данные и не думайте об их обновлении - все будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:30 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
а с точки зрения производительности - насколько % увеличится время транзакций модифицирующих исходные таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:39 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
2Julius Если вью содержит агрегатные функции, то изменения задним числом очевидно вызовет пересчет данных во всей таблице, а не начиная с даты измененного документа? Если это так, то грош цена такому подходу. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:57 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Разумеется, несколько увеличится. Транзакция в сущности будет включать в себя не один оператор UPDATE, а столько, сколько индексированных представлений зависит от модифицируемой табилицы. В общем-то не трудно изучить этот механизм посмотрев план запроса на обновление (там все видно, в том числе и распределение нагрузки). Если в Вашей системе тысячи пользователей на одном сервере одновременно активно модифицируют таблицы - это будет не очень хорошо. Если сотни - скорее всего более чем приемлемо. Применимость подобного подхода разумеется не безгранична и должна определяться задачей. Можно, например, используя Merge-репликацию передавать изменения на другой сервер и на нем строить систему такой Online-аналитики, если возникнут серьезные проблемы с производительностью. Кончено, тут тоже будет разрыв во времени, но уже не в сутки, а в минуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:58 |
|
||
|
Access or Delphi
|
|||
|---|---|---|---|
|
#18+
Crip Разумеется, это не так. Для того на индексированные представления и наложены некоторые ограничения, чтобы оптимизатор мог использовать совершенно иную стратегию их обновления. Просто посмотрите план запроса. Как правило, Вам не удастся заметить удлинение транзакции не измеряя ее длительности в миллисекундах. Это Вам не материализованные представления ORACLE, которые именно так как Вы описали и обновляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 12:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1554251]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
104ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 469ms |

| 0 / 0 |
