The main idea for the fast Magento database upgrade was to run SQL queries in parallel. This approach was first introduced in Magento Upgrade Replay project.
Magento Resque is an utility intended to be used as an extendible standalone solution for SQL queries paralell execution during Magento upgrade.
It's nothing more than a tiny wrapper around PHP Resque – a Radis-backed library for creating jobs, placing them into a queue and processing by workers. Please reffer to https://github.com/chrisboulton/php-resque for detailed documentation.
Please note: there is a similar project for using PHP Resque with Magento we are not associated with called mage-resque. The main and the only purpose of our tool is to help speed up Magento DB upgrade, while mage-resque is all-purpose. Feel free to check it out.
Magento Resque basically implements two classes:
Queue – reads SQL queries from the specified file, wraps them into Resque jobs and enqueues the jobs in the Redis queue.
Job – run by workers. Instantiates Magento DB adapter and runs SQL queries wrapped into the job.
The easiest way to install Magento Resque is using Composer.
Create shell/magento-resque/composer.json
file under Magento root directory.
Include Magento Resque to your project:
composer require zlik/magento-resque
Run composer install
.
Change the current working directory to demo
.
To enqueue SQL queries from the sql/queries.sql
file to the upgrade
queue run the following command:
$ php resque.php sql/queries.sql
To launch eight simultaneous workers:
$ QUEUE='upgrade' COUNT=8 ../vendor/bin/resque
The result should be like this:
[notice] Starting work on (Job{upgrade} | ID: 1 | Job | [{"q":"CREATE TABLE `resque_test_1` ..."}])
[notice] Starting work on (Job{upgrade} | ID: 2 | Job | [{"q":"CREATE TABLE `resque_test_2` ..."}])
[notice] (Job{upgrade} | ID: 2 | Job | [{"q":"CREATE TABLE `resque_test_2` ..."}]) has finished
[notice] (Job{upgrade} | ID: 1 | Job | [{"q":"CREATE TABLE `resque_test_1` ..."}]) has finished
##Requirements
PHP Redis requires
- PHP 5.3+
- Redis 2.2+