Avro PHP has a performance issue - it appears to operate in O(N^2) time when
decoding messages
----------------------------------------------------------------------------------------------
Key: AVRO-934
URL: https://issues.apache.org/jira/browse/AVRO-934
Project: Avro
Issue Type: Improvement
Components: php
Affects Versions: 1.5.4
Environment: PHP 5.3.8, Windows or OSX
Reporter: A B
Fix For: 1.5.4
While decoding simple requests, observed that the time to decode was growing
much faster than expected. A 25k file would take 3 seconds to decode while a
570k file was taking approximately 45 minutes. The Ruby implementation does not
exhibit a similar issue; above 570k file takes about 3 seconds to decode.
Profiled the code and found that the problem lies in AvroStringIO::read($len) -
repeated calls to array_slice seem to cause the issue. Replaced the call to
array_slice with the following and now the 570k file is processed in about 5
seconds. I will submit the patch shortly as well but here is the new code:
class AvroStringIO extends AvroIO
{
...
public function read($len)
{
$this->check_closed();
//$read = array_slice($this->buffer, $this->current_index, $len);
$read=array();
for($i=$this->current_index; $i<($this->current_index+$len); $i++)
$read []=$this->buffer[$i];
...
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira