Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hibernacja mapowania relacji/przyspieszenie wstawiania partii

Strategia generowania identyfikatorów ma kluczowe znaczenie dla wstawiania partii w Hibernate. W szczególności generowanie IDENTITY zwykle nie pracy (zauważ, że AUTO zazwyczaj mapuje również na IDENTITY). Dzieje się tak, ponieważ podczas wstawiania wsadowego Hibernate ma flagę o nazwie „requiresImmediateIdAccess”, która mówi, czy wygenerowane identyfikatory są natychmiast wymagane, czy nie; jeśli tak, przetwarzanie wsadowe jest wyłączone.

Można to łatwo zauważyć w dziennikach poziomu DEBUG, gdy jest napisane „wykonywanie natychmiastowego wstawiania tożsamości” – oznacza to, że pominięto przetwarzanie wsadowe, ponieważ powiedziano mu, że wygenerowane identyfikatory są wymagane natychmiast po wstawieniu.

Strategie generowania, które zwykle działają pracy to TABLE i SEQUENCE, ponieważ Hibernate może wstępnie generować identyfikatory, umożliwiając w ten sposób wstawianie partii.

Szybkim sposobem sprawdzenia, czy wstawianie partii działa, jest aktywacja dzienników poziomu DEBUG, ponieważ BatchingBatcher wyraźnie poinformuje Cię o rozmiarze partii, którą wykonuje („Wykonywanie rozmiaru partii:” + BatchSize ).

Dodatkowo, następujące właściwości są ważne dla uzyskania wstawienia partii. Nie śmiem twierdzić, że są one wymagane, ponieważ nie jestem wystarczająco ekspertem od Hibernacji, aby to zrobić – być może jest to tylko moja szczególna konfiguracja – ale z mojego doświadczenia wynika, że ​​i tak były potrzebne:

hibernate.order_inserts = true
hibernate.order_updates = true

Te właściwości są dość słabo udokumentowane, ale uważam, że umożliwiły prawidłowe grupowanie instrukcji SQL INSERT i UPDATE do wykonywania wsadowego; Myślę, że to mogą być wielorzędowe wstawki, których szukasz. Nie strzelaj do mnie, jeśli się mylę, przypominam sobie z pamięci.

Pójdę również i założę, że ustawiłeś następującą właściwość; jeśli nie, powinno to służyć jako przypomnienie:

hibernate.jdbc.batch_size = xx

Gdzie xx to oczywiście pożądana wielkość partii.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolumna aktualizacji MySQL z innej kolumny w tej samej tabeli

  2. Jak sprawdzić, czy ciąg jest w formacie JSON, czy nie?

  3. Jak mogę sprawdzić, kiedy tabela MySQL była ostatnio aktualizowana?

  4. Próba wykonania operacji MINUS w MySQL

  5. Jak usunąć niechciane znaki wiodące z ciągu w MySQL?