В настоящее время я работаю над проектом, который широко использует модель EAV. Оба объекта как их атрибуты индивидуально представлены моделью, иногда расширяя другие модели (или, по крайней мере, базовые модели).Обработка больших (объектов) наборов данных с помощью PHP
До сих пор это работало достаточно хорошо, поскольку большинство областей приложения полагаются только на отфильтрованные наборы объектов, а не на весь набор данных.
Теперь, однако, мне нужно разобрать весь набор данных (IE: все сущности и все их атрибуты), чтобы обеспечить алгоритм сортировки/фильтрации на основе атрибутов.
Приложение в настоящее время состоит из приблизительно 2200 объектов, каждый из которых имеет приблизительно 100 атрибутов. Каждый объект представлен одной моделью (например, Client_Model_Entity
) и имеет защищенное свойство $_attributes
, которое представляет собой массив объектов Attribute
.
Каждый объект объекта составляет около 500 КБ, что приводит к невероятной нагрузке на сервер. С 2000 объектами это означает, что для работы одна задача занимает 1 ГБ ОЗУ (и много процессорного времени), что неприемлемо.
Есть ли какие-либо шаблоны или общие подходы к итерации над такими крупными наборами данных? Пейджинг на самом деле не вариант, так как все нужно учитывать, чтобы обеспечить алгоритм сортировки.
EDIT: пример кода, мы надеемся сделать вещи яснее:
// code from the resource model
for ($i=0,$n=count($rowset);$i<$n;++$i)
{
$clientEntity = new Client_Model_Entity($rowset[$i]);
// getattributes gets all possible attributes from the db and creates models for them
// this is actually the big resource hog, as one client can have 100 attributes
$clientEntity->getAttributes();
$this->_rows[$i] = $clientEntity;
// memory usage has now increased by 500KB
echo $i . ' : ' . memory_get_usage() . '<br />';
}