![]() |
|
|
![]()
|
|
| T1000 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.1.2007 Репутация: нет Всего: нет |
Пытаюсь решить проблему экономии ресурсов сетевого канала. Задача:
Существуют таблицы "A", "B", "C". При обработке табл. "А" и "В" создается табл. "D". При обработке табл. "D" и "С" создается конечная таблица "Е". Приложение, которое делает обработку таблиц, находится на одном компьютере. Все таблицы находятся на другом компьютере (на адс-сервере). Т.к. необходимо делать перебор всех записей таблиц, то записи приходится "швырять" туда-сюда. В связи с этим сеть испытывает максимальную нагрузку, и страдает скорость выполнения. На сервере приложение запускать не представляется возможным. От себя могу добавить только способ копирования всех баз на комп где лежит прога. Провести манипуляции и обратно на сервак закинуть. А какие можете предложить варианты решения проблемы вы, товарищи? Что скажете про мой способ? |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 1 Всего: 59 |
Я бы все это всетаки запихнул в extended procedure и запускал все это на сервере
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 1 Всего: 59 |
Кстати. А обработку и создание таблиц нельзя в SQL впихнуть?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| T1000 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.1.2007 Репутация: нет Всего: нет |
1. Я - новичок, только-только осваиваю Delphi-ADS-dbf. Но считаю, что если "поломать" голову ;-) , то можно запихнуть алгоритм в sql-запрос. Но к сожалению у меня нет уверенности в том, что если я буду проводить исследования в этом направлении, то потраченное время не уйдет зря. Потому как программа на данный момент создана, работает, но не так быстро, как хотелось. Программа консольная. На начальных этапах пробовал воспользоваться ADSQuery. Не получилось, возникли проблемы, и не смог заставить выполняться даже элементарные запросы. Поэтому резко перешел на ADSTable.
Обработка баз заключается примерно в следующем: Начинаем поиск записей по к.-л. признаку в табл. А. Если найдена запись, то поиск записей в табл. В. Значения некоторых полей записей табл. А и В складываются, умножаются и заносятся в табл. D. Затем создаем таблицу E. Пробегаем по табл D, избавляясь от дублированных записей путем копирования их по одной копии в табл. Е и попутно заносим в нее же некоторые значения полей соотвествующих записей табл. С . Т.о. алгоритм использует вложение цикла в цикл с перебором всех значений табл А и табл В (получается кол-во просматриваемых записей равно RecCount A * RecCount B). Я уже и не говорю о второй части алгоритма, где приходится еще пару таблиц просматривать. Как это в sql реализовать, ума не приложу. Прошу извинений, отклонюсь от конкретной темы, задам немного другого плана вопросы в этой теме. Думаю, что не стоит засорять список тем еще одной парой моих топиков 2. К тому же, у меня возникла еще проблема - не смог с помощью компонента AdsTable в Delphi создать поле с типом numeric. Не подскажете как это реализовать? Если уже созданное (например с помощью data architect) поле с типом numeric проверять на тип (перебирать в программке все известные типы полей БД), то откликается на ftFloat. Пробую создать поле следующим методом AdsTable1.FieldDefs.Add('имя поля', тип поля, кол-во символов, false). К примеру AdsTable1.FieldDefs.Add('names', ftInteger, 10, false). Вылезает Еррор Invalid size field. 3. И еще вопрос, как лучше поступать: создавать таблицу с полями исключительно стринговыми, а все преобразования этих полей в нужный тип делать в приложении, кот. будет использовать эту табл. Или создавать таблицу с соотвествующими типами полей, тогда нет нужны в преобразовании в самом приложении (но следить за типами все равно придется). |
|||
|
||||
| T1000 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.1.2007 Репутация: нет Всего: нет |
Пункты 2 и 3 решились. А вот пункт 1 так и остался в силе.
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 1 Всего: 59 |
Я уже сказал: выполнять на сервере, испульзуя механизм extended procedurе. Вы так не ответили , почему этот вариант Вас не устраивает.
Во=первых, почему используете dbf вместо adt? Во-вторых, почему бы не перейти сразу на проф. уровень и использовать не только adt, но и вместо free tables использовать режим database, получив все прелести нормальной БД : тригера, процедуры, каскадное удаление и пр? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Advantage Database Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |