ebook img

High-Performance Java Persistence PDF

245 Pages·2016·15.593 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview High-Performance Java Persistence

High-Performance Java Persistence Get the most out of your persistence layer Vlad Mihalcea © 2015 - 2016 Vlad Mihalcea Tweet This Book! Please help Vlad Mihalcea by spreading the word about this book on Twitter! Tomywifeandkids Contents I Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1. Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1 Thedatabaseserverandtheconnectivitylayer . . . . . . . . . . . . . . . . . . . . 3 1.2 Theapplicationdataaccesslayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 TheORMframework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.2 Thenativequerybuilderframework . . . . . . . . . . . . . . . . . . . . . . 4 2. PerformanceandScaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1 Responsetimeandthroughput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Databaseconnectionsboundaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 Scalingupandscalingout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1 Master-Slavereplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.2 Multi-Masterreplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.3 Sharding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 II JDBC and Database Essentials . . . . . . . . . . . . . . . . . 14 3. JDBCConnectionManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1 DriverManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 DataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.1 Whyispoolingsomuchfaster? . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.3 Queuingtheorycapacityplanning . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.4 Practicaldatabaseconnectionprovisioning . . . . . . . . . . . . . . . . . . . . . . 26 3.4.1 Areal-lifeconnectionpoolmonitoringexample . . . . . . . . . . . . . . . . 27 3.4.1.1 Concurrentconnectionrequestcountmetric . . . . . . . . . . . . . . 28 3.4.1.2 Concurrentconnectioncountmetric . . . . . . . . . . . . . . . . . . . 29 3.4.1.3 Maximumpoolsizemetric . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4.1.4 Connectionacquisitiontimemetric . . . . . . . . . . . . . . . . . . . 30 3.4.1.5 Retryattemptsmetric . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.1.6 Overallconnectionacquisitiontimemetric . . . . . . . . . . . . . . . 31 3.4.1.7 Connectionleasetimemetric . . . . . . . . . . . . . . . . . . . . . . . 32 4. BatchUpdates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 CONTENTS 4.1 BatchingStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.2 BatchingPreparedStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.2.1 Choosingtherightbatchsize . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.2 Bulkoperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.3 Retrievingauto-generatedkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3.1 Sequencestotherescue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5. StatementCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.1 Statementlifecycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.1.1 Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.1.2 Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.1.2.1 Executionplanvisualization . . . . . . . . . . . . . . . . . . . . . . . 47 5.1.3 Executor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.2 Cachingperformancegain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.3 Server-sidestatementcaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.3.1 Bind-sensitiveexecutionplans . . . . . . . . . . . . . . . . . . . . . . . . . 52 5.4 Client-sidestatementcaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6. ResultSetFetching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.1 ResultSetscrollability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.2 ResultSetchangeability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 6.3 ResultSetholdability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6.4 Fetchingsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6.5 ResultSetsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.5.1 Toomanyrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.5.1.1 SQLlimitclause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 6.5.1.2 JDBCmaxrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 6.5.1.3 Lessismore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.5.2 Toomanycolumns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7. Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.1 Atomicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.2 Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.3 Isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.3.1 Concurrencycontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.3.1.1 Two-phaselocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 7.3.1.2 Multi-VersionConcurrencyControl . . . . . . . . . . . . . . . . . . . 82 7.3.2 Phenomena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 7.3.2.1 Dirtywrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 7.3.2.2 Dirtyread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.3.2.3 Non-repeatableread . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.3.2.4 Phantomread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.3.2.5 Readskew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 CONTENTS 7.3.2.6 Writeskew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.3.2.7 Lostupdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 7.3.3 Isolationlevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.3.3.1 ReadUncommitted . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 7.3.3.2 ReadCommitted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.3.3.3 RepeatableRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.3.3.4 Serializable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.4 Durability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.5 Read-onlytransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 7.5.1 Read-onlytransactionrouting . . . . . . . . . . . . . . . . . . . . . . . . . . 104 7.6 Transactionboundaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.6.1 Distributedtransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.6.1.1 Two-phasecommit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.6.2 Declarativetransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 7.7 Application-leveltransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 7.7.1 Pessimisticandoptimisticlocking . . . . . . . . . . . . . . . . . . . . . . . . 114 7.7.1.1 Pessimisticlocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.7.1.2 Optimisticlocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 III JPA and Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 8. WhyJPAandHibernatematter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 8.1 Theimpedancemismatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.2 JPAvsHibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 8.3 Schemaownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 8.4 Write-basedoptimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 8.5 Read-basedoptimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 8.6 Wrap-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 9. ConnectionManagementandMonitoring . . . . . . . . . . . . . . . . . . . . . . . . . 133 9.1 JPAconnectionmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 9.2 Hibernateconnectionproviders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 9.2.1 DriverManagerConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . 135 9.2.2 C3P0ConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 9.2.3 HikariConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 9.2.4 DatasourceConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . . . 137 9.2.5 Connectionreleasemodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 9.3 Monitoringconnections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 9.3.1 Hibernatestatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 9.3.1.1 Customizingstatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 9.4 Statementlogging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 9.4.1 Statementformatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 CONTENTS 9.4.2 Statement-levelcomments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 9.4.3 Loggingparameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 9.4.3.1 DataSource-proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 9.4.3.2 P6Spy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 10. MappingTypesandIdentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 10.1.1 Primitivetypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 10.1.2 Stringtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 10.1.3 DateandTimetypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 10.1.4 Numerictypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 10.1.5 Binarytypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 10.1.6 UUIDtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 10.1.7 Othertypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 10.1.8 Customtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 10.2 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 10.2.1 UUIDidentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 10.2.1.1 Theassignedgenerator . . . . . . . . . . . . . . . . . . . . . . . . . . 166 10.2.2 ThelegacyUUIDgenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 10.2.2.1 ThenewerUUIDgenerator . . . . . . . . . . . . . . . . . . . . . . . . 167 10.2.3 Numericalidentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.2.3.1 Identitygenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.2.3.2 Sequencegenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 10.2.3.3 Tablegenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 10.2.3.4 Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 10.2.3.4.1 Thehi/loalgorithm . . . . . . . . . . . . . . . . . . . . . . . 174 10.2.3.4.2 Thedefaultsequenceidentifiergenerator . . . . . . . . . . . 176 10.2.3.4.3 Thedefaulttableidentifiergenerator . . . . . . . . . . . . . . 177 10.2.3.4.4 Thepooledoptimizer . . . . . . . . . . . . . . . . . . . . . . 178 10.2.3.4.5 Thepooled-looptimizer . . . . . . . . . . . . . . . . . . . . . 180 10.2.3.5 Optimizergain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 10.2.3.5.1 Sequencegeneratorperformancegain . . . . . . . . . . . . . 181 10.2.3.5.2 Tablegeneratorperformancegain . . . . . . . . . . . . . . . 182 10.2.3.6 Identifiergeneratorperformance . . . . . . . . . . . . . . . . . . . . . 182 11. Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 11.1 Relationshiptypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 11.2 @ManyToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 11.3 @OneToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 11.3.1 Bidirectional@OneToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 11.3.2 Unidirectional@OneToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 11.3.3 Orderedunidirectional@OneToMany . . . . . . . . . . . . . . . . . . . . . . . 195 11.3.3.1 @ElementCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 CONTENTS 11.3.4 @OneToManywith@JoinColumn . . . . . . . . . . . . . . . . . . . . . . . . . 199 11.4 @OneToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 11.4.1 Unidirectional@OneToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 11.4.2 Bidirectional@OneToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 11.5 @ManyToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 11.5.1 Unidirectional@ManyToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 11.5.2 Bidirectional@ManyToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 11.5.3 The@OneToManyalternative . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 12. Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.1 Singletable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 12.2 Jointable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 12.3 Table-per-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 12.4 Mappedsuperclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 CONTENTS i Publisher: VladMihalcea Jupiter9/27 900492Cluj-Napoca Romania [email protected] Copyright©2015VladMihalcea All rights reserved. No part of this publication may be reproduced, stored, or transmitted in any form or by any means — electronic, mechanical, photocopying, recording, or otherwise — without thepriorconsentofthepublisher. Manyofthenamesusedbymanufacturersandsellerstodistinguishtheirproductsaretrademarked. Whereversuchdesignationsappearinthisbook,andwewereawareofatrademarkclaim,thenames havebeenprintedinallcapsorinitialcaps. While every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors and omissions, or for any damage resulting from the use of the information contained herein. The book solely reflects the author’s views. This book was not financially supported by any relational database system vendors mentioned in this work and no databasevendorhasverifiedthecontent. Coverdesign: [email protected] Coverphoto: CarlosZGZ¹-CC01.0² ¹https://www.flickr.com/photos/carloszgz/19980799311/ ²https://creativecommons.org/publicdomain/zero/1.0/

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.