Я довольно много работал над компонентом Zend_Db, когда работал над проектом Zend Framework (до ZF 1.0).
Как говорит @netcoder, компонент Zend_Db_Table создает объекты для каждой извлеченной строки. Объекты занимают больше памяти, чем примитивные массивы, но они также дают вам возможность использовать объектно-ориентированное использование и save()
и т. д.
Настоящая проблема в том, что вы делаете fetchAll()
с большим набором данных. Даже если ваш лимит памяти может обрабатывать 22000 строк, завтра вам понадобится 44000 строк, а в следующем месяце 100000 строк.
Независимо от реализации Zend_Db или если вы используете PDO без фреймворка, вам нужно научиться управлять большими наборами данных, не загружая их полностью в память, потому что это неизбежно приведет к исчерпанию памяти. Это справедливо для любой библиотеки, фреймворка и даже любого языка.
Вы можете попробовать использовать LIMIT
, как предлагает @Chris Henry, так что вы обязательно получите фиксированное количество строк, которое не слишком много.
Кроме того, вы можете извлекать данные построчно, чтобы в памяти была только одна строка. Класс Zend_Db_Table не предоставляет для этого средства; вам придется самостоятельно запускать SQL-запросы с помощью интерфейса Zend_Db_Adapter, а затем перебирать результаты с помощью fetch()
.
См. примеры на странице http://framework.zend.com/manual/en/zend.db.statement.html
person
Bill Karwin
schedule
06.11.2010