[
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)