sql >> Database >  >> RDS >> Mysql

Hibernate-relatietoewijzing/Batch-inserts versnellen

De strategie voor het genereren van ID's is van cruciaal belang voor het invoegen van batches in Hibernate. In het bijzonder zal het genereren van IDENTITEIT meestal niet werk (merk op dat AUTO doorgaans ook naar IDENTITY verwijst). Dit komt omdat tijdens batch-insert Hibernate een vlag heeft met de naam "requiresImmediateIdAccess" die aangeeft of gegenereerde ID's al dan niet onmiddellijk vereist zijn; zo ja, dan is batchverwerking uitgeschakeld.

Je kunt dit gemakkelijk zien in de logboeken op DEBUG-niveau als er staat "identiteits-insert onmiddellijk uitvoeren" - dit betekent dat het batchverwerking heeft overgeslagen omdat werd verteld dat gegenereerde ID's onmiddellijk na het invoegen vereist zijn.

Generatiestrategieën die doorgaans doen work zijn TABLE en SEQUENCE, omdat Hibernate de ID's vooraf kan genereren, waardoor batch-invoeging mogelijk wordt.

Een snelle manier om te zien of uw batch-invoeging werkt, is door logboeken op DEBUG-niveau te activeren, aangezien BatchingBatcher u expliciet de batchgrootte zal vertellen die wordt uitgevoerd ("Batchgrootte uitvoeren:" + batchSize ).

Bovendien zijn de volgende eigenschappen belangrijk voor het invoegen van batches. Ik durf niet te zeggen dat ze nodig zijn omdat ik niet genoeg een Hibernate-expert ben om dat te doen - misschien is het gewoon mijn specifieke configuratie - maar in mijn ervaring waren ze toch nodig:

hibernate.order_inserts = true
hibernate.order_updates = true

Deze eigenschappen zijn vrij slecht gedocumenteerd, maar ik geloof dat ze de SQL INSERT- en UPDATE-instructies correct hebben gegroepeerd voor batchuitvoering; Ik denk dat dit de inserts met meerdere rijen zijn die u zoekt. Schiet me niet neer als ik het mis heb, ik herinner het me uit mijn hoofd.

Ik ga ook door en neem aan dat u de volgende eigenschap instelt; zo niet, dan zou dit als herinnering moeten dienen:

hibernate.jdbc.batch_size = xx

Waarbij xx natuurlijk de gewenste batchgrootte is.



  1. Google Apps Script om spreadsheets naar mySQL te exporteren en op meerdere bestanden uit te voeren

  2. Wat is de beste manier om paginaweergaven te tellen in PHP/MySQL?

  3. Optimalisatiedrempels - Gegevens groeperen en aggregeren, deel 5

  4. Hoe zoek ik naar rijen die een subtekenreeks bevatten?