Как организовать перебор и обработку большого кол-ва данных?

Нужно перебрать, обработать и выдать в качестве xml минимум 2к товаров.
Но проблема в том, что сервер, на котором работает модуль, очень слабый и не выдерживает такой нагрузки.
Как лучше всего сделать это?
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 4
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Не писать говно код.

Дебажить что съедает все ресурсы или время и исправить
Ответ написан
@maxtm
Make money, not job
А какой такой нагрузки то?
Пишите так, чтобы в памяти не хранить за раз большое кол-во данных, записывайте сразу все на диск, и у вас не будет проблем с "нагрузкой", максимум - будет долго выполняться.
Ответ написан
voidnugget
@voidnugget
Программист-прагматик
Нужно отрефакторить схему, привести всё в божеский вид к 5-6 нормальной форме.
80% всех проектов с которыми приходилось иметь дело "аля магазин на РНР" индексирует varchar и еже с ним. Из-за этого "выборка 2К товаров" - просто непосильная задача. Стоит почитать книжку SQL Antipatterns и High Performance MySQL. Разобраться как работает InnoDB, и как вообще происходит оптимизация.

Пример "говно-схемы"
Table products
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL
group varchar(255) NOT NULL
oneAttr varchar(255)
otherAttr varchar(255)
anotherAttr varchar(255)
description varchar(255)
dateCreated DATETIME

Нужно разбить минимум на 4 таблички
Table products
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL
group_id unsigned int NOT NULL (FK)
description varchar(255)
dateCreated DATETIME

Table product_groups
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL

Table products_attrs
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL

Table product_attrs_values
product_id unsigned int (PK <- FK)
attr_id unsigned int (PK <- FK)
attr_value varchar(255) NOT NULL

Ну и т.п.

Это второй курс универа :)
И очень много обывателей даже до него не дотягивает, что меня довольно таки печалит.
И, конечно-же, нужно уметь использовать EXPLAIN.
Ответ написан
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Но проблема в том, что сервер, на котором работает модуль, очень слабый и не выдерживает такой нагрузки.

Делать это через PHP CLI. Брать товары из БД пачками, а не загружать сразу все в память.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы