![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что "лучше" использовать при выгрузке/загрузке данных из/в DBF [D6, DBF]
Slaga © (2005-11-30 12:22:00)У меня есть задание выгрузить пару табличек из Оракла в ДБФ и у меня вопрос что лучше использовать ADO или BDE, "лучше" это в смысле практичнее, скорость выполнения выгрузки и т.д.
Я реализовал это, пока, через ADO, но 1000 при этом скорость вставки 1000 записей (5 полей, 4 - integer, 1 - string (ФИО)) приблизительно 10 секунд, всего записей в таблице 300000...
долго...
может подскажите как ускорить процесс
ANB (2005-12-02 12:42:00) [1]
> Anatoly Podgoretsky © (02.12.05 12:31) [27]
Да хрен с ним. Мне тоже пока не надо. Спецификация у меня у самого дома есть. А есть ли этот код окончания - можно прямо в DBF глянуть, сгенеренную стандартными средствами. Впрочем, он может быть не во всех форматах.
Anatoly Podgoretsky (2005-12-02 12:31:00) [2]Говорю нет под рукой спецификации, только дома, но настаиваю на признаке окончания и его коде 1А
Если очень интересует, то могу дома посмотреть.
ANB (2005-12-02 12:25:00) [3]
> Anatoly Podgoretsky © (02.12.05 12:12) [25]
Первую часть (собственно заголовок) лучше всего в рекорд запихать и не парится.
Признака конца там не было (FoxPro и Clipper). Там все на смещениях построено и вычисляется.
Anatoly Podgoretsky (2005-12-02 12:12:00) [4]ANB © (02.12.05 09:34) [24]
Пункты 1 и 2 это заголовок, конечно он состоит из двух частей, при том вторую можно реализовать динамическим массивом, а первую статическим.
Где то есть признак конца, вроде бы во втором заголовке - код 1А
Мне просто лень открывать спецификацию, поскольку нет практической задачи. А вот когда буду писать, то спецификация будет под ругой и код будет делаться в строгом соответствии с ней.
ANB (2005-12-02 09:34:00) [5]
> Anatoly Podgoretsky © (01.12.05 21:30) [22]
Нету там признака конца файла.
Но я бы сделал следующие этапы :
1. Запись заголовка
2. Запись описания полей
3. Запись данных
Т.к. на данных самые тормоза - то их лучше одной командой записать.
Если таблица создана заранее, то первые 2 пункта нужно заменить на чтение заголовка и описания полей.
Anatoly Podgoretsky (2005-12-01 21:31:00) [6]ANB © (01.12.05 17:23) [21]
Два дня и 7 часов на изучение формата и час на написание.
Anatoly Podgoretsky (2005-12-01 21:30:00) [7]Первой командой записывается буфер с заголовком
Второй командой записывается буфер с данными (динамический массив)
Третей командой записывается признак конца файла, не помню есть ли по формату.
Для записи удобен TFileStream
ANB (2005-12-01 17:23:00) [8]
> alex_*** © (01.12.05 17:13) [19]
Угу. Я еще прошлый год написал - сильно приперло, а взять негде было. Пришлось 3 дня убить. Правда, все равно делать нечего было.
Slaga (2005-12-01 17:17:00) [9]
> Anatoly Podgoretsky © (01.12.05 16:07) [17]
А можно поподробнее на тему " двумя.тремя командами записи быстро все сбросить на диск", пожалуйста.
alex_*** (2005-12-01 17:13:00) [10]вы сурсами для записи в DBF обмениваетесь чтоль? Велосипед изобретаете?
ANB (2005-12-01 17:07:00) [11]
> Anatoly Podgoretsky © (01.12.05 16:07) [17]
Это если напрямую в файл ? Так пусть переколбасит, как ему надо. У меня все равно только чтение. Главное - идея.
> slaga © (01.12.05 15:53) [16]
Ща отправлю. Только дописывать все равно самому придется.
Anatoly Podgoretsky (2005-12-01 16:07:00) [12]ANB © (01.12.05 14:41) [15]
А я бы посоветовал делать запись в динамический массив, и уж потом двумя.тремя командами записи быстро все сбросить на диск. Можно весьма кардинально повысить скорость, конечно при правильном написании.
slaga (2005-12-01 15:53:00) [13]
> ANB © (01.12.05 14:41) [15]
Нет индексов нет, а на исходник с удовольствием посмотрю.
ANB (2005-12-01 14:41:00) [14]
> slaga © (01.12.05 12:28) [14]
Значится так. При работе с LocalSQL тормоза неизбежны :
1. Запрос нужно парсить
2. Выполнение идет через не сильно короткую цепочку процедур/драйверов
Кстати, DBF какого формата ? Нет ли к ним индексов ? (FoxPro любит прописывать индексы прямо в таблицу и провайдеры, ессно, эти индексы автоматом цепляют. А с индексами вставка идет в разы медленнее).
Если индексов нету - тогда надо переходить на прямую запись в файл DBF. Благо она не сложно пишется.
ЗЫ. Коллега написал хреновато, посему могу предложить свой исходник.
slaga (2005-12-01 12:28:00) [15]Про "гетерогенные запросы" я не слышал ... надо почитать.
А что такое "DataPump" ?
to Sergey13 Ну готовые утилиты мне точно не подходят :)
slaga (2005-12-01 12:28:00) [16]Про "гетерогенные запросы" я не слышал ... надо почитать.
А что такое "DataPump" ?
Vlad (2005-12-01 11:40:00) [17]
> slaga © (01.12.05 10:41) [8]
а ты не пробовал использовать гетерогенные запросы?
Я правда не знаю возможности ADO в этом смысле, но в BDE это точно есть.
Т.е. возможно перекачать данные одним SQL запросом
Виталий Панасенко (2005-12-01 11:21:00) [18]А чем DataPump НЕ устраивает ? Уже ничего изобретать не нужно...
Sergey13 (2005-12-01 10:49:00) [19]2[4] Slaga © (30.11.05 12:47)
>Ну мне желательно без использования не стандартных компонент
Если это был ответ мне на [2], то там не компоненты, а утилиты готовые.
ANB (2005-12-01 10:46:00) [20]
> slaga © (01.12.05 10:41) [8]
DBF все равно транзакции напрямую не поддерживает, так что это - изгал, смысла нету. Можно попробовать писать в файл напрямую. У меня есть модуль (без вставок строк) и тут еще один коллега с форума его доделывал - грит вставку сделал, но я еще не смотрел, как. Могу дать пока свой - сам дорисуешь.