SlideShare a Scribd company logo
1 of 19
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
San Francisco Java Users Group
A Java Library for High-Speed Streaming
Data into Your Database
Pablo Silberkasten, Software Development Manager, Oracle
Kuassi Mensah, Director Product Management, Oracle
OJDBC and OJVM Development
April 15, 2019
Confidential – Oracle Internal/Restricted/Highly Restricted
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for
information purposes only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied upon
in making purchasing decisions. The development, release, timing, and pricing of any
features or functionality described for Oracle’s products may change and remains at the
sole discretion of Oracle Corporation.
Confidential – Oracle Internal/Restricted/Highly Restricted
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
Challenges when Streaming Data into the Database
Introducing the High Speed Streaming Library
API and Code Samples
Cloud Service Demo
1
2
3
4
Confidential – Oracle Internal/Restricted/Highly Restricted 3
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Challenges when Streaming Data into the Database
• Scalability: handle thousands of concurrent clients streaming data into the
same table/database
• Responsiveness: minimal response time, asynchronous processing, with
non-blocking back-pressure
• Elasticity: responsiveness not being affected under varying workload
Common requirements for multiple concurrent agents streaming data
Confidential – Oracle Internal/Restricted/Highly Restricted 4
In these scenarios regular JDBC inserts will not scale
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Challenges when Streaming Data into the Database
• Automatic Routing (payload dependent)
• High Availability
• Disaster Recover
• Planned Maintenance and changes in the database topology
• Database upgrades (use new features with no changes on the client)
Transparently exploit -with no changes in the client- features of the Database
Confidential – Oracle Internal/Restricted/Highly Restricted 5
Provide an abstraction layer with these features
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
Challenges when Streaming Data into the Database
Introducing the High Speed Streaming Library
API and Code Samples
Cloud Service Demo
1
2
3
4
Confidential – Oracle Internal/Restricted/Highly Restricted 6
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Introducing the High Speed Streaming Library
• Fastest insert method for Oracle
Database: through Direct Path
• RAC and Shard awareness (routing
capabilities): through native UCP
• Extremely simple to configure and use
• Streaming capability: unblockingly
receive data from a large group of
clients
Java library that allows users to stream data into the Oracle Database
Confidential – Oracle Internal/Restricted/Highly Restricted 7
UCP
Connection
Pool
Thin Driver Direct
Path
Core Library
Local Threads
processing
queues
(grouped
records) with
tagged
connections
queue2
queue1
Java Client
(Push
Publisher
API)
Java Client
(Flow
Publisher
API)
accept(byte[])
onNext(byte[])
request(n)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Introducing the High Speed Streaming Library
– Since 19c Thin Driver supports Direct Path Insert as part of the Oracle Connection
internal APIs (not JDBC standard)
– The library uses these APIs for loading bulk data faster in database.
– Direct Path skips SQL engine in server side writing data directly in database buffers.
– Direct Path loads stream in a table or in a partition with some intrinsic limitations:
• Triggers are not supported
• Referential integrity is not checked
• Partitioning columns come before any LOB
Fastest insert method for Oracle Database: through Direct Path
Confidential – Oracle Internal/Restricted/Highly Restricted 8
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Introducing the High Speed Streaming Library
– Through UCP usage get the capability to recognize the sharding keys specified by the
users and allow them to connect to the specific shard and chunk
– Cache sharding-key ranges to the location of the shard to allow connection request
bypassing the GSM (shard director)
– Select an available connection in the pool just by providing sharding keys; this allows
the reuse of connections to various shards by using the cached routing topology
RAC and Shard awareness (routing capabilities): through native UCP
Confidential – Oracle Internal/Restricted/Highly Restricted 9
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Introducing the High Speed Streaming Library
Extremely simple to configure and use
Confidential – Oracle Internal/Restricted/Highly Restricted 10
// Simple and intuitive constructor
FastIngestSuite fis = new FISBuilder()
.url(url)
.schema("scott")
.username("scott")
.password("tiger")
.executor(newScheduledThreadPool(2))
.bufferCapacity(bufferCapacity)
.bufferInterval(Duration.ofMillis(1000))
.transformer(bytes -> new Customer(bytes)) // Function<byte[], Record>
.table("customers")
.columns(new String[] { "ID", "NAME", "REGION" })
.build();
// Coming soon!: Record API (no need for transformer, table and/or column
@Record
@Table(name = “customers”)
class Costumer {
@Column(name = “ID”) private long id;
@Column(name = “NAME”) private String name;
@Column(name = “REGION”) private String region;
}
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
Challenges when Streaming Data into the Database
Introducing the High Speed Streaming Library
API and Code Samples
Demo
1
2
3
4
Confidential – Oracle Internal/Restricted/Highly Restricted 11
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
API and Code Samples
Push Publisher - For Simple Usage
Confidential – Oracle Internal/Restricted/Highly Restricted 12
FastIngestSuite fis = FastIngestSuite.builder(). . . // Easy constructor
.transformer(bytes -> { // Lambda transformation
final Transformer.Record record = new Transformer.Record();
record.setColumnValue("payload", bytes);
record.setColumnValue("state_code", "CA");
return record;})
.table("fis_demo_nonsharded_sample")
.build();
PushPublisher<byte[]> pushPublisher = FastIngestSuite.pushPublisher(); // Factory builder
pushPublisher.subscribe(fis.subscriberByteArray());
// Ingest ad-hoc
pushPublisher.accept(new byte[] {'a', 'b'});
// Ingest using Consumer Functional Interface
List<byte[]> data = Arrays.asList(
new byte[] { 'a', 'b' }, new byte[] { 'a', 'c' }, new byte[] { 'b', 'c' });
data.stream()
.filter(p -> p[0] == 'b')
.forEach(pushPublisher::accept);
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
API and Code Samples
Flow Publisher - A recap on Flow API
Confidential – Oracle Internal/Restricted/Highly Restricted 13
Provided by the library
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
API and Code Samples
Flow Publisher - Creating Custom Publishers
Confidential – Oracle Internal/Restricted/Highly Restricted 14
// Library user creates Publisher’s implementation
public class MyPublisher implements Publisher<byte[]> {
// This implementation has a reference to the threadpool where execution will take place
private final ExecutorService threadPool;
// This implementation has a reference to only one subscription (it could be more than one)
private Subscription subscription = null;
// Implementation must provide a subscribe behavior
@Override public void subscribe(Subscriber<? super byte[]> subscriber) {
subscription = new MySubscription(); // Subscription also provided by user
(fisSubscriber = subscriber).onSubscribe(subscription); // Execute subscriber’s onSubscribe
startPublishing(); // Optional, start publishing after subscription
. . .
// Sample publishing (like startPublishing)
private void startPublishing() {
threadPool.submit(() -> { // publishing executes on the Publisher’s threadppol
while (recordsCount > 0) {
fisSubscriber.onNext(byteArray); // <- onNext’s subscriber is where the data is sent
recordsCount--; // . . .
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
API and Code Samples
Flow Publisher - Using the Custom Publisher with the Library
Confidential – Oracle Internal/Restricted/Highly Restricted 15
// Create the publisher and subscribe to Library’s subscriber
MyPublisher myPublisher = new MyPublisher(threadPool, recordsCount);
flowPublisher.subscribe(fis.subscriberByteArray()); // Subscriber provided by the library (onNext –> ingest)
// Subscription provided by the user
private class MySubscription implements Subscription {
@Override public void request(long request) {
demand.addAndGet(request); // This is the mechanism for the Subscriber to signal unfulfilled demand
}
@Override public void cancel() {
isCancelled = true; // The subscriber signaling that it will stop receiving message
}
}
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
API and Code Samples
Flow Publisher - The Library is the Subscriber
Confidential – Oracle Internal/Restricted/Highly Restricted 16
public class FlowSubscriber<T> implements Flow.Subscriber<T> {
@Override public void onSubscribe(Subscription givenSubscription) { // It’s called from the Publisher
if (activeSubscription == null) {
isSubscribed = true;
activeSubscription = givenSubscription;
long request = fis.request(); // Check availability on the internal buffer
if (request > 0) {
activeSubscription.request(request); // Signal availability . . .
@Override public void onNext(T item) {
// Unblocking adding item to the buffer
// Ingestion will execute in the library's threadpool (which is the most important feature!)
fis.putRecord((byte[]) item);
// Calculate remaining capability and signal
long request = fis.request();
if (request > 0) {
activeSubscription.request(request);
} else {
// Buffer is full . . .
@Override public void onError(Throwable throwable) { // Provide error handling
@Override public void onComplete() { // Provide completion handling
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
API and Code Samples
Flow Publisher – Using SubmissionPublisher (java.base module/java.util.concurrent pck.)
Confidential – Oracle Internal/Restricted/Highly Restricted 17
// Use SubmissionPublisher provided by the JRE
// Default ForkJoinPool.commonPool();, DEFAULT_BUFFER_SIZE = 256;
SubmissionPublisher<byte[]> publisher = new SubmissionPublisher<>();
publisher.subscribe(fis.subscriberByteArray());
// User publisher’s built-in methods: submit, offer, status of Pubs vs Subs.
publisher.submit(new byte[] { 'a', 'b' });
// Graceful shutdown
publisher.close();
fis.close();
ForkJoinPool.commonPool().shutdown();
Flow Publisher – Ready for 3rd party implementations!
• RxJava
• Reactive4JavaFlow
• Future implementations!
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
Challenges when Streaming Data into the Database
Introducing the High Speed Streaming Library
API and Code Samples
Demo
1
2
3
4
Confidential – Oracle Internal/Restricted/Highly Restricted 18
POC
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Demo & Outcome
Confidential – Oracle Internal/Restricted/Highly Restricted 19
Oracle Database 19c running
on 1 Exalogic X4-2 compute
node*.
Table:
• Id
• Name
• Region
*Exalogic X4-2 compute node - Memory: 94.6GB - CPU 12 cores, 24 threads, 2 sockets, Intel Xeon Processor X5675 3.07GHz,
Collector running on 1
Exalogic X4-2 compute
node*.
• 4 threads for service I/O
• 8 threads for library
• 20s buffer limit
• 4gb buffer cap
JMeter (load simulator)
running on 1 Exalogic X4-2
compute node*.
• 10.000 concurrent threads
• 2’ start up time
• 0.25s between posts
• 120b payload
Rate: 40.000 rpc/second
Avg. response time: ~ 4-5ms

More Related Content

What's hot

eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 DatabaseeProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 DatabaseMarco Gralike
 
Oracle GoldenGate Performance Tuning
Oracle GoldenGate Performance TuningOracle GoldenGate Performance Tuning
Oracle GoldenGate Performance TuningBobby Curtis
 
New Generation Oracle RAC Performance
New Generation Oracle RAC PerformanceNew Generation Oracle RAC Performance
New Generation Oracle RAC PerformanceAnil Nair
 
Oracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best PracticesOracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best PracticesBobby Curtis
 
Using Machine Learning to Debug complex Oracle RAC Issues
Using Machine Learning  to Debug complex Oracle RAC IssuesUsing Machine Learning  to Debug complex Oracle RAC Issues
Using Machine Learning to Debug complex Oracle RAC IssuesAnil Nair
 
TFA, ORAchk and EXAchk 20.2 - What's new
TFA, ORAchk and EXAchk 20.2 - What's new TFA, ORAchk and EXAchk 20.2 - What's new
TFA, ORAchk and EXAchk 20.2 - What's new Sandesh Rao
 
Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )Mari Kupatadze
 
What’s New in Oracle Database 19c - Part 1
What’s New in Oracle Database 19c - Part 1What’s New in Oracle Database 19c - Part 1
What’s New in Oracle Database 19c - Part 1Satishbabu Gunukula
 
Hit Refresh with Oracle GoldenGate Microservices
Hit Refresh with Oracle GoldenGate MicroservicesHit Refresh with Oracle GoldenGate Microservices
Hit Refresh with Oracle GoldenGate MicroservicesBobby Curtis
 
Hive ACID Apache BigData 2016
Hive ACID Apache BigData 2016Hive ACID Apache BigData 2016
Hive ACID Apache BigData 2016alanfgates
 
The Oracle Autonomous Database
The Oracle Autonomous DatabaseThe Oracle Autonomous Database
The Oracle Autonomous DatabaseConnor McDonald
 
Best practices and lessons learnt from Running Apache NiFi at Renault
Best practices and lessons learnt from Running Apache NiFi at RenaultBest practices and lessons learnt from Running Apache NiFi at Renault
Best practices and lessons learnt from Running Apache NiFi at RenaultDataWorks Summit
 
Rac 12c rel2_operational_best_practices_sangam_2017_as_pdf
Rac 12c rel2_operational_best_practices_sangam_2017_as_pdfRac 12c rel2_operational_best_practices_sangam_2017_as_pdf
Rac 12c rel2_operational_best_practices_sangam_2017_as_pdfAnil Nair
 
Anil nair rac_internals_sangam_2016
Anil nair rac_internals_sangam_2016Anil nair rac_internals_sangam_2016
Anil nair rac_internals_sangam_2016Anil Nair
 
Running Enterprise Workloads in the Cloud
Running Enterprise Workloads in the CloudRunning Enterprise Workloads in the Cloud
Running Enterprise Workloads in the CloudDataWorks Summit
 
How to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata EnvironmentsHow to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata EnvironmentsSandesh Rao
 
Building RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSBuilding RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSLuciano Resende
 
Oracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsOracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsAnil Nair
 
New availability features in oracle rac 12c release 2 anair ss
New availability features in oracle rac 12c release 2 anair   ssNew availability features in oracle rac 12c release 2 anair   ss
New availability features in oracle rac 12c release 2 anair ssAnil Nair
 

What's hot (20)

eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 DatabaseeProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
eProseed Oracle Open World 2016 debrief - Oracle 12.2.0.1 Database
 
Oracle GoldenGate Performance Tuning
Oracle GoldenGate Performance TuningOracle GoldenGate Performance Tuning
Oracle GoldenGate Performance Tuning
 
New Generation Oracle RAC Performance
New Generation Oracle RAC PerformanceNew Generation Oracle RAC Performance
New Generation Oracle RAC Performance
 
Oracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best PracticesOracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best Practices
 
Using Machine Learning to Debug complex Oracle RAC Issues
Using Machine Learning  to Debug complex Oracle RAC IssuesUsing Machine Learning  to Debug complex Oracle RAC Issues
Using Machine Learning to Debug complex Oracle RAC Issues
 
TFA, ORAchk and EXAchk 20.2 - What's new
TFA, ORAchk and EXAchk 20.2 - What's new TFA, ORAchk and EXAchk 20.2 - What's new
TFA, ORAchk and EXAchk 20.2 - What's new
 
Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )
 
What’s New in Oracle Database 19c - Part 1
What’s New in Oracle Database 19c - Part 1What’s New in Oracle Database 19c - Part 1
What’s New in Oracle Database 19c - Part 1
 
Hit Refresh with Oracle GoldenGate Microservices
Hit Refresh with Oracle GoldenGate MicroservicesHit Refresh with Oracle GoldenGate Microservices
Hit Refresh with Oracle GoldenGate Microservices
 
Hive ACID Apache BigData 2016
Hive ACID Apache BigData 2016Hive ACID Apache BigData 2016
Hive ACID Apache BigData 2016
 
The Oracle Autonomous Database
The Oracle Autonomous DatabaseThe Oracle Autonomous Database
The Oracle Autonomous Database
 
Best practices and lessons learnt from Running Apache NiFi at Renault
Best practices and lessons learnt from Running Apache NiFi at RenaultBest practices and lessons learnt from Running Apache NiFi at Renault
Best practices and lessons learnt from Running Apache NiFi at Renault
 
Rac 12c rel2_operational_best_practices_sangam_2017_as_pdf
Rac 12c rel2_operational_best_practices_sangam_2017_as_pdfRac 12c rel2_operational_best_practices_sangam_2017_as_pdf
Rac 12c rel2_operational_best_practices_sangam_2017_as_pdf
 
OOW19 - HOL5221
OOW19 - HOL5221OOW19 - HOL5221
OOW19 - HOL5221
 
Anil nair rac_internals_sangam_2016
Anil nair rac_internals_sangam_2016Anil nair rac_internals_sangam_2016
Anil nair rac_internals_sangam_2016
 
Running Enterprise Workloads in the Cloud
Running Enterprise Workloads in the CloudRunning Enterprise Workloads in the Cloud
Running Enterprise Workloads in the Cloud
 
How to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata EnvironmentsHow to Use EXAchk Effectively to Manage Exadata Environments
How to Use EXAchk Effectively to Manage Exadata Environments
 
Building RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSBuilding RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RS
 
Oracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsOracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret Internals
 
New availability features in oracle rac 12c release 2 anair ss
New availability features in oracle rac 12c release 2 anair   ssNew availability features in oracle rac 12c release 2 anair   ss
New availability features in oracle rac 12c release 2 anair ss
 

Similar to Java Library for High Speed Streaming Data

OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeGeorgi Kodinov
 
Oracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ OverviewOracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ OverviewKris Rice
 
TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...
TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...
TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...Juarez Junior
 
Node.js and Oracle Database: New Development Techniques
Node.js and Oracle Database: New Development TechniquesNode.js and Oracle Database: New Development Techniques
Node.js and Oracle Database: New Development TechniquesChristopher Jones
 
Boost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BSBoost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BSInformation Development World
 
Oracle goldegate microservice
Oracle goldegate microserviceOracle goldegate microservice
Oracle goldegate microserviceMojtaba Khandan
 
Oracle Cloud DBaaS
Oracle Cloud DBaaSOracle Cloud DBaaS
Oracle Cloud DBaaSArush Jain
 
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...Trivadis
 
Introduction to MySQL
Introduction to MySQLIntroduction to MySQL
Introduction to MySQLTed Wennmark
 
Deep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdf
Deep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdfDeep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdf
Deep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdfMiguel Araújo
 
RMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New FeaturesRMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New FeaturesDave Stokes
 
Whats new in Oracle Trace File analyzer 18.3.0
Whats new in Oracle Trace File analyzer 18.3.0Whats new in Oracle Trace File analyzer 18.3.0
Whats new in Oracle Trace File analyzer 18.3.0Sandesh Rao
 
Whats new in oracle trace file analyzer 18.3.0
Whats new in oracle trace file analyzer 18.3.0Whats new in oracle trace file analyzer 18.3.0
Whats new in oracle trace file analyzer 18.3.0Gareth Chapman
 
MySQL User Camp : MySQL-Router
MySQL User Camp : MySQL-RouterMySQL User Camp : MySQL-Router
MySQL User Camp : MySQL-RouterPrasad Vasudevan
 
MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)
MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)
MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)Miguel Araújo
 
Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022Sandesh Rao
 
Přehled portfolia Oracle Database Appliance a praktických případů v regionu EMEA
Přehled portfolia Oracle Database Appliance a praktických případů v regionu EMEAPřehled portfolia Oracle Database Appliance a praktických případů v regionu EMEA
Přehled portfolia Oracle Database Appliance a praktických případů v regionu EMEAMarketingArrowECS_CZ
 

Similar to Java Library for High Speed Streaming Data (20)

OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source Code
 
Oracle Cloud
Oracle CloudOracle Cloud
Oracle Cloud
 
Oracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ OverviewOracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ Overview
 
TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...
TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...
TDC Connections 2023 - A High-Speed Data Ingestion Service in Java Using MQTT...
 
Node.js and Oracle Database: New Development Techniques
Node.js and Oracle Database: New Development TechniquesNode.js and Oracle Database: New Development Techniques
Node.js and Oracle Database: New Development Techniques
 
Boost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BSBoost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BS
 
Oracle goldegate microservice
Oracle goldegate microserviceOracle goldegate microservice
Oracle goldegate microservice
 
Oracle Cloud DBaaS
Oracle Cloud DBaaSOracle Cloud DBaaS
Oracle Cloud DBaaS
 
con8832-cloudha-2811114.pdf
con8832-cloudha-2811114.pdfcon8832-cloudha-2811114.pdf
con8832-cloudha-2811114.pdf
 
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
 
Introduction to MySQL
Introduction to MySQLIntroduction to MySQL
Introduction to MySQL
 
Deep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdf
Deep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdfDeep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdf
Deep Dive into MySQL InnoDB Cluster Read Scale-out Capabilities.pdf
 
RMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New FeaturesRMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New Features
 
Whats new in Oracle Trace File analyzer 18.3.0
Whats new in Oracle Trace File analyzer 18.3.0Whats new in Oracle Trace File analyzer 18.3.0
Whats new in Oracle Trace File analyzer 18.3.0
 
Whats new in oracle trace file analyzer 18.3.0
Whats new in oracle trace file analyzer 18.3.0Whats new in oracle trace file analyzer 18.3.0
Whats new in oracle trace file analyzer 18.3.0
 
My sql router
My sql routerMy sql router
My sql router
 
MySQL User Camp : MySQL-Router
MySQL User Camp : MySQL-RouterMySQL User Camp : MySQL-Router
MySQL User Camp : MySQL-Router
 
MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)
MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)
MySQL Router - Explore The Secrets (MySQL Belgian Days 2024)
 
Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022Whats new in Autonomous Database in 2022
Whats new in Autonomous Database in 2022
 
Přehled portfolia Oracle Database Appliance a praktických případů v regionu EMEA
Přehled portfolia Oracle Database Appliance a praktických případů v regionu EMEAPřehled portfolia Oracle Database Appliance a praktických případů v regionu EMEA
Přehled portfolia Oracle Database Appliance a praktických případů v regionu EMEA
 

More from Oracle Developers

Running Kubernetes Workloads on Oracle Cloud Infrastructure
Running Kubernetes Workloads on Oracle Cloud InfrastructureRunning Kubernetes Workloads on Oracle Cloud Infrastructure
Running Kubernetes Workloads on Oracle Cloud InfrastructureOracle Developers
 
Apex atp customer_presentation_wwc march 2019
Apex atp customer_presentation_wwc march 2019Apex atp customer_presentation_wwc march 2019
Apex atp customer_presentation_wwc march 2019Oracle Developers
 
Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.Oracle Developers
 
Fn meetup by Sardar Jamal Arif
Fn meetup by Sardar Jamal ArifFn meetup by Sardar Jamal Arif
Fn meetup by Sardar Jamal ArifOracle Developers
 
Get ready for_an_autonomous_data_driven_future_ext
Get ready for_an_autonomous_data_driven_future_extGet ready for_an_autonomous_data_driven_future_ext
Get ready for_an_autonomous_data_driven_future_extOracle Developers
 
Cloud Native Meetup Santa Clara 07-11-2019 by Manish Kapur
Cloud Native Meetup Santa Clara 07-11-2019 by Manish KapurCloud Native Meetup Santa Clara 07-11-2019 by Manish Kapur
Cloud Native Meetup Santa Clara 07-11-2019 by Manish KapurOracle Developers
 
Container Native Development Tools - Talk by Mickey Boxell
Container Native Development Tools - Talk by Mickey BoxellContainer Native Development Tools - Talk by Mickey Boxell
Container Native Development Tools - Talk by Mickey BoxellOracle Developers
 
General Capabilities of GraalVM by Oleg Selajev @shelajev
General Capabilities of GraalVM by Oleg Selajev @shelajevGeneral Capabilities of GraalVM by Oleg Selajev @shelajev
General Capabilities of GraalVM by Oleg Selajev @shelajevOracle Developers
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevOracle Developers
 
Serverless Patterns by Jesse Butler
Serverless Patterns by Jesse ButlerServerless Patterns by Jesse Butler
Serverless Patterns by Jesse ButlerOracle Developers
 
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...Oracle Developers
 
Managing containers on Oracle Cloud by Jamal Arif
Managing containers on Oracle Cloud by Jamal ArifManaging containers on Oracle Cloud by Jamal Arif
Managing containers on Oracle Cloud by Jamal ArifOracle Developers
 
North America November Meetups
North America November MeetupsNorth America November Meetups
North America November MeetupsOracle Developers
 
GraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish AbramsGraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish AbramsOracle Developers
 
North America Meetups in September
North America Meetups in September North America Meetups in September
North America Meetups in September Oracle Developers
 
Introduction to the Oracle Container Engine
Introduction to the Oracle Container EngineIntroduction to the Oracle Container Engine
Introduction to the Oracle Container EngineOracle Developers
 
Oracle Data Science Platform
Oracle Data Science PlatformOracle Data Science Platform
Oracle Data Science PlatformOracle Developers
 
Persistent storage with containers By Kaslin Fields
Persistent storage with containers By Kaslin FieldsPersistent storage with containers By Kaslin Fields
Persistent storage with containers By Kaslin FieldsOracle Developers
 
The Fn Project by Jesse Butler
 The Fn Project by Jesse Butler The Fn Project by Jesse Butler
The Fn Project by Jesse ButlerOracle Developers
 

More from Oracle Developers (20)

Running Kubernetes Workloads on Oracle Cloud Infrastructure
Running Kubernetes Workloads on Oracle Cloud InfrastructureRunning Kubernetes Workloads on Oracle Cloud Infrastructure
Running Kubernetes Workloads on Oracle Cloud Infrastructure
 
Apex atp customer_presentation_wwc march 2019
Apex atp customer_presentation_wwc march 2019Apex atp customer_presentation_wwc march 2019
Apex atp customer_presentation_wwc march 2019
 
Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.
 
Fn meetup by Sardar Jamal Arif
Fn meetup by Sardar Jamal ArifFn meetup by Sardar Jamal Arif
Fn meetup by Sardar Jamal Arif
 
Get ready for_an_autonomous_data_driven_future_ext
Get ready for_an_autonomous_data_driven_future_extGet ready for_an_autonomous_data_driven_future_ext
Get ready for_an_autonomous_data_driven_future_ext
 
Cloud Native Meetup Santa Clara 07-11-2019 by Manish Kapur
Cloud Native Meetup Santa Clara 07-11-2019 by Manish KapurCloud Native Meetup Santa Clara 07-11-2019 by Manish Kapur
Cloud Native Meetup Santa Clara 07-11-2019 by Manish Kapur
 
Container Native Development Tools - Talk by Mickey Boxell
Container Native Development Tools - Talk by Mickey BoxellContainer Native Development Tools - Talk by Mickey Boxell
Container Native Development Tools - Talk by Mickey Boxell
 
General Capabilities of GraalVM by Oleg Selajev @shelajev
General Capabilities of GraalVM by Oleg Selajev @shelajevGeneral Capabilities of GraalVM by Oleg Selajev @shelajev
General Capabilities of GraalVM by Oleg Selajev @shelajev
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajev
 
Serverless Patterns by Jesse Butler
Serverless Patterns by Jesse ButlerServerless Patterns by Jesse Butler
Serverless Patterns by Jesse Butler
 
Artificial Intelligence
Artificial IntelligenceArtificial Intelligence
Artificial Intelligence
 
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
Reactive Java Programming: A new Asynchronous Database Access API by Kuassi M...
 
Managing containers on Oracle Cloud by Jamal Arif
Managing containers on Oracle Cloud by Jamal ArifManaging containers on Oracle Cloud by Jamal Arif
Managing containers on Oracle Cloud by Jamal Arif
 
North America November Meetups
North America November MeetupsNorth America November Meetups
North America November Meetups
 
GraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish AbramsGraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
 
North America Meetups in September
North America Meetups in September North America Meetups in September
North America Meetups in September
 
Introduction to the Oracle Container Engine
Introduction to the Oracle Container EngineIntroduction to the Oracle Container Engine
Introduction to the Oracle Container Engine
 
Oracle Data Science Platform
Oracle Data Science PlatformOracle Data Science Platform
Oracle Data Science Platform
 
Persistent storage with containers By Kaslin Fields
Persistent storage with containers By Kaslin FieldsPersistent storage with containers By Kaslin Fields
Persistent storage with containers By Kaslin Fields
 
The Fn Project by Jesse Butler
 The Fn Project by Jesse Butler The Fn Project by Jesse Butler
The Fn Project by Jesse Butler
 

Recently uploaded

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 

Recently uploaded (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 

Java Library for High Speed Streaming Data

  • 1. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | San Francisco Java Users Group A Java Library for High-Speed Streaming Data into Your Database Pablo Silberkasten, Software Development Manager, Oracle Kuassi Mensah, Director Product Management, Oracle OJDBC and OJVM Development April 15, 2019 Confidential – Oracle Internal/Restricted/Highly Restricted
  • 2. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation. Confidential – Oracle Internal/Restricted/Highly Restricted
  • 3. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Program Agenda Challenges when Streaming Data into the Database Introducing the High Speed Streaming Library API and Code Samples Cloud Service Demo 1 2 3 4 Confidential – Oracle Internal/Restricted/Highly Restricted 3
  • 4. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Challenges when Streaming Data into the Database • Scalability: handle thousands of concurrent clients streaming data into the same table/database • Responsiveness: minimal response time, asynchronous processing, with non-blocking back-pressure • Elasticity: responsiveness not being affected under varying workload Common requirements for multiple concurrent agents streaming data Confidential – Oracle Internal/Restricted/Highly Restricted 4 In these scenarios regular JDBC inserts will not scale
  • 5. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Challenges when Streaming Data into the Database • Automatic Routing (payload dependent) • High Availability • Disaster Recover • Planned Maintenance and changes in the database topology • Database upgrades (use new features with no changes on the client) Transparently exploit -with no changes in the client- features of the Database Confidential – Oracle Internal/Restricted/Highly Restricted 5 Provide an abstraction layer with these features
  • 6. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Program Agenda Challenges when Streaming Data into the Database Introducing the High Speed Streaming Library API and Code Samples Cloud Service Demo 1 2 3 4 Confidential – Oracle Internal/Restricted/Highly Restricted 6
  • 7. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Introducing the High Speed Streaming Library • Fastest insert method for Oracle Database: through Direct Path • RAC and Shard awareness (routing capabilities): through native UCP • Extremely simple to configure and use • Streaming capability: unblockingly receive data from a large group of clients Java library that allows users to stream data into the Oracle Database Confidential – Oracle Internal/Restricted/Highly Restricted 7 UCP Connection Pool Thin Driver Direct Path Core Library Local Threads processing queues (grouped records) with tagged connections queue2 queue1 Java Client (Push Publisher API) Java Client (Flow Publisher API) accept(byte[]) onNext(byte[]) request(n)
  • 8. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Introducing the High Speed Streaming Library – Since 19c Thin Driver supports Direct Path Insert as part of the Oracle Connection internal APIs (not JDBC standard) – The library uses these APIs for loading bulk data faster in database. – Direct Path skips SQL engine in server side writing data directly in database buffers. – Direct Path loads stream in a table or in a partition with some intrinsic limitations: • Triggers are not supported • Referential integrity is not checked • Partitioning columns come before any LOB Fastest insert method for Oracle Database: through Direct Path Confidential – Oracle Internal/Restricted/Highly Restricted 8
  • 9. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Introducing the High Speed Streaming Library – Through UCP usage get the capability to recognize the sharding keys specified by the users and allow them to connect to the specific shard and chunk – Cache sharding-key ranges to the location of the shard to allow connection request bypassing the GSM (shard director) – Select an available connection in the pool just by providing sharding keys; this allows the reuse of connections to various shards by using the cached routing topology RAC and Shard awareness (routing capabilities): through native UCP Confidential – Oracle Internal/Restricted/Highly Restricted 9
  • 10. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Introducing the High Speed Streaming Library Extremely simple to configure and use Confidential – Oracle Internal/Restricted/Highly Restricted 10 // Simple and intuitive constructor FastIngestSuite fis = new FISBuilder() .url(url) .schema("scott") .username("scott") .password("tiger") .executor(newScheduledThreadPool(2)) .bufferCapacity(bufferCapacity) .bufferInterval(Duration.ofMillis(1000)) .transformer(bytes -> new Customer(bytes)) // Function<byte[], Record> .table("customers") .columns(new String[] { "ID", "NAME", "REGION" }) .build(); // Coming soon!: Record API (no need for transformer, table and/or column @Record @Table(name = “customers”) class Costumer { @Column(name = “ID”) private long id; @Column(name = “NAME”) private String name; @Column(name = “REGION”) private String region; }
  • 11. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Program Agenda Challenges when Streaming Data into the Database Introducing the High Speed Streaming Library API and Code Samples Demo 1 2 3 4 Confidential – Oracle Internal/Restricted/Highly Restricted 11
  • 12. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | API and Code Samples Push Publisher - For Simple Usage Confidential – Oracle Internal/Restricted/Highly Restricted 12 FastIngestSuite fis = FastIngestSuite.builder(). . . // Easy constructor .transformer(bytes -> { // Lambda transformation final Transformer.Record record = new Transformer.Record(); record.setColumnValue("payload", bytes); record.setColumnValue("state_code", "CA"); return record;}) .table("fis_demo_nonsharded_sample") .build(); PushPublisher<byte[]> pushPublisher = FastIngestSuite.pushPublisher(); // Factory builder pushPublisher.subscribe(fis.subscriberByteArray()); // Ingest ad-hoc pushPublisher.accept(new byte[] {'a', 'b'}); // Ingest using Consumer Functional Interface List<byte[]> data = Arrays.asList( new byte[] { 'a', 'b' }, new byte[] { 'a', 'c' }, new byte[] { 'b', 'c' }); data.stream() .filter(p -> p[0] == 'b') .forEach(pushPublisher::accept);
  • 13. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | API and Code Samples Flow Publisher - A recap on Flow API Confidential – Oracle Internal/Restricted/Highly Restricted 13 Provided by the library
  • 14. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | API and Code Samples Flow Publisher - Creating Custom Publishers Confidential – Oracle Internal/Restricted/Highly Restricted 14 // Library user creates Publisher’s implementation public class MyPublisher implements Publisher<byte[]> { // This implementation has a reference to the threadpool where execution will take place private final ExecutorService threadPool; // This implementation has a reference to only one subscription (it could be more than one) private Subscription subscription = null; // Implementation must provide a subscribe behavior @Override public void subscribe(Subscriber<? super byte[]> subscriber) { subscription = new MySubscription(); // Subscription also provided by user (fisSubscriber = subscriber).onSubscribe(subscription); // Execute subscriber’s onSubscribe startPublishing(); // Optional, start publishing after subscription . . . // Sample publishing (like startPublishing) private void startPublishing() { threadPool.submit(() -> { // publishing executes on the Publisher’s threadppol while (recordsCount > 0) { fisSubscriber.onNext(byteArray); // <- onNext’s subscriber is where the data is sent recordsCount--; // . . .
  • 15. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | API and Code Samples Flow Publisher - Using the Custom Publisher with the Library Confidential – Oracle Internal/Restricted/Highly Restricted 15 // Create the publisher and subscribe to Library’s subscriber MyPublisher myPublisher = new MyPublisher(threadPool, recordsCount); flowPublisher.subscribe(fis.subscriberByteArray()); // Subscriber provided by the library (onNext –> ingest) // Subscription provided by the user private class MySubscription implements Subscription { @Override public void request(long request) { demand.addAndGet(request); // This is the mechanism for the Subscriber to signal unfulfilled demand } @Override public void cancel() { isCancelled = true; // The subscriber signaling that it will stop receiving message } }
  • 16. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | API and Code Samples Flow Publisher - The Library is the Subscriber Confidential – Oracle Internal/Restricted/Highly Restricted 16 public class FlowSubscriber<T> implements Flow.Subscriber<T> { @Override public void onSubscribe(Subscription givenSubscription) { // It’s called from the Publisher if (activeSubscription == null) { isSubscribed = true; activeSubscription = givenSubscription; long request = fis.request(); // Check availability on the internal buffer if (request > 0) { activeSubscription.request(request); // Signal availability . . . @Override public void onNext(T item) { // Unblocking adding item to the buffer // Ingestion will execute in the library's threadpool (which is the most important feature!) fis.putRecord((byte[]) item); // Calculate remaining capability and signal long request = fis.request(); if (request > 0) { activeSubscription.request(request); } else { // Buffer is full . . . @Override public void onError(Throwable throwable) { // Provide error handling @Override public void onComplete() { // Provide completion handling
  • 17. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | API and Code Samples Flow Publisher – Using SubmissionPublisher (java.base module/java.util.concurrent pck.) Confidential – Oracle Internal/Restricted/Highly Restricted 17 // Use SubmissionPublisher provided by the JRE // Default ForkJoinPool.commonPool();, DEFAULT_BUFFER_SIZE = 256; SubmissionPublisher<byte[]> publisher = new SubmissionPublisher<>(); publisher.subscribe(fis.subscriberByteArray()); // User publisher’s built-in methods: submit, offer, status of Pubs vs Subs. publisher.submit(new byte[] { 'a', 'b' }); // Graceful shutdown publisher.close(); fis.close(); ForkJoinPool.commonPool().shutdown(); Flow Publisher – Ready for 3rd party implementations! • RxJava • Reactive4JavaFlow • Future implementations!
  • 18. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Program Agenda Challenges when Streaming Data into the Database Introducing the High Speed Streaming Library API and Code Samples Demo 1 2 3 4 Confidential – Oracle Internal/Restricted/Highly Restricted 18 POC
  • 19. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Demo & Outcome Confidential – Oracle Internal/Restricted/Highly Restricted 19 Oracle Database 19c running on 1 Exalogic X4-2 compute node*. Table: • Id • Name • Region *Exalogic X4-2 compute node - Memory: 94.6GB - CPU 12 cores, 24 threads, 2 sockets, Intel Xeon Processor X5675 3.07GHz, Collector running on 1 Exalogic X4-2 compute node*. • 4 threads for service I/O • 8 threads for library • 20s buffer limit • 4gb buffer cap JMeter (load simulator) running on 1 Exalogic X4-2 compute node*. • 10.000 concurrent threads • 2’ start up time • 0.25s between posts • 120b payload Rate: 40.000 rpc/second Avg. response time: ~ 4-5ms