Gabriel Reid created CALCITE-3333:
-------------------------------------

             Summary: Add time-based of ResultSet frame size limiting
                 Key: CALCITE-3333
                 URL: https://issues.apache.org/jira/browse/CALCITE-3333
             Project: Calcite
          Issue Type: New Feature
          Components: avatica
            Reporter: Gabriel Reid


The size of a single JDBC ResultSet frame returned in a single 
{{prepareAndExecute}} or {{fetch}} invocation is currently 100, meaning that 
each retrieval of a portion of a ResultSet will send 100 rows over the wire. 
This frame size may be too big in some situations, and too small in other 
situations.

If the underlying data source being queried can provide thousands of (small) 
records per second, then only reading them at 100 per RPC call will be 
unnecessarily slow.

On the other hand, if the underlying data source is only providing records at a 
rate of 1 per second, then it will take 100 seconds for each RPC call to 
return, which can lead to timeouts (particularly if Avatica server is sitting 
behind a proxy that has a strict request timeout).

The main factors to take into account when finding an ideal size of frame to 
return for each RPC call are:
* make the frames small enough that they don't overload either Avatica server 
or the client with overly large amounts of data at one time
* make the frames large enough so that the percentage of total query time that 
is spent only on RPC overhead is minimized

The general idea of this ticket is to add a pluggable "frame size limiting" 
functionality so that frame size limiting can be done based on the number of 
rows, number of bytes, amount of time spent building a frame, or any other 
property or combination of properties.

Note that CALCITE-2322 contains some work to allow configuring the size of a 
single frame on a Connection or Statement (via the {{setFetchSize}} method), 
although it's not yet merged in. That ticket would also be useful, and does not 
conflict with the general intent of this ticket.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to