![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закачка данных [D6, IB6.x, Paradox]
Senator © (2002-12-19 09:52:00)Есть такой вопрос: необходимо с периодичностью в 3-5мин закачивать данные из таблиц Paradox на FireBird по сетке.
Таблицы большие.
Какие есть возможности для этого, помимо построчного скачивания ?
Кто подскажет? Заранее благодарен
Anatoly Podgoretsky (2002-12-19 12:51:00) [1]Ну другой город это не критерий, может у него сеть 100 мб или выше, а вот если сеть медленная, то нечего жаловаться
Prooksius (2002-12-19 12:44:00) [2]
> таблицы находяться в ДРУГОМ городе
8>[....] Круто. Ну так что же ты жалуешься? :))
Senator (2002-12-19 12:41:00) [3]От парадокса отказаться не могу!
А скорость маленькая, по тому что парадоксовские таблицы находяться в ДРУГОМ городе, и я к ним коннектюсь через БДЕ по локальной сети...
OlegE (2002-12-19 11:57:00) [4]Открытие и "проход" по Paradox происходит довольно приемлемо по скорости и времени, а при вставке в большую IB таблицу, если еще и использовать IBTable и осуществлять по ней поиск нужной записи, чтобы узнать что нужно - insert/update, (а у нас были случаи когда нужно еще и удалить), действительно долго.
Выход был найден в следующем:
Используется ХП(аналогичный пример приводился недавно на форуме):
Кстати, вот пример процедуры для IB которая делает Insert или Update в звыисимости от наличия записи
---------------------------------------------------------
CREATE PROCEDURE INSERT_OR_UPDATE_MY_TABLE (
P_ID INTEGER,
P_FIELD1 NUMERIC(15,4),
P_FIELD2 VARCHAR(10),
......
P_REMARK VARCHAR(255))
AS
DECLARE VARIABLE V_K INTEGER;
begin
V_K = NULL;
FOR SELECT ISN FROM MY_TABLE
WHERE ID=:P_ID
INTO :V_K
AS CURSOR TMPCURSOR
DO
UPDATE MY_TABLE M
SET
ID = :P_ID,
FIELD1 = :P_FIELD1,
FIELD2 = :P_FIELD2,
...........
WHERE CURRENT OF TMPCURSOR;
IF (V_K IS NULL) THEN
INSERT INTO MY_TABLE(ID,
FIELD1,
FIELD2,
...
)
VALUES(:P_ID,
:P_FIELD1,
:P_FIELD2,
....
);
end
------------------------------------------------------
Через несколько циклов добавления, у нас каждый 15-й, производится один цикл на удаление, он к сожалению действительно длительный.
Актуальность данных пользователей вполне устраивает.
Sergey13 (2002-12-19 11:46:00) [5]2Senator © (19.12.02 09:52)
>Есть такой вопрос: необходимо с периодичностью в 3-5мин закачивать данные из таблиц Paradox на FireBird по сетке
Може не совсем в тему. Но может быть стоит подумать и отказаться от парадокса вообще, тем паче "Таблицы большие". Скопировать структуру на птичку, закачать один раз данные и работать прямо с ней. Один раз большой геморой - потом отсутствие гемороя вообще.
Sergey Masloff (2002-12-19 11:20:00) [6]>Johnmen ©
Заключил из мониторинга сервера InterBase: Вот простейшая вставка и ее результаты:
Query Time
------------------------------------------------
Prepare : 50,00 ms
Execute : 90,00 ms
Avg fetch time: 0,00 ms
Memory
------------------------------------------------
Current: 9 313 196
Max : 9 449 520
Buffers: 2 048
Enchanced Info:
+--------------------------+-------+-----------+---------+---------+---------+
| Table Name | Index | Non-Index | Updates | Deletes | Inserts |
| | reads | reads | | | |
+--------------------------+-------+-----------+---------+---------+---------+
| DICTI| 0 | 0 | 0 | 0 | 1 |
+--------------------------+-------+-----------+---------+---------+---------+
Johnmen (2002-12-19 10:50:00) [7]>Sergey Masloff (19.12.02 10:43)
>...Это ж Prepare-UnPrepare каждый раз...
Ну и что ? Время, затрачиваемое на это в разы/на порядки меньше времени выполнения запроса. Хотя, безусловно, с параметрами грамотнее...
Senator (2002-12-19 10:50:00) [8]Никаких визуальных компонент нету...
to Johnmen- таблицы действительно так долго открываються...
Delirium^.Tremens (2002-12-19 10:49:00) [9]2Sergey Masloff>
> Ни фига он не ускорится. Это ж Prepare-UnPrepare каждый
> раз...
Не знаю, с чего ты это взял. Лично я из собственного опыта. Когда конструкция Insert; bla..bla..bla Post; была заменена на такой подход, ускорение было в разы.
Sergey Masloff (2002-12-19 10:43:00) [10]Delirium^.Tremens ©
Ни фига он не ускорится. Это ж Prepare-UnPrepare каждый раз...
Запрос с параметрами спасет отца русской демократии, а если и Insert и Update то через ХП чтобы клиент не решал что там надо - инсерт или что там еще
Вообще если такие проблемы с сетью то на клиенте надо формировать файл с изменения, сжимать его, пересылать а на сервере разжимать и прогонять с целью внесения изменений.
Johnmen (2002-12-19 10:34:00) [11]>Senator © (19.12.02 10:22)
>...но эти таблицы из-за сетки даже на этапе проектирования
>открываються по 20-30 секунд...
Все таки у тебя что-то не так...
>Ладно, пропущу между ушей....
Мимо ушей не пропускай, это же просто намек на некорректно написанное приложение.
Delirium^.Tremens (2002-12-19 10:31:00) [12]Процесс ускорится если убрать все DBControls и вставку делать, собирая на лету запросы типа INSERT INTO ... или UPDATE ... , вставлять их в IBQuery и делать ExecSQL.
Senator (2002-12-19 10:30:00) [13]я ж и говорю....... между ушей, тобиш запомнил....
Prooksius (2002-12-19 10:26:00) [14]2 Senator © (19.12.02 10:22)
Между ушей - это аккурат в лоб! :))))))
Prooksius (2002-12-19 10:22:00) [15]2 Senator © (19.12.02 10:10)
Почитай www.ibase.ru / разработчику / репликация.
Senator (2002-12-19 10:22:00) [16]Ладно, пропущу между ушей....
Я серьезно говорю, код без проблем работает, но эти таблицы из-за сетки даже на этапе проектирования открываються по 20-30 секунд, если не больше, вот я и спрашиваю, как можно по другому сделать ??
Prooksius (2002-12-19 10:20:00) [17]2 Senator © (19.12.02 10:17)
А ты привыкай, он такой...
Senator (2002-12-19 10:17:00) [18]Спасибо, за совет.... Жалко нельзя ругаться....
:-((((
Alexandr (2002-12-19 10:12:00) [19]руки выпрямить и код правильно написать.
Senator (2002-12-19 10:10:00) [20]Хорошо, открываю таблицы Paradox(фильтрую данные на последнее скачивание), в таймере в цикле построчно загоняю в FireBird..
но все работает ОЧЕНЬ медленно, вплоть до зависания программы.
Вот я и спрашиваю, какие есть способы ускорения процесса ?