sql >> Databáze >  >> RDS >> Mysql

Hibernate Relationship Mapping/Urychlení dávkových vložek

Strategie generování ID je kritická pro dávkové vkládání v Hibernate. Zejména generování IDENTITY obvykle nebude práce (všimněte si, že AUTO se obvykle také mapuje na IDENTITY). Důvodem je, že během dávkového vkládání Hibernate má příznak nazvaný "requiresImmediateIdAccess", který říká, zda jsou vygenerovaná ID okamžitě vyžadována nebo ne; pokud ano, dávkové zpracování je zakázáno.

Můžete to snadno zjistit v protokolech na úrovni DEBUG, když říká „provádění identity-insert okamžitě“ – to znamená, že přeskočilo dávkové zpracování, protože bylo řečeno, že vygenerovaná ID jsou vyžadována ihned po vložení.

Generační strategie, které obvykle dělají práce jsou TABLE a SEQUENCE, protože Hibernate může předem vygenerovat ID, a tím umožňuje vkládání dávky.

Rychlý způsob, jak zjistit, zda vaše dávkové vkládání funguje, je aktivovat protokoly na úrovni DEBUG, protože BatchingBatcher vám explicitně sdělí velikost dávky, kterou provádí ("Probíhá velikost dávky:" + batchSize ).

Kromě toho jsou pro dosažení dávkového vkládání důležité následující vlastnosti. Netroufám si tvrdit, že jsou vyžadovány, protože na to nejsem dostatečný odborník na Hibernate – možná je to jen moje konkrétní konfigurace – ale podle mých zkušeností byly přesto potřeba:

hibernate.order_inserts = true
hibernate.order_updates = true

Tyto vlastnosti jsou dost špatně zdokumentované, ale věřím, že umožnily, aby příkazy SQL INSERT a UPDATE byly správně seskupeny pro dávkové provádění; Myslím, že to mohou být ty víceřadé vložky, které hledáte. Nestřílejte mě, pokud se v tom mýlím, vzpomínám si z paměti.

Budu také pokračovat a předpokládám, že nastavíte následující vlastnost; pokud ne, mělo by to sloužit jako připomenutí:

hibernate.jdbc.batch_size = xx

Kde xx je vaše požadovaná velikost dávky, přirozeně.



  1. SQL Levé připojení

  2. Můžeme mít více WITH AS v jednom SQL - Oracle SQL

  3. Vložení více řádků do Oracle

  4. 11 způsobů, jak najít duplicitní řádky při ignorování primárního klíče v SQLite