рд╢реБрдн рджреЛрдкрд╣рд░, рд╕рдореБрджрд╛рдп!
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ: рд╕рд╛рдЗрдЯ рдзреАрд░реЗ-рдзреАрд░реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрд┐рди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП xdebug рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд▓реЛрдб рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рдпрдВ рдорд╛рдк рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЪреБрдирд╛ рдЬреЛ рдЖрдкрдХреЛ рд╕рд╛рдЗрдЯ рдкрд░ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рдорд╛рди рдЖрдБрдХрдбрд╝реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ - рдкрд┐рдирдмрд╛ред
рд╣рд╛рдмрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдкрд┐рдирдмрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдпрджрд┐ рдЖрдкрдиреЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рддреЛ рдЖрдк рд▓рд┐рдВрдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд
рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред
рдкреНрд▓рд╕ 1 WAPStart рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣
рдкрд┐рдирдмрд╛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ (рдпреВрдбреАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдмрд╣реБрдд рдЬрд▓реНрджреА) рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд╢рд╛рди рднреЗрдЬрддрд╛ рд╣реИ (рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЯрд╛рдЗрдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдбреЗрдЯрд╛ рдХреЛ MySQL рддрд╛рд▓рд┐рдХрд╛рдУрдВ (рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
$timer = pinba_timer_start(array('tag' => 'some_logic')); .... pinba_timer_stop($timer);
рдЯреНрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреИрдЧреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдЯреНрд░реА_рдЖрдИрдбреА (рд╣рд░ рдмрд╛рд░ рдПрдХ рдпреВрдирд┐рдХ рдЖрдИрдбреА) рдФрд░ рдЯреНрд░реА_рдкрд░реЗрдВрдЯ_рдЖрдИрдбреА - рдпрд╣ рдЯреНрд░реА_рдб рдЯрд╛рдЗрдорд░ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
$parent_timer = pinba_timer_start(array('tag' =>'some_logic', 'tree_id' => 1, 'tree_parent_id' => 'root')); $child_timer = pinba_timer_start(array('tag' =>'child_logic', 'tree_id' => 2, 'tree_parent_id' => 1)); pinba_timer_stop($child_timer); pinba_timer_stop($parent_timer);
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд░реНрд╡рд░ рдкрд░, рдЖрдк рдЯрд╛рдЗрдорд░ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкрдардиреАрдп рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдордиреЗ рд╕рдордп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЯрд╛рдЗрдорд░ рд░рдЦреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sql рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЬрдм рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЖрджрд┐)ред
рдбреЗрдЯрд╛ рдХреА рддреИрдпрд╛рд░реА
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд┐рдирдмрд╛ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдд (PRIMARY рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд┐рдирдмрд╛ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрди рдорд┐рдирдЯ рд╕реЗ рдкреБрд░рд╛рдирд╛ рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ - 5 рдорд┐рдирдЯ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЖрдк рдкрд┐рдирдмрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЕрдиреБрдХреНрд░рдорд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд┐рдирдмрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ MyISAM рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред
truncate table pinba_cache.request; truncate table pinba_cache.tag; truncate table pinba_cache.timer; truncate table pinba_cache.timertag; insert ignore into pinba_cache.request select * from pinba.request; insert ignore into pinba_cache.tag select * from pinba.tag; insert ignore into pinba_cache.timer select * from pinba.timer; insert ignore into pinba_cache.timertag select * from pinba.timertag;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдкрд┐рдирдмрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдирдмрд╛_рдЪреЗрдЪреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдХреЙрдкреАред
рдХрд╛рдо рдХреЗ рд▓рд┐рдП рднреА рд╣рдореЗрдВ рдПрдХ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЯреНрд░реА_рдб рдФрд░ рдЯреНрд░реА_рдкрд░реЗрдВрдЯ_рдб рдлреАрд▓реНрдб рд╣реЛрдВрдЧреЗред
truncate table pinba_cache.timer_tag_tree; insert ignore into pinba_cache.timer_tag_tree SELECT * FROM ( SELECT null, timer_id, request_id, hit_count, timer.value, GROUP_CONCAT(timertag.value) as tags , (select timertag.value from pinba_cache.timertag where timertag.timer_id=timer.id and tag_id = (select id from pinba_cache.tag where name='treeId')) as tree_id , (select timertag.value from pinba_cache.timertag where timertag.timer_id=timer.id and tag_id = (select id from pinba_cache.tag where name='treeParentId')) as tree_parent_id FROM pinba_cache.timertag force index (timer_id) LEFT JOIN pinba_cache.timer ON timertag.timer_id=timer.id where not tag_id in ((select id from pinba_cache.tag where name='treeId'), (select id from pinba_cache.tag where name='treeParentId')) group by timertag.timer_id order by timer_id ) as tmp GROUP BY tree_id;
рдЯрд╛рдЗрдорд░_рдЯреИрдЧ_рдЯреНрд░реА рдЯреЗрдмрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИред рд╢реЗрд╖ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд┐рдирдмрд╛ рдХреА рддрд░рд╣ рд╣реА рд╣реИред
CREATE TABLE `timer_tag_tree` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `timer_id` INT(10) NOT NULL DEFAULT '0', `request_id` INT(10) NULL DEFAULT NULL, `hit_count` INT(10) NULL DEFAULT NULL, `value` FLOAT NULL DEFAULT NULL, `tags` VARCHAR(128) NULL DEFAULT NULL, `tree_id` VARCHAR(35) NOT NULL DEFAULT '', `tree_parent_id` VARCHAR(35) NOT NULL DEFAULT '', PRIMARY KEY (`id`), INDEX `timer_id` (`timer_id`), INDEX `tree_id_tree_parent_id` (`tree_id`, `tree_parent_id`), INDEX `tree_parent_id_tree_id` (`tree_parent_id`, `tree_id`) ) COLLATE='utf8_general_ci' ENGINE=MyISAM
рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЕрдм - рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкред рд╣рдордиреЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛, рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдмрд╛рдж рдХреЗ рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдЗрд╕ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧреАред
рдПрдХ рдкреЗрдбрд╝ (рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рд╕реЗ) рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВ - рдореИрдВ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдбрд╝рдЪрдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реИрдХрдбрд╝реЛрдВ php рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ (рдЯрд╛рдЗрдорд░) рдХрд╛ рдЕрдкрдирд╛ рдкреЗрдбрд╝ рд╣реИред рд╣рдореЗрдВ рдЗрди рдкреЗрдбрд╝реЛрдВ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреЗрдбрд╝ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпреВрдирд┐рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдиреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ рдпреЛрдЧ рдорд╛рдирддреЗ рд╣реИрдВред
рджреЛ рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдХрд░, рдЖрдк рд╕рднреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпреЛрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдПрдХ рдзреАрдорд╛ рд╕рдордпред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рддрд╕реНрд╡реАрд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, 2 рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдХрдард┐рдирд╛рдИ рд╣реЗ (рдПрди * рдПрди) (рдЪреМрдХрд╕ рдореБрдЭреЗ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рдПрди * рд▓реЙрдЧ (рдПрди) рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ рд╣реЛрдЧреА, 3 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ), рдЬрд╣рд╛рдВ рдПрди рд╣реИ -рд╡реГрдХреНрд╖ рдореЗрдВ рдиреЛрдбреНрд╕ред рддрджрдиреБрд╕рд╛рд░, рдЫреЛрдЯреЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╣реА рдиреБрдХрд╕рд╛рдирджрд╛рдпрдХ рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рд╣реИрдВред
рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдПрдХ рд╕реНрддрд░ 1 рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкреЗрдбрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рджреЛ рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдпреЛрдЧ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рд╣реИ, рдЖрджрд┐ред рдРрд╕реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдФрд░ рдЕрдзрд┐рдХ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдПрдХ рдмрдбрд╝реЗ рд╕реНрддрд░ рдХреА рдПрдХ рдиреНрдпреВрдирддрдоред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВрдЧреЗ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдШреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдПрди -1 рдереА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрди / 2 - рдкрд╣рд▓рд╛ рд╕реНрддрд░, рдПрди / 4 - рджреВрд╕рд░рд╛ рд╕реНрддрд░, рдПрди / 8 - рддреАрд╕рд░рд╛, рдЖрджрд┐ред
рдпрд╣ рдЪрд╛рд▓ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдорджрдж рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ (рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЗрд╕реЗ рд▓реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛)ред
// , - function mergeTreeList(array $treeList) { if (count($treeList) > 2) { return mergeTreeList( ($treeList), _($treeList)); } //... // }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкрд╣рд▓реЗ 2x рдореЗрдВ рдореВрд▓ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдмрдбрд╝реЗ рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░рд╛ рд╕рдордп рд▓рд╛рдн ~ 10 рдЧреБрдирд╛ (1000 рдкреЗрдбрд╝) рдерд╛ред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
- рд╣рдордиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрд┐рдирдмрд╛-рдЯрд╛рдЗрдорд░ рд░рдЦрд╛, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдирд╛
- рд╣рдордиреЗ рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдЯреНрд░реА рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рд╣реИ
- рдирд┐рд░реНрдорд┐рдд рдкреЗрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдЧрддрд┐ рдХреЗ рдЧреНрд░рд╛рдл рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
- рдпрд╣ рд╕рдм рд▓рд╛рдЗрд╡ рд╕рд░реНрд╡рд░ рдкрд░ рдмрд╣реБрдд рдХрд╛рдо рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред
рдиреБрдХрд╕рд╛рди рдФрд░ рдмреБрд░рд╛
- рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░, рдкрд┐рдирдмрд╛ рдЗрддрдиреА рдЬрд▓реНрджреА (рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ) рд▓рд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреНрд╡реЗрд░реА рд╕реЗ * рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛_ рдкреНрд░рддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ * рддрд╛рд▓рд┐рдХрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2-3 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдкрд┐рдирдмрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдореИрдВрдиреЗ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛)
- рдкрд┐рдирдмрд╛ рдмрд╣реБрдд рдореЗрдореЛрд░реА рдЦрд╛рддреА рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 5 рдорд┐рдирдЯ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдЬреАрдмреА рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЯреИрдЧ рдХреЗ рдмрдЬрд╛рдп рд╣рдо 3 (+ рдЯреНрд░реА_рдб, + рдЯреНрд░реА_рдкрд░реЗрдВрдЯ_рдб) рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЯреЗрдмрд▓ (5-10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП) рдХреЛ рд▓рд┐рдЦрдирд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдбреЗрдЯрд╛ рдЗрди рд╕реЗрдХрдВрдб рдореЗрдВ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ
рдЙрдкрдпреЛрдЧреА рдлрд╛рдЗрд▓реЗрдВ:
рдЯреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
index.phpCSQL.sql рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MySQL рд╕реНрдХреНрд░рд┐рдкреНрдЯ
PinbaClient.class.php - рдЯреНрд░реА_рдб, рдЯреНрд░реА_рдкрд░реЗрдВрдЯ_рдЖрдИрдбреА рдХреЗ рд╕реНрд╡рдд: рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд┐рдирдмрд╛ рдкрд░ рдПрдХ рдЖрд╡рд░рдг
рдореИрдВ
рдУрдирдлреИрдк рдврд╛рдВрдЪреЗ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рджреЗрд╢реА рдкрд┐рдирдмрд╛ рд╕рдорд░реНрдерди рд╣реИ
https://github.com/ents/pinba-php-profiler/ - рдШрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬреБрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓реЗрдВ
http://pinba.org/ - рдпрд╣рд╛рдВ рдЖрдк рдкрд┐рдирдмрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрд╕реНрд╡реАрдХрд░рдг: рдпрд╣ рд▓реЗрдЦ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрдВрддрд┐рдо рд╕рддреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкрд┐рдирдмрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ