Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.1.2.1, 10.1.3.1
    • Fix Version/s: 10.2.1.6, 10.2.2.0, 10.3.1.4
    • Component/s: None
    • Labels:
      None
    • Environment:
      WinXp, JRE 1.5_6., Hibernate 3.1
    • Urgency:
      Normal
    • Bug behavior facts:
      Performance

      Description

      We are currently developing a system where we load between 1000 and 5000 objects in one go. The user can load different chunks of objects at any time as he/she is navigating.
      The system consist of a java application which accesses derby via hibernate.
      During profiling we discovered that the org.apache.derby.iapi.util.StringUtil is the biggest bottleneck in the system.
      The method SQLEqualsIgnoreCase(String s1, String s2) is doing upperCase on both s1 and s2, all the time.
      By putting the uppcase value into a Hashtable and using the input-string as key we increates the performance with about 40%.
      Our test-users report that the system now seems to run at "double speed".

      The class calling the StringUtil.SQLEqualsIgnoreCase in this case is

      org.apache.derby.impl.jdbc.EmbedResultSet

      This class should also be checked as it seems to do a lot of looping.
      It might be a canditate for hashing, as it is stated in the code:
      "// REVISIT: we might want to cache our own info..."

      Here is a diff agains the 10.1.3.1 source for org.apache.derby.iapi.util.StringUtil

      22a23
      > import java.util.Hashtable;
      319c320,326
      < return s1.toUpperCase(Locale.ENGLISH).equals(s2.toUpperCase(Locale.ENGLISH));

      > {
      > String s1Up = (String) uppercaseMap.get(s1);
      > if (s1Up == null)
      >

      { > s1Up = s1.toUpperCase(Locale.ENGLISH); > uppercaseMap.put(s1,s1Up); > }

      320a328,332
      > String s2Up = (String) uppercaseMap.get(s2);
      > if (s2Up == null)
      >

      { > s2Up = s2.toUpperCase(Locale.ENGLISH); > uppercaseMap.put(s2,s2Up); 321a334 > return s1Up.equals(s2Up); 322a336,339 > //return s1.toUpperCase(Locale.ENGLISH).equals(s2.toUpperCase(Locale.ENGLISH)); > }

      > }
      > private static Hashtable uppercaseMap = new Hashtable();

      1. DERBY-1696v2.diff
        11 kB
        Andreas Korneliussen
      2. DERBY-1862.diff
        1 kB
        Andreas Korneliussen
      3. DERBY-1862v2.diff
        3 kB
        Andreas Korneliussen
      4. DERBY-1862v3.diff
        3 kB
        Andreas Korneliussen

        Activity

        Gavin made changes -
        Workflow jira [ 12383909 ] Default workflow, editable Closed status [ 12799245 ]
        Dag H. Wanvik made changes -
        Derby Categories [Performance]
        Dag H. Wanvik made changes -
        Component/s Performance [ 11709 ]
        Myrna van Lunteren made changes -
        Resolution Fixed [ 1 ]
        Fix Version/s 10.2.1.6 [ 11187 ]
        Status Reopened [ 4 ] Closed [ 6 ]
        Fix Version/s 10.2.2.0 [ 12312027 ]
        Myrna van Lunteren made changes -
        Status Resolved [ 5 ] Reopened [ 4 ]
        Resolution Fixed [ 1 ]
        Daniel John Debrunner made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Assignee Andreas Korneliussen [ andreask ]
        Fix Version/s 10.3.0.0 [ 12310800 ]
        Andreas Korneliussen made changes -
        Attachment DERBY-1862v3.diff [ 12341390 ]
        Andreas Korneliussen made changes -
        Attachment DERBY-1862v2.diff [ 12341218 ]
        Andreas Korneliussen made changes -
        Attachment DERBY-1696v2.diff [ 12341217 ]
        Andreas Korneliussen made changes -
        Field Original Value New Value
        Attachment DERBY-1862.diff [ 12341047 ]
        Tore Andre Olmheim created issue -

          People

          • Assignee:
            Andreas Korneliussen
            Reporter:
            Tore Andre Olmheim
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development