[ http://issues.apache.org/jira/browse/DERBY-1559?page=comments#action_12423868 ] Andreas Korneliussen commented on DERBY-1559: ---------------------------------------------
Thanks I will update the patch to follow the approach suggested in DERBY-1535 when receiving multiple EXTDTA. > when receiving a single EXTDTA object representing a BLOB, the server do not > need to read it into memory before inserting it into the DB > ---------------------------------------------------------------------------------------------------------------------------------------- > > Key: DERBY-1559 > URL: http://issues.apache.org/jira/browse/DERBY-1559 > Project: Derby > Issue Type: Sub-task > Components: Network Server > Affects Versions: 10.2.0.0 > Reporter: Andreas Korneliussen > Assigned To: Andreas Korneliussen > Attachments: DERBY-1559.diff, DERBY-1559.stat > > > When streaming a BLOB from the Network Client to the Network Server, the > Network server currently read all the data from the stream and put it into a > byte array. > The blob data is then inserted into the DB by using > PreparedStatement.setBytes(..) > and later > PreparedStatement.execute() > To avoid OutOfMemoryError if the size of the Blob is > than total memory in > the VM, we could make the network server create a stream which reads data > when doing PreparedStatement.execute(). The DB will then stream the BLOB > data directly from the network inputstream into the disk. > I intent to make a patch which does this if there is only one EXTDTA object > (BLOB) sent from the client in the statement, as it will simplify the > implementation. Later this can be improved further to include CLOBs, and > possibly to include the cases where there are multiple EXTDTA objects. > -- > CLOBs are more complex, as there need to be some character encoding. This can > be achieved by using a InputStreamReader, and use > PreparedStatement.setCharacterStream(..). However the size of the stream is > not necessarily the same as the size of the raw binary data, and to do this > for CLOBs, I would need the embedded prepared statements to support the new > setCharacterStream() overloads in JDBC4 (which do not include a length > atribute) > -- > Multiple EXTDATA objects are also more complex, since one would need to have > fully read the previous object ,before it is possible to read the next. > -- -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira