Ron Passerini created OLINGO-1625:
-------------------------------------

             Summary: The serializers have performance issues when Entities 
contain very large numbers of Properties
                 Key: OLINGO-1625
                 URL: https://issues.apache.org/jira/browse/OLINGO-1625
             Project: Olingo
          Issue Type: Bug
          Components: odata4-server
    Affects Versions: Version (Java) V4 5.0.0
            Reporter: Ron Passerini
             Fix For: (Java) V4 5.0.1


I've implemented an OData service that serves up some large datasets in a 
streaming fashion. Some of those datasets have large numbers of fields (over 
1,000). When I requested one of them which was around 350M in size, it took way 
longer than expected.

I profiled the request in IntelliJ's profiler and found that over 75% of the 
CPU cycles were spent in String.equals() comparing column names in the 
serializers. This is because there is an O(N^2) issue that for every column 
selected (in my case all of them) it will iterate across the entire list of 
entity properties looking for the one with the same name.

I have already implemented a fix whereby before doing the property 
serialization, the serializer builds a hash map of property-name-to-property, 
making the resulting algorithm O(N) with the number of properties being 
serialized.

After profiling the change, again in IntelliJ's profiler, the String.equals() 
which was over 75% before, is now under 1%.

I will be creating a patch and attaching it momentarily.

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to