Derby
  1. Derby
  2. DERBY-684

Improve performance of Clob objects (ClobOutputStream#write,ClobWriter#write) on the client

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Won't Fix
    • Affects Version/s: 10.1.1.0, 10.1.2.1, 10.2.1.6
    • Fix Version/s: None
    • Component/s: Network Client
    • Labels:
      None
    • Environment:
      all
    • Bug behavior facts:
      Performance

      Description

      Dan suggested this improvement here:
      http://issues.apache.org/jira/browse/DERBY-463?page=comments#action_12356742

      For org.apache.derby.client.am.ClobOutputStream#write(int), five objects are created for every byte written.

      "In fact this class and the client Clob have code like this everywhere, as the Clob is updated:

      clob_.string_ = clob_.string_.concat(new String(newByte));
      clob_.asciiStream_ = new java.io.StringBufferInputStream(clob_.string_);
      clob_.unicodeStream_ = new java.io.StringBufferInputStream(clob_.string_);
      clob_.characterStream_ = new java.io.StringReader(clob_.string_);

      Would probably be better to create most of those objects on demand, rather than on every modification. I mean if the CLOB is modified
      but the application never retrieives the ascii or character streams, what was the benefit of creating them? "
      ________________
      Also check the org.apache.derby.client.am.ClobWriter. Need to make this better and efficient.

        Issue Links

          Activity

          Hide
          Daniel John Debrunner added a comment -

          Note that StringBufferInputStream is non-portable and should not be used. It will lead to different output on platforms with different default encoding, e.g. IBM z/os. See DERBY-1256

          Show
          Daniel John Debrunner added a comment - Note that StringBufferInputStream is non-portable and should not be used. It will lead to different output on platforms with different default encoding, e.g. IBM z/os. See DERBY-1256
          Hide
          Myrna van Lunteren added a comment -

          I've looked at what's remaining of this code, and it appears to me it's only still used when interfacing with servers without loblocator support.
          Which means it'd be harder to test (only with cross-version server/client testing, which we currently don't do automated), and it'd be work that only would affect a small number of customers.

          I suggest we close this issue - the improvement of making the streams on demand, rather than on write - with no fix intended.
          (The StringBufferInputStream is listed, and should be viewed under, DERBY-1256, not under this section).

          Show
          Myrna van Lunteren added a comment - I've looked at what's remaining of this code, and it appears to me it's only still used when interfacing with servers without loblocator support. Which means it'd be harder to test (only with cross-version server/client testing, which we currently don't do automated), and it'd be work that only would affect a small number of customers. I suggest we close this issue - the improvement of making the streams on demand, rather than on write - with no fix intended. (The StringBufferInputStream is listed, and should be viewed under, DERBY-1256 , not under this section).
          Hide
          Dag H. Wanvik added a comment -

          +1 to close, linked it to DERBY-1256.

          Show
          Dag H. Wanvik added a comment - +1 to close, linked it to DERBY-1256 .
          Hide
          Myrna van Lunteren added a comment -

          This code is now in an 'else' code path, with the if being the loblocator code, which does create relevant objects on demand. So, this code is only used when interfacing with older servers and it seems not cost-effective to change this anymore.

          Show
          Myrna van Lunteren added a comment - This code is now in an 'else' code path, with the if being the loblocator code, which does create relevant objects on demand. So, this code is only used when interfacing with older servers and it seems not cost-effective to change this anymore.

            People

            • Assignee:
              Unassigned
              Reporter:
              Sunitha Kambhampati
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development