SlideShare a Scribd company logo
@vlad_mihalcea vladmihalcea.com
High-Performance
Hibernate
VLAD MIHALCEA
@vlad_mihalcea vladmihalcea.com
About me
vladmihalcea.com
@vlad_mihalcea vladmihalcea.com
Performance Facts
“More than half of application performance
bottlenecks originate in the database”
AppDynamics - http://www.appdynamics.com/database/
@vlad_mihalcea vladmihalcea.com
Google Ranking
“Like us, our users place a lot of value in speed –
that's why we've decided to take site speed
into account in our search rankings”
https://webmasters.googleblog.com/2010/04/using-site-speed-in-web-search-ranking.html
@vlad_mihalcea vladmihalcea.com
Performance and Revenue
“It has been reported that every 100ms of latency
costs Amazon 1% of profit”
http://radar.oreilly.com/2008/08/radar-theme-web-ops.html
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
The anatomy of a database transaction
@vlad_mihalcea vladmihalcea.com
Response Time
• connection acquisition time
• statement submit time
• statement execution time
• result set fetching time
• idle time prior to releasing database connection
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
Connection Management
Metric DB_A (ms) DB_B (ms) DB_C (ms) DB_D (ms) HikariCP (ms)
min 11.174 5.441 24.468 0.860 0.001230
max 129.400 26.110 74.634 74.313 1.014051
mean 13.829 6.477 28.910 1.590 0.003458
p99 20.432 9.944 54.952 3.022 0.010263
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
@vlad_mihalcea vladmihalcea.com
Connection Providers
@vlad_mihalcea vladmihalcea.com
DataSourceConnectionProvider
@vlad_mihalcea vladmihalcea.com
Connection Provisioning
@vlad_mihalcea vladmihalcea.com
FlexyPool
• concurrent connections
• concurrent connection requests
• connection acquisition time
• connection lease time histogram
• maximum pool size
• overflow pool size
• retries attempts
• total connection acquisition time
• Java EE
• Bitronix / Atomikos
• Apache DBCP / DBCP2
• C3P0
• BoneCP
• HikariCP
• Tomcat CP
• Vibur DBCP
https://github.com/vladmihalcea/flexy-pool
@vlad_mihalcea vladmihalcea.com
FlexyPool – Concurrent connection requests
1
28
55
82
109
136
163
190
217
244
271
298
325
352
379
406
433
460
487
514
541
568
595
622
649
676
703
730
757
784
811
838
865
892
919
946
973
1000
1027
0
2
4
6
8
10
12
Sample time (Index × 15s)
Connectionrequests
max mean p50 p95 p99
@vlad_mihalcea vladmihalcea.com
FlexyPool – Pool size growth
1
28
55
82
109
136
163
190
217
244
271
298
325
352
379
406
433
460
487
514
541
568
595
622
649
676
703
730
757
784
811
838
865
892
919
946
973
1000
1027
0
1
2
3
4
5
6
Sample time (Index × 15s)
Maxpoolsize
max mean p50 p95 p99
@vlad_mihalcea vladmihalcea.com
FlexyPool – Connection acquisition time
1
28
55
82
109
136
163
190
217
244
271
298
325
352
379
406
433
460
487
514
541
568
595
622
649
676
703
730
757
784
811
838
865
892
919
946
973
1000
1027
0
500
1000
1500
2000
2500
3000
3500
Sample time (Index × 15s)
Connectionacquisitiontime(ms)
max mean p50 p95 p99
@vlad_mihalcea vladmihalcea.com
FlexyPool – Connection lease time
1
29
57
85
113
141
169
197
225
253
281
309
337
365
393
421
449
477
505
533
561
589
617
645
673
701
729
757
785
813
841
869
897
925
953
981
1009
1037
0
5000
10000
15000
20000
25000
30000
35000
40000
Sample time (Index × 15s)
Connectionleasetime(ms)
max mean p50 p95 p99
@vlad_mihalcea vladmihalcea.com
Connection acquisition
@vlad_mihalcea vladmihalcea.com
Resource-local connection acquisition
@vlad_mihalcea vladmihalcea.com
Immediate connection acquisition issue
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void importForecasts(String dataFilePath) {
Document forecastXmlDocument = readXmlDocument( dataFilePath );
List<Forecast> forecasts = parseForecasts(forecastXmlDocument);
for(Forecast forecast : forecasts) {
entityManager.persist( forecast );
}
}
@vlad_mihalcea vladmihalcea.com
Resource-local delay connection acquisition
<property
name="hibernate.connection.provider_disables_autocommit"
value="true"
/>
• Hibernate 5.2.10 introduced resource-local delay connection
acquisition
• Requires the DataSource to disable auto-commit
@vlad_mihalcea vladmihalcea.com
Resource-local connection acquisition
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
JPA Identifier Generators
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
• IDENTITY
• SEQUENCE
• TABLE
• AUTO
@vlad_mihalcea vladmihalcea.com
IDENTITY
• In Hibernate, IDENTITY generator disables JDBC batch inserts
• MySQL 8.0 does not offer support for database SEQUENCE
• MariaDB 10.3 adds support for SEQUENCE objects
@vlad_mihalcea vladmihalcea.com
SEQUENCE
• Oracle, PostgreSQL, and even SQL Server 2012
• May use roundtrip optimizers: hi/lo, pooled, pooled-lo
• By default, Hibernate 5 uses the enhanced sequence generators
<property
name="hibernate.id.new_generator_mappings"
value="true"/>
@vlad_mihalcea vladmihalcea.com
The pooled optimizer
@Id
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "pooled"
)
@SequenceGenerator(
name = "pooled",
allocationSize = 3
)
private Long id;
@vlad_mihalcea vladmihalcea.com
The pooled optimizer
@vlad_mihalcea vladmihalcea.com
The pooled optimizer
@vlad_mihalcea vladmihalcea.com
The pooled optimizer
@vlad_mihalcea vladmihalcea.com
The pooled optimizer
@vlad_mihalcea vladmihalcea.com
The pooled optimizer
@vlad_mihalcea vladmihalcea.com
SEQUENCE - Pooled optimizer (50 rows)
1 5 10 50
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
Sequence increment size
Time(ms)
@vlad_mihalcea vladmihalcea.com
TABLE
• Uses row-level locks and a separate transaction/connection
• May use roundtrip optimizers: hi/lo, pooled, pooled-lo
• By default, Hibernate 5 uses the enhanced sequence generators
<property
name="hibernate.id.new_generator_mappings"
value="true"/>
@vlad_mihalcea vladmihalcea.com
TABLE - Pooled optimizer (50 rows)
1 5 10 50
0
0.5
1
1.5
2
2.5
3
Table increment size
Time(ms)
@vlad_mihalcea vladmihalcea.com
IDENTITY vs TABLE (100 rows)
• IDENTITY makes no use of batch inserts
• TABLE generator using a pooled optimizer with an increment size of
100
@vlad_mihalcea vladmihalcea.com
IDENTITY vs TABLE (100 rows)
1 2 4 8 16
0
500
1000
1500
2000
2500
Thread count
Time(ms)
Identity Table
@vlad_mihalcea vladmihalcea.com
AUTO: IDENTITY vs TABLE?
• Prior to Hibernate 5, AUTO would resolve to IDENTITY if the
database supports this feature
• Hibernate 5 uses TABLE generator if the database does not support
sequences
• So, pay attention when using MySQL or MariaDB (prior to 10.3)
@vlad_mihalcea vladmihalcea.com
SEQUENCE vs TABLE (100 rows)
• Both benefiting from JDBC batch inserts
• Both using a pooled optimizer with an increment size of 100
@vlad_mihalcea vladmihalcea.com
SEQUENCE vs TABLE (100 rows)
1 2 4 8 16
0
200
400
600
800
1000
1200
Thread count
Time(ms)
Sequence Table
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
Relationships
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
Batching
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
• SessionFactory setting
• Session-level configuration since Hibernate 5.2
@vlad_mihalcea vladmihalcea.com
Batching - SessionFactory
<property
name="hibernate.jdbc.batch_size"
value="5"/>
• Switching from non-batching to batching
@vlad_mihalcea vladmihalcea.com
Batching - Session
doInJPA( this::entityManagerFactory, entityManager -> {
entityManager.unwrap( Session.class )
.setJdbcBatchSize( 10 );
for ( long i = 0; i < entityCount; ++i ) {
Person = new Person( i, String.format( "Person %d", i ) );
entityManager.persist( person );
if ( i % batchSize == 0 ) {
entityManager.flush();
entityManager.clear();
}
}
} );
@vlad_mihalcea vladmihalcea.com
Batching
DEBUG [main]: n.t.d.l.SLF4JQueryLoggingListener –
Name:DATA_SOURCE_PROXY,
Time:1,
Success:True,
Type:Prepared,
Batch:True,
QuerySize:1,
BatchSize:10,
Query: ["insert into Person (name, id) values (?, ?)"],
Params:[
(Person 1, 1), (Person 2, 2), (Person 3, 3), (Person 4, 4), (Person 5, 5),
(Person 6, 6), (Person 7, 7), (Person 8, 8), (Person 9, 9), (Person 10, 10)
]
@vlad_mihalcea vladmihalcea.com
Insert PreparedStatement batching (5k rows)
1 10 20 30 40 50 60 70 80 90 100 1000
0
200
400
600
800
1000
1200
1400
1600
Batch size
Time(ms)
DB_A DB_B DB_C DB_D
@vlad_mihalcea vladmihalcea.com
Update PreparedStatement batching (5k rows)
1 10 20 30 40 50 60 70 80 90 100 1000
0
100
200
300
400
500
600
700
Batch size
Time(ms)
DB_A DB_B DB_C DB_D
@vlad_mihalcea vladmihalcea.com
Delete PreparedStatement batching (5k rows)
1 10 20 30 40 50 60 70 80 90 100 1000
0
200
400
600
800
1000
1200
Batch size
Time(ms)
DB_A DB_B DB_C DB_D
@vlad_mihalcea vladmihalcea.com
Batching - Cascading
<property
name="hibernate.order_inserts"
value="true"/>
<property
name="hibernate.order_updates"
value="true"/>
@vlad_mihalcea vladmihalcea.com
Batching – @Version
<property
name="hibernate.jdbc.batch_versioned_data"
value="true"/>
• Enabled by default in Hibernate 5
• Disabled in Hibernate 3.x, 4.x, and for Oracle 8i, 9i, and 10g
dialects
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
Fetching
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
• JDBC fetch size
• JDBC ResultSet size
• DTO vs Entity queries
• Fetching relationships
@vlad_mihalcea vladmihalcea.com
Fetching – JDBC Fetch Size
• Oracle – Default fetch size is 10
• SQL Server – Adaptive buffering
• PostgreSQL, MySQL – Fetch the whole ResultSet at once
• SessionFactory setting:
<property
name="hibernate.jdbc.fetch_size"
value="100"/>
@vlad_mihalcea vladmihalcea.com
Fetching - JDBC fetch size
• Query-level hint:
List<PostCommentSummary> summaries =
entityManager.createQuery(
"select new PostCommentSummary( " +
" p.id, p.title, c.review ) " +
"from PostComment c " +
"join c.post p")
.setHint(QueryHints.HINT_FETCH_SIZE, fetchSize)
.getResultList();
@vlad_mihalcea vladmihalcea.com
Fetching – JDBC Fetch Size (10k rows)
1 10 100 1000 10000
0
100
200
300
400
500
600
Fetch size
Time(ms)
DB_A DB_B DB_C DB_D
@vlad_mihalcea vladmihalcea.com
Fetching – Pagination
• JPA / Hibernate API works for both entity and native queries
List<PostCommentSummary> summaries =
entityManager.createQuery(
"select new PostCommentSummary( " +
" p.id, p.title, c.review ) " +
"from PostComment c " +
"join c.post p")
.setFirstResult(pageStart)
.setMaxResults(pageSize)
.getResultList();
@vlad_mihalcea vladmihalcea.com
Fetching – 100k vs 100 rows
Fetch all Fetch limit
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
Time(ms)
DB_A DB_B DB_C DB_D
@vlad_mihalcea vladmihalcea.com
Fetching – Pagination
• Hibernate uses OFFSET pagination
• Keyset pagination scales better when navigating large result sets
• http://use-the-index-luke.com/no-offset
@vlad_mihalcea vladmihalcea.com
Fetching – Entity vs Projection
• Selecting all columns vs a custom projection
SELECT *
FROM post_comment pc
INNER JOIN post p ON p.id = pc.post_id
INNER JOIN post_details pd ON p.id = pd.id
SELECT pc.version
FROM post_comment pc
INNER JOIN post p ON p.id = pc.post_id
INNER JOIN post_details pd ON p.id = pd.id
@vlad_mihalcea vladmihalcea.com
Fetching – Entity vs Projection
All columns Custom projection
0
5
10
15
20
25
30
Time(ms)
DB_A DB_B DB_C DB_D
@vlad_mihalcea vladmihalcea.com
Fetching – DTO Projections
• Read-only views
• Tree structures (Recursive CTE)
• Paginated Tables
• Analytics (Window functions)
@vlad_mihalcea vladmihalcea.com
Fetching – Entity Queries
• Writing data
• Web flows / Multi-request logical transactions
• Application-level repeatable reads
• Detached entities / PersistenceContextType.EXTENDED
• Optimistic concurrency control (e.g. version, dirty properties)
@vlad_mihalcea vladmihalcea.com
Fetching – Relationships
Association FetchType
@ManyToOne EAGER
@OneToOne EAGER
@OneToMany LAZY
@ManyToMany LAZY
• LAZY associations can be fetched eagerly
• EAGER associations cannot be fetched lazily
@vlad_mihalcea vladmihalcea.com
Fetching – Best Practices
• Default to FetchType.LAZY
• Fetch directive in JPQL/Criteria API queries
• Entity graphs / @FetchProfile
• LazyInitializationException
@vlad_mihalcea vladmihalcea.com
Fetching – Open Session in View Anti-Pattern
@vlad_mihalcea vladmihalcea.com
Fetching – Temporary Session Anti-Pattern
• “Band aid” for LazyInitializationException
• One temporary Session/Connection for every lazily fetched
association
<property
name="hibernate.enable_lazy_load_no_trans"
value="true"/>
@vlad_mihalcea vladmihalcea.com
Agenda
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching
@vlad_mihalcea vladmihalcea.com
Caching
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
@vlad_mihalcea vladmihalcea.com
Caching – Why 2nd - Level Caching
@vlad_mihalcea vladmihalcea.com
Caching – Why 2nd - Level Caching
“There are only two hard things in Computer
Science: cache invalidation and naming things.”
Phil Karlton
@vlad_mihalcea vladmihalcea.com
Caching – Strategies
Strategy Cache type Particularity
READ_ONLY READ-THROUGH Immutable
NONSTRICT_READ_WRITE READ-THROUGH Invalidation/
Inconsistency risk
READ_WRITE WRITE-THROUGH Soft Locks
TRANSACTIONAL WRITE-THROUGH JTA
@vlad_mihalcea vladmihalcea.com
Caching – Collection Cache
• It complement entity caching
• It stores only entity identifiers
• Read-Through
• Invalidation-based (Consistency over Performance)
@vlad_mihalcea vladmihalcea.com
Caching – Aggregates
@vlad_mihalcea vladmihalcea.com
Questions and Answers
𝑇 = 𝑡 𝑎𝑐𝑞 + 𝑡 𝑟𝑒𝑞 + 𝑡 𝑒𝑥𝑒𝑐 + 𝑡 𝑟𝑒𝑠 + 𝑡𝑖𝑑𝑙𝑒
• Performance and Response Time
• Connection providers
• Identifier generators
• Relationships
• Batching
• Fetching
• Caching

More Related Content

PDF
High Performance Hibernate JavaZone 2016
PDF
JPA and Hibernate Performance Tips
PDF
High-Performance JDBC Voxxed Bucharest 2016
PDF
Awesome SQL Tips and Tricks - Voxxed Days Cluj - 2019
PDF
High-Performance Hibernate Devoxx France 2016
PDF
SQL Track: Restoring databases with powershell
PDF
Scaling Hibernate with Terracotta
PDF
MySQL shell and It's utilities - Praveen GR (Mydbops Team)
High Performance Hibernate JavaZone 2016
JPA and Hibernate Performance Tips
High-Performance JDBC Voxxed Bucharest 2016
Awesome SQL Tips and Tricks - Voxxed Days Cluj - 2019
High-Performance Hibernate Devoxx France 2016
SQL Track: Restoring databases with powershell
Scaling Hibernate with Terracotta
MySQL shell and It's utilities - Praveen GR (Mydbops Team)

What's hot (20)

PDF
Groovy concurrency
PDF
MariaDB Optimizer
PDF
Building better Node.js applications on MariaDB
PDF
Query Optimization with MySQL 5.7 and MariaDB 10: Even newer tricks
PDF
What is new in PostgreSQL 14?
PDF
Introduction to Mongodb execution plan and optimizer
PDF
Connect 2016-Move Your XPages Applications to the Fast Lane
PDF
Tips and Tricks For Faster Asp.NET and MVC Applications
PDF
20151010 my sq-landjavav2a
PDF
Asynchronous web apps with the Play Framework 2.0
PDF
Mysql server query path
PDF
Parallel Query in AWS Aurora MySQL
PDF
MySQL 5.7 + JSON
PDF
Short intro to scala and the play framework
PPTX
Play + scala + reactive mongo
PDF
COScheduler
PDF
Go faster with_native_compilation Part-2
PPTX
10 performance and scalability secrets of ASP.NET websites
PDF
MySQL Performance Schema in 20 Minutes
PDF
Spring Batch in Code - simple DB to DB batch applicaiton
Groovy concurrency
MariaDB Optimizer
Building better Node.js applications on MariaDB
Query Optimization with MySQL 5.7 and MariaDB 10: Even newer tricks
What is new in PostgreSQL 14?
Introduction to Mongodb execution plan and optimizer
Connect 2016-Move Your XPages Applications to the Fast Lane
Tips and Tricks For Faster Asp.NET and MVC Applications
20151010 my sq-landjavav2a
Asynchronous web apps with the Play Framework 2.0
Mysql server query path
Parallel Query in AWS Aurora MySQL
MySQL 5.7 + JSON
Short intro to scala and the play framework
Play + scala + reactive mongo
COScheduler
Go faster with_native_compilation Part-2
10 performance and scalability secrets of ASP.NET websites
MySQL Performance Schema in 20 Minutes
Spring Batch in Code - simple DB to DB batch applicaiton
Ad

Similar to High-Performance Hibernate - JDK.io 2018 (20)

PPTX
How to ensure Presto scalability 
in multi use case
PDF
Dr Elephant: LinkedIn's Self-Service System for Detecting and Treating Hadoop...
PDF
MLflow at Company Scale
PPTX
Automating your php infrastructure with the zend server api
PPT
MySQL crash course by moshe kaplan
PDF
Square Peg Round Hole: Serverless Solutions For Non-Serverless Problems
KEY
Performance Tuning - MuraCon 2012
PDF
Into The Box 2018 - CBT
PDF
Data Analytics Service Company and Its Ruby Usage
PDF
Breaking SAP portal (DeepSec)
PDF
The value of reactive
PDF
The Value of Reactive
PDF
StackWatch: A prototype CloudWatch service for CloudStack
PDF
Advanced Cassandra
PDF
6 tips for improving ruby performance
PPTX
How and why we evolved a legacy Java web application to Scala... and we are s...
PDF
Software as a Service workshop / Unlocked: the Hybrid Cloud 12th May 2014
PDF
Bringing the JAMstack to the Enterprise
PDF
Next level data operations using Power Automate magic
PPTX
SQL Server 2022 Programmability & Performance
How to ensure Presto scalability 
in multi use case
Dr Elephant: LinkedIn's Self-Service System for Detecting and Treating Hadoop...
MLflow at Company Scale
Automating your php infrastructure with the zend server api
MySQL crash course by moshe kaplan
Square Peg Round Hole: Serverless Solutions For Non-Serverless Problems
Performance Tuning - MuraCon 2012
Into The Box 2018 - CBT
Data Analytics Service Company and Its Ruby Usage
Breaking SAP portal (DeepSec)
The value of reactive
The Value of Reactive
StackWatch: A prototype CloudWatch service for CloudStack
Advanced Cassandra
6 tips for improving ruby performance
How and why we evolved a legacy Java web application to Scala... and we are s...
Software as a Service workshop / Unlocked: the Hybrid Cloud 12th May 2014
Bringing the JAMstack to the Enterprise
Next level data operations using Power Automate magic
SQL Server 2022 Programmability & Performance
Ad

Recently uploaded (20)

PPT
Reliability_Chapter_ presentation 1221.5784
PPTX
Introduction to Firewall Analytics - Interfirewall and Transfirewall.pptx
PPTX
Introduction-to-Cloud-ComputingFinal.pptx
PDF
Introduction to the R Programming Language
PDF
Fluorescence-microscope_Botany_detailed content
PPTX
Business Ppt On Nestle.pptx huunnnhhgfvu
PPTX
DISORDERS OF THE LIVER, GALLBLADDER AND PANCREASE (1).pptx
PPTX
ALIMENTARY AND BILIARY CONDITIONS 3-1.pptx
PDF
168300704-gasification-ppt.pdfhghhhsjsjhsuxush
PPT
Miokarditis (Inflamasi pada Otot Jantung)
PPTX
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
PPTX
01_intro xxxxxxxxxxfffffffffffaaaaaaaaaaafg
PPTX
AI Strategy room jwfjksfksfjsjsjsjsjfsjfsj
PPTX
Supervised vs unsupervised machine learning algorithms
PPTX
IBA_Chapter_11_Slides_Final_Accessible.pptx
PPTX
climate analysis of Dhaka ,Banglades.pptx
PPTX
Acceptance and paychological effects of mandatory extra coach I classes.pptx
PPTX
STUDY DESIGN details- Lt Col Maksud (21).pptx
PPTX
Microsoft-Fabric-Unifying-Analytics-for-the-Modern-Enterprise Solution.pptx
Reliability_Chapter_ presentation 1221.5784
Introduction to Firewall Analytics - Interfirewall and Transfirewall.pptx
Introduction-to-Cloud-ComputingFinal.pptx
Introduction to the R Programming Language
Fluorescence-microscope_Botany_detailed content
Business Ppt On Nestle.pptx huunnnhhgfvu
DISORDERS OF THE LIVER, GALLBLADDER AND PANCREASE (1).pptx
ALIMENTARY AND BILIARY CONDITIONS 3-1.pptx
168300704-gasification-ppt.pdfhghhhsjsjhsuxush
Miokarditis (Inflamasi pada Otot Jantung)
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
01_intro xxxxxxxxxxfffffffffffaaaaaaaaaaafg
AI Strategy room jwfjksfksfjsjsjsjsjfsjfsj
Supervised vs unsupervised machine learning algorithms
IBA_Chapter_11_Slides_Final_Accessible.pptx
climate analysis of Dhaka ,Banglades.pptx
Acceptance and paychological effects of mandatory extra coach I classes.pptx
STUDY DESIGN details- Lt Col Maksud (21).pptx
Microsoft-Fabric-Unifying-Analytics-for-the-Modern-Enterprise Solution.pptx

High-Performance Hibernate - JDK.io 2018