MySQL рдореЗрдВ рдПрдХ рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдп рд╕рд░реНрд╡рд░ (рдХреЛрдИ рд▓реЙрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ)

рд▓рдЧрднрдЧ рд╣рд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЧрддрд┐рд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд╛рд░реНрдп рдХрддрд╛рд░реЗрдВ (рдИрдореЗрд▓ рднреЗрдЬрдирд╛, рдХреИрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рдЦреЛрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛, рдЖрджрд┐) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬреЙрдм рд╕рд░реНрд╡рд░ (рдЧрд┐рдпрд░рдореИрди, рдЖрджрд┐) рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗ рдмреЗрдорд╛рдиреА рд╣реИрдВред рд╕рдордп рдХреЗ рд╕рд╛рде рдмрдврд╝рддреЗ рд▓реЛрдб рдХреЗ рд╕рд╛рде MySQL рдореЗрдВ рдХреНрдпреВрдЬрд╝ рдХрд╛ рд╢рд╛рд╕реНрддреНрд░реАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (SELECT ... LOCK FOR UPDATE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА "рд╕рд╛рдЗрдХрд┐рд▓" рд▓рд┐рдЦрдиреА рдкрдбрд╝реА, рдЬреЛ "рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдо рдХрд░реЗрдЧрд╛" рдФрд░ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реЛрдЧреАред

рдЖрдзрд╛рд░: рдХреНрд░реЛрди, PHP 5.3 (mysqli), MySQL> 5.1 - рдпрд╣ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рдЪрд┐рдкрдХрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ (рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ) рдХрд╛ рдХрд╛рд░реНрдп рдкрд░рдорд╛рдгреБ (рдПрдХ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз) рд╣реИред рд▓реЙрдХрд┐рдВрдЧ рдФрд░ рдЖрд░рд╕реА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛, рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╡рд┐рдзрд┐ (рдлрд╝рдВрдХреНрд╢рди) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред
рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддреАрди рддрд░реАрдХреЗ: рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ, рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдПрдВ, рд░рд┐рдХреЙрд░реНрдб рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред
рдЕрдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдпрд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдбреЗрд╡рд▓рдкрд░ рдХреА рдЕрдВрддрд░рд╛рддреНрдорд╛ рдкрд░ рд╣реИред
рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА 400 рд▓рд╛рдЗрдиреЗрдВ (рдкреВрд░реНрдг PHPDOC рдХреЗ рд╕рд╛рде)ред
рд╕реАрдорд╛рдПрдВ: рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рдЧрд╛рддрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЕрдЧрд░ рдЖрдк рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рднреА :)

рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдХрд╛рд░реНрдп рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЙрдирдХреЗ рдмрд╛рдж рдХреЗ рдЪрдпрди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд▓реЗрдЦ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдирд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИред рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рдорд╛рдорд▓реЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ (рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдирд╣реАрдВ рд╣реИрдВ?)ред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╕рдореВрд╣реЛрдВ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рд▓рд╛рдЗрдирдЕрдк рд╣реИред

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг (рдЧреНрд░рд╛рд╣рдХ):
$task_server = \DBTaskServer::create('localhost', 'root', '', 'testDB', 'jobs_queue'); $task_server->addTask('mywork', $data); 

mywork рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред $ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
 $task_server->addTask('MyWork::doWork', $data); 


рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЙрджрд╛рд╣рд░рдг:
 \DBTaskServer::create('localhost', 'root', '', 'testDB', 'jobs_queue') //  . ->setByCLIAgruments($argv) //     . ->setMode(\DBTaskServer::MODE_MARK_AS_COMPLETED) //   . ->run(); //  . 


рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛:
 /path/to/script/worker.php [max_tasks_per_lifecycle] [comma_separated_group_ids] 

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд┐рддрдиреЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ), рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдореВрд╣_рдПрдб рдорд╛рди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХреЛрдИ рд╕рдореВрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рд╕рдореВрд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 /path/to/script/worker.php 100 3,5,6 

рд╕рдореВрд╣ 3, 5 рдФрд░ 6 рд╕реЗ 100 рдХрд╛рд░реНрдп рдкреВрд░реЗ рдХрд░реЗрдВред
рдпрджрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рддреБрд░рдВрдд рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред

рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдореБрдХреБрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 0-59/5 * * * * /path/to/script/worker.php 5 3 >/dev/null 2>&1 

рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ, group_id = 3 рдХреЗ рд╕рд╛рде 5 рдиреМрдХрд░рд┐рдпреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВред

рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рд╕реНрд╡рдпрдВ (рджрд╕реНрддрд╛рд╡реЗрдЬ), рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдПрд╕рдХреНрдпреВрдПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (5kB рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ)ред

рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рд╣реИред

Source: https://habr.com/ru/post/In147844/


All Articles