sql — проблема с производительностью — получение данных из Navision в PHP API

В настоящее время я создаю API, который имеет доступ к нашей системе Navision. Я довольно новичок в этом, но я только добавил некоторые функциональные возможности к уже существующей системе. Дело в том:

ОБНОВЛЕНИЕ 2:

Я думаю, что версия Navision не имеет значения, так как я запрашиваю базу данных MSSQL, прикрепленную напрямую. Может быть, версия БД MSSQL может быть актуальной:

Microsoft SQL Server 2012 — 11.0.2218.0 (X64)
12 июня 2012 г. 13:05:25
Авторское право (c) Microsoft Corporation
Standard Edition (64-разрядная версия) в Windows NT 6.1 (сборка 7601: пакет обновления 1) (гипервизор)

ОБНОВИТЬ:

Я уже перебрал файл CSV, и поисковый запрос выполняется каждый раз, когда я получаю новое письмо, так как он не может вызвать сервер MSSQL с оператором IN () с 70 000 писем в нем.

Я также только открыл файл CSV для записи один раз, а не на каждый запрос.

Выполнил:

  • У меня есть CSV-файл с большим количеством писем (сделано)
  • Это должно быть загружено (сделано)
  • Загруженный файл должен затем быть проанализирован для электронных писем (готово)
  • Письма должны быть сопоставлены с адресами в Navision (готово)

Проблема:

  • Это займет много времени
  • Navision вращается медленно, и многие люди ежедневно зависят от этой системы.

Информация:

  • Есть ок. 70.000 писем в CSV-файле (и их количество)
  • У нас ок. 1 миллион клиентов в Navision
  • Этот скрипт должен запускаться ежедневно.
  • В настоящее время нет никаких объединений в операторе SQL (это придет)

У кого-нибудь из вас есть предложения по оптимизации процесса?

Любая помощь будет оценена.

// Ульрик Макардл

0

Решение

Не зная деталей того, как вы реализовали процесс, невозможно говорить о специфике. Но вот несколько общих ловушек, которых следует избегать:

1) При написании скрипта для разбора большого текстового CSV-файла, делайте это построчно. Не пытайтесь загрузить файл в память — в гигантский массив или что-то подобное. Это крайне неэффективно. Скорее, откройте файл и переберите его построчно, используя что-то вроде цикла while и fgetcsv (), обработайте эту строку, выбросьте ее и загрузите другую.

2) Сделать СУБД — MySQL, Oracle, Postgres, что угодно — справиться с тяжелой работой. PHP не место для обработки данных. Оптимизировать операторы SQL, другими словами. Я бы предположил, что бит «Navision поворачивает медленно» лучше всего сопровождать вниманием к SQL.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]