рдХрднреА-рдХрднреА рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд ORM рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╛ рддреЛ ORM рдХреА рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг, рдпрд╛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд╛рдлреА рдЗрд╖реНрдЯрддрдо SQL рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛редрд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ (рдЬреЙрдЗрди рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ) рдПрдХ "рдлреНрд▓реИрдЯ" рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЗ рдЬрдЯрд┐рд▓ "рдЯреНрд░реА" рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмреЗрд╣рдж рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИредрд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рдерд╛, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреЗрдЬреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрддредрдХрд┐рддрдирд╛ рддреЗрдЬ
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЧрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рдкрд░реАрдХреНрд╖рдг рдкреАрда рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрд╛, рдЬрд┐рд╕ рдкрд░ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рд╡рд╛рдХреНрдкрдЯреБрддрд╛ рдХреА рдЧрддрд┐ рд╕реЗ рдХреА рдЧрдИред рдорд╛рдк рдХреЗ рд▓рд┐рдП, phpbench рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редрдШрд░ рдкрд░ рдПрдХ рд╕реНрдЯреИрдВрдб рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:git clone https://github.com/hrustbb2/env-arrayproc-bench.git
cd env-arrayproc-bench
./env
рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ редрдлрд┐рд░ рдореЗрдиреВ рдореЗрдВ рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ: 1 рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░: 1 рдмрдирд╛рдПрдБ, рдлрд┐рд░ 2 рддреИрдирд╛рдд рдХрд░реЗрдВ рдФрд░ рдКрдкрд░;рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ 5. рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВрдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 3000 рдкреБрд╕реНрддрдХреЗрдВ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:+-----------------+-----+------+------+-------------+--------------+
| subject | set | revs | iter | mem_peak | time_rev |
+-----------------+-----+------+------+-------------+--------------+
| benchEloquent | 0 | 1 | 0 | 76,442,912b | 12,781.612ms |
| benchEloquentId | 0 | 10 | 0 | 5,123,224b | 16.432ms |
| benchProc | 0 | 1 | 0 | 36,364,176b | 1,053.937ms |
| benchProcId | 0 | 10 | 0 | 4,462,696b | 7.684ms |
+-----------------+-----+------+------+-------------+--------------+
benchEloquent - рд╕рдм рдмрд╛рд╣рд░ рдЦреАрдВрдЪрддреА рд╣реИ рд╕реБрд╡рдХреНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд▓реЗрдЦрдХреЛрдВ рд╡рд╛рд▓реА рдкреБрд╕реНрддрдХреЛрдВbenchEloquentId - рд╕реБрд╡рдХреНрддрд╛ (10 рдмрд╛рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рддрд╛рдм рдмрд╛рд╣рд░ рдЦреАрдВрдЪрддреАbenchProc - рдмрд╛рд╣рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдЦреАрдВрдЪрддрд╛рдиbenchProcId рдкреБрд╕реНрддрдХрд╛рд▓рдп (10) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рддрд╛рдм рдмрд╛рд╣рд░ рдЦреАрдВрдЪрддреА рд╣реИ -рдЙрдХрд╕рд╛рдирд╛ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд░рдирдЯрд╛рдЗрдо рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рджреЛрдиреЛрдВ рдореЗрдВредрдпрд╣ рдХрд╛рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ
рдЗрдВрд╕реНрдЯреЙрд▓:composer require hrustbb2/arrayproc:v1.0.0
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (рдЕрддреНрдпрдВрдд рд╕рд░рд▓), рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХреЛрдВ рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдХрд╛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред
рдХрд╛рд░реНрдп рдЕрдкрдиреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИредрдЕрдиреБрд░реЛрдз рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:SELECT
books.id,
books.name,
authors.id,
authors.name
FROM
books
LEFT JOIN relations ON relations.books_id = books.id
LEFT JOIN authors ON authors.id = relations.authors_id
рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИредрд╕рд░рдгреА рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╣реИ, рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВ, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ[
1 => [
'id' => 1,
'name' => 'book1',
'authors' => [
2 => [
'id' => 2,
'name' => 'author2'
],
4 => [
'id' => 4,
'name' => 'author4'
],
6 => [
'id' => 6,
'name' => 'author6'
],
]
],
2 => [
'id' => 2,
'name' => 'book2',
'authors' => [
2 => [
'id' => 2,
'name' => 'author2'
],
3 => [
'id' => 3,
'name' => 'author3'
],
6 => [
'id' => 6,
'name' => 'author6'
],
7 => [
'id' => 7,
'name' => 'author7'
],
]
],
]
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
SELECT
books.id AS book_id,
books.name AS book_name,
authors.id AS author_id,
authors.name AS author_name
FROM
books
LEFT JOIN relations ON relations.books_id = books.id
LEFT JOIN authors ON authors.id = relations.authors_id
рдпрд╣рд╛рдБ рд╣рдо рдЙрдкрдирд╛рдо рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдкрд╕рд░реНрдЧ 'book_' рдХреЗ рд╕рд╛рде рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЙрдкрд╕рд░реНрдЧ 'рд▓реЗрдЦрдХ' рдХреЗ рд╕рд╛рде рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдПредрдЕрдЧрд▓рд╛, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВuse hrustbb2\arrayproc\ArrayProcessor;
$arrayProcessor = new ArrayProcessor();
$config = [
'prefix' => 'book_',
'authors' => [
'prefix' => 'author_',
]
]
$booksData = $arrayProcessor->process($conf, $rows)->resultArray();
рдЬрд╣рд╛рдБ:$ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ / stdClass () рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ,$ config рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд░рдгреА рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, $ bookData рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреЗрдбрд╝ рдХреА рддрд░рд╣ рдХреА рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ $ config рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬреЛ рд╕рдВрдЧрдд рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛ рд╣реИредрдХреБрдЫ рдЗрд╕ рддрд░рд╣ред