Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые! Сразу оговорюсь, что я далек от Informix, но вот какая задача нарисовалась к срочной реализации. Есть файл, который содержит строки (около 300 тыс). Каждая строка представляет собой набор значений с разделителем ('|'). Нужно выбрать определенное поле из каждой строки, запросить значение из таблицы, выбрать нужные значения из связанных таблиц (имя, баланс, итд), подсчитать 1 формулу, и сформировав новую строку стаким же разделителем записать в новый файл. Я написал программу MFC. Она обращается к представлению, созданному специаьлно для моих нужд и которое содержит все необходимые поля. Через CRecordset обращаюсь к представлению и выбираю данные по каджой строке файла. Программа все делает правильно, но исключительно долго (по предварительным подсчетам около 20 часов). 1. Можно ли реализовать данный механизм средствами SPL? Если да - то где читать? 2. Если нет, то как мне модифицировать алгоритм работы, чтобы процессинг был приемлемым (к примеру 20-30 минут). Заранее искренне благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 11:37 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Ни все исходные данные понятны, но я бы закачал этот файл в TEMP TABLE и далее делал, что хотел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 13:49 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Я просто честно сказать не знаю как программно ихз MFC создать объект а потом к нему еще и класс CRecordset привязать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 16:04 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Я не имел ввиду никаких языков программирования, а только SQL-скрипт и команду dbaccess. Насколько я понимаю, основная задержка у вас приходится на обращение к VIEW с параметром. Смотрите на оптимальность построения VIEW, есть ли индекс по полю с которым вы заходите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 16:19 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Сергей СергеевичЗдравствуйте, уважаемые! Сразу оговорюсь, что я далек от Informix, но вот какая задача нарисовалась к срочной реализации. Есть файл, который содержит строки (около 300 тыс). Каждая строка представляет собой набор значений с разделителем ('|'). Нужно выбрать определенное поле из каждой строки, запросить значение из таблицы, выбрать нужные значения из связанных таблиц (имя, баланс, итд), подсчитать 1 формулу, и сформировав новую строку стаким же разделителем записать в новый файл. Я написал программу MFC. Она обращается к представлению, созданному специаьлно для моих нужд и которое содержит все необходимые поля. Через CRecordset обращаюсь к представлению и выбираю данные по каджой строке файла. Программа все делает правильно, но исключительно долго (по предварительным подсчетам около 20 часов). 1. Можно ли реализовать данный механизм средствами SPL? Если да - то где читать? 2. Если нет, то как мне модифицировать алгоритм работы, чтобы процессинг был приемлемым (к примеру 20-30 минут). Заранее искренне благодарен Да, можно. И нужно. Загрузить файл - команда LOAD FROM <file> INSERT INTO <table>, выполняемая из dbaccess Создаете хранимую процедуру, в которой либо либо пишите крутой SELECT на страницу, либо открываете курсор и идете по нему . Читать - Informix Guide to SQL, Syntax, раздел SPL statements ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 19:37 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Хранимая процедура должна делать update нужного вам поля. Потом в dbaccess выполняете UNLOAD TO '/tmp/aaa' DELIMITER '|' SELECT <нужные поля> FROM <table> В таком вот аксепте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 19:42 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Т.е. получается что я создаю 2 временные таблицы, в одну загружаю мой файл, во вторую результаты запросов и вычислений. И вторую таблицу выгружаю в файл. Я верно Вас понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 10:24 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
лшкЯ не имел ввиду никаких языков программирования, а только SQL-скрипт и команду dbaccess. Насколько я понимаю, основная задержка у вас приходится на обращение к VIEW с параметром. Смотрите на оптимальность построения VIEW, есть ли индекс по полю с которым вы заходите. Даже если индекса нет, изменения в структуре БД производить не имею права. Могу создать временную таблицу или представление, воспользоваться ими и удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 10:25 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Сергей СергеевичТ.е. получается что я создаю 2 временные таблицы, в одну загружаю мой файл, во вторую результаты запросов и вычислений. И вторую таблицу выгружаю в файл. Я верно Вас понял? В общем верно. Если не можете обойтись одной временной таблицей - используйте две. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 20:08 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Изначально все сделал в 1 таблице.. загружал в нее нужные поля из файла, остальные потом UPDATE'ом вставлял выборкой из таблиц. Меня не устроила скорость работы (9 строк за 6 секунд) и я решил что INSERT отработает быстрее. Но не тут то было., и запрос кривой и руки.. в общем подробности здесь : оптимизация запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 21:18 |
|
||
|
Парсить файл в процедуре?
|
|||
|---|---|---|---|
|
#18+
Сергей СергеевичИзначально все сделал в 1 таблице.. загружал в нее нужные поля из файла, остальные потом UPDATE'ом вставлял выборкой из таблиц. Меня не устроила скорость работы (9 строк за 6 секунд) и я решил что INSERT отработает быстрее. Но не тут то было., и запрос кривой и руки.. в общем подробности здесь : оптимизация запроса По-видимому, Вы не строите индексы на временные таблицы, а это возможно и нужно, коль скоро таблица имеет 300 тыс. строк. После этого желательно ещё и UPDATE STATISTICS LOW FOR TABLE <tab_name> выполнить, чтобы оптимизатор понял масштабы бедствия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=44&msg=34110324&tid=1608560]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 366ms |

| 0 / 0 |
