[ 
https://issues.apache.org/jira/browse/DERBY-7036?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16776595#comment-16776595
 ] 

Mark Paluch commented on DERBY-7036:
------------------------------------

The problems that reactive programming solves are the shortcomings of the 
imperative programming model. These are waiting for I/O wait (blocking I/O) and 
thread occupation longer than necessary, in particular. 

So
{quote}build highly responsive applications
{quote}
nails it.

We preserve the semantics of consistency and correctness. The two things that 
change is that applications work with a small reasonable (often fixed) number 
of threads and they use non-blocking code to perform a piece of work and as 
soon as this is done, the underlying thread processes another chunk of work. 
All I/O is non-blocking and as soon as a response is sent, the thread can 
continue its work. As soon as inbound response data arrives, a thread picks up 
work from there and processes a response. Therefore, this is typically called 
event-driven, functional-reactive programming.
{quote}Can a poor man's implementation of this be built by bolting an 
asynchronous api on top of JDBC?
{quote}
Yes, you can and this is being done for applications that want to use reactive 
APIs and do not have high scalability requirements, see:
 * [https://github.com/davidmoten/rxjava2-jdbc]
 * [https://github.com/oracle/oracle-db-examples/tree/master/java/AoJ]

{quote}Re-plumbing Derby to operate truly asynchronously would be a big project.
{quote}
I would be surprised to hear otherwise. This shouldn't be the goal here.
{quote}The engine assumes that only one statement at a time can run inside a 
session/connection/transaction.
{quote}
So do other databases, too, like SQL Server.
{quote}The network protocol (DRDA) appears to me to be synchronous.
{quote}
This reads for me as request/response without pipelining.

Regarding your last sentence, let me pick up on asynchronicity/concurrency. 
This is something that comes up often when speaking about reactive usage. 
Reactive does not impose async/concurrency behavior on any given source. In 
fact, most sources (speaking of a single connection) can do only one thing at a 
time and that is perfectly valid.

What we want to achieve is, that while sources are busy with 
preparing/producing responses, that we want to use CPU time on the application 
efficiently. While a source of data is busy, we switch execution to a unit of 
work that is ready to be processed.

R2DBC drivers for Postgres and SQL Server have a strong connection-affinity. A 
connection cannot process two queries in parallel nor can it handle two 
concurrent transactions. The rules of the underlying database apply to a 
connection and this is how it is supposed to work. We use the advantage of a 
non-blocking I/O layer to interact with the database according to its protocol 
rules.

> Investigate an R2DBC client implementation
> ------------------------------------------
>
>                 Key: DERBY-7036
>                 URL: https://issues.apache.org/jira/browse/DERBY-7036
>             Project: Derby
>          Issue Type: Improvement
>          Components: Network Client
>            Reporter: Mark Paluch
>            Priority: Major
>
> As programming models evolve towards functional data access patterns, it 
> would be great to have a non-blocking, reactive network client implementation 
> for Derby. The advantage of having a non-blocking I/O layer allows to scale 
> applications by orders of magnitude.
> There's an effort named R2DBC to bring Java-based, reactive database access 
> to relational databases using a standardized API. This ticket is here to 
> start some discussion around whether you'd be interested to look into this 
> and how we can help.
> A few resources to get you started:
>  * The project organization can be found [on Github|https://github.com/r2dbc] 
> and contains the SPI, a client API as well as Postgres implementation and an 
> H2 implementation.
>  * An [in-depth talk on the 
> topic|https://www.youtube.com/watch?v=idApf9DMdfk] by Ben Hale which is 
> basically _the_ introduction you can get.
>  * There's a [public mailing 
> list|https://groups.google.com/forum/#!forum/r2dbc] that summarizes the 
> events and activities around R2DBC.
>  * There's the [Spring Data R2DBC 
> project|https://github.com/spring-projects/spring-data-r2dbc] that provides a 
> good overview of how functional-reactive data access can look like.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to