Обработка данных в памяти в PHP
Я пишу PHP-фреймворк, который можно использовать для визуализации огромных объемов данных. Я не могу извлечь все данные в память и обработать их (например, сортировать, фильтровать и т. Д.). Итак, у меня есть построитель SQL-запросов, который создает SQL-запросы и передает всю обрабатывающую часть на SQL-сервер. Есть ли способ, которым я могу сделать это с помощью PHP? Или есть какая-то библиотека C, которая хранит данные в двоичном виде и уменьшает использование памяти при обработке?
2 ответа
Я интенсивно использую движок кеширования в PHPExcel (используя APC, сериализацию объектов, php://temp, дисковое хранилище, SQLite в памяти, memcache и другие опции), который может работать с огромным числом (несколько миллионов) ячеек объекты. Проблема заключается в уменьшении накладных расходов памяти за счет выделения как можно большего из ограниченной памяти php при одновременном стремлении поддерживать разумную скорость выполнения: любой кэш ячеек, в котором хранятся данные вне PHP-памяти, неизменно увеличивает накладные расходы на скорость выполнения.
Сериализация данных с использованием igbinary - хороший компромисс, но вы все равно можете выйти за пределы памяти. Это примерно так же быстро, как встроенный в сериализацию PHP, но гораздо эффективнее с точки зрения сжатия данных.
Я бы сказал, чтобы сделать как можно больше с базой данных, потому что базы данных предназначены для такой работы.
Zend_Db_Select является частью Zend_Db и Zend Framework и позволяет программно создавать ваш запрос (создатель запросов, который вы упоминаете), выдвигая и изменяя его части.