Coldfusion 8 - время ожидания оператора вставки cfquery - PullRequest
1 голос
/ 13 апреля 2011

Я создаю скрипт, который использует cfhttp для чтения файлов журнала с разделителями. Эти файлы журналов обычно бывают довольно большими, поэтому, когда я пытаюсь вставить данные из файла журнала в созданную мной таблицу, мой оператор вставки cfquery истекает.

Итак, моя идея обойти это - вставлять, может быть, 200–300 записей одновременно, а затем каким-то образом обновлять таймер оператора вставки и затем импортировать следующий набор из 200-300 записей.

Я не совсем уверен, как это сделать.

Кто-нибудь имел дело с импортом тысяч записей из файла журнала? как вы преодолели таймаут в теге cfquery.

Ответы [ 4 ]

1 голос
/ 13 апреля 2011

Я не уверен на 100%, что это сработало бы для вас, но для основной задачи получения данных файла журнала в базу данных я бы обошел этап, на котором ColdFusion полностью анализирует данные.

Посмотрите, как сделать это напрямую из SQL.

  1. Сначала скопируйте файл локально, возможно, используя <cfftp/>

  2. Затем обработайте файл журнала как файл CSV и запишитеSP вы можете выполнить через CF, который просто считывает ваши данные журнала во временную таблицу.Это должно быть быстрым и избегать любых таймаутов.

  3. Затем можно выполнить отдельный шаг (возможно, снова в SQL), чтобы реорганизовать ваши данные, как только они окажутся во временной таблице.

Надеюсь, это поможет.

0 голосов
/ 13 апреля 2011

Cold Fusion может передавать команды пакетной вставки, которые использует сервер SQL, вам просто нужно убедиться, что функция разрешена на используемом вами сервере дБ. Я предлагаю подключить файл локально и использовать возможности пакетной вставки сервера SQL.

0 голосов
/ 13 апреля 2011

Если вы можете загрузить файл в переменную сеанса, вы можете анализировать строки одновременно, используя атрибуты startrow и endrow cfloop при каждом вызове. Затем вы должны настроить свой скрипт на установку счетчика, выполнить первый проход, обновить счетчик, а затем снова отправить информацию вашему процессу с помощью cfhttp, передавая обновленный счетчик. Затем процесс просто проанализирует эти строки и выполнит вставки.

Для больших объемов данных и, в зависимости от базы данных, вы можете рассмотреть вопрос о создании хранимой процедуры, в которую можно передать весь блок за раз, например, в формате XML. Затем ваш sproc сделает один оператор вставки в вашу таблицу из поля XML.

Это ускорит обработку и не приведет к тайм-ауту CF.

0 голосов
/ 13 апреля 2011

Сначала проверьте, истекло ли время ожидания дБ, а не запрос http.Вы вставляете 1 rec за раз в cfloop?И есть ли у вас индекс для таблицы, в которую вы вставляете?Попробуйте вставить несколько записей в одном операторе вставки.

...