Консультации по проверке больших данных и импорту

В настоящее время я работаю над функцией импорта цен из Excel и ищу советы о том, как лучше всего обрабатывать большие наборы данных между PHP и SQL.

Обычно пользователь может импортировать один файл для обновления ВСЕХ прайс-листов (до 15). Таким образом, ряд примеров данных может выглядеть как

КОД УЧАСТНИКА | ПРАЙС-ЛИСТ1 ЦЕНА | ПРАЙС-ЛИСТ2 ЦЕНА | ПРАЙС-ЛИСТ3 ЦЕНА | ПРАЙС-ЛИСТ4 ЦЕНА

Эти файлы могут содержать до 30 000 уникальных записей. Проблема возникает в том, что эти данные должны быть проверены и возвращены пользователю в таблице с выделенными ячейками, где изменение цены для значения превышает 40%.

Продукты хранятся в нескольких таблицах, поэтому запрос на получение значений прайс-листа для одной строки может занять до секунды. Первоначально я попытался извлечь все записи вместе (что также занимает некоторое время), но если файл содержит более 10000 записей, он становится слишком большим для обработки сервером SQL.

В настоящее время у меня это работает, но очень медленно (1000 записей требуется 9 минут для проверки), и я проверяю одну запись за раз.

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

1

Решение

Большое спасибо Йенс Шульце а также DaveyBoy Я нашел удивительное решение. Я сейчас пишу данные в CSV-файл на сервере и использую sqls массовый импорт функция для импорта данных во временную таблицу и использования запроса для перекрестной ссылки на данные перед удалением таблицы. Результат невероятно быстрый (0,3 секунды, чтобы создать файл с 20000 записями, вставить его в таблицу, выбрать записи и отбросить их, как только у сервера появятся данные). Пример ниже.

ФОРМАТ CSV (Поместите файл в C: \ csvtest.txt)

1,TD015022,9000.00,9000.00,9000.00,9000.00,9000.00,9000.00
2,TD015023,7.00,7.00,7.00,7.00,7.00,7.00
3,TD015024,14.00,14.00,14.00,14.00,14.00,14.00
4,TD015025,9000.00,9000.00,9000.00,9000.00,9000.00,9000.00

SQL

CREATE TABLE CSVTest
(ID INT,
Member_Code VARCHAR(40),
[Frank Test] VARCHAR(40),
[Price List 1] VARCHAR(40),
[Price List 2] VARCHAR(40),
[Price List 3] VARCHAR(40),
[Ten Percent] VARCHAR(40),
[thaka bts test] VARCHAR(40)
)
GO

BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest
GO
--Drop the table to clean up database.
DROP TABLE CSVTest
GO

Надеюсь, это поможет следующему человеку, который застрял.
Также благодаря sqlauthority для рабочего примера, чтобы начать.

0

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

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

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