Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-934

Avro PHP has a performance issue - it appears to operate in O(N^2) time when decoding messages

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.5.4
    • 1.6.0
    • php
    • PHP 5.3.8, Windows or OSX

    • Fix for performance issue in Avro PHP.

    Description

      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];
      ...

      Attachments

        1. 1.patch
          0.5 kB
          A B

        Activity

          People

            abawany A B
            abawany A B
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: