рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг

рдХрднреА-рдХрднреА рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд 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

рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИред

book.idbook.nameauthor.idрд▓реЗрдЦрдХ рдХрд╛ рдирд╛рдо
1Book12author2
1Book14author4
1Book16author6
2book22author2
2book23author3
2book26author6
2book27author7


рд╕рд░рдгреА рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╣реИ, рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВ, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
[
	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 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬреЛ рд╕рдВрдЧрдд рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛ рд╣реИред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ред

All Articles