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

Używanie ScrollableResults Hibernate do powolnego odczytu 90 milionów rekordów

Używanie setFirstResult i setMaxResults to jedyna opcja, o której wiem.

Tradycyjnie przewijalny zestaw wyników przekazywałby wiersze do klienta tylko w razie potrzeby. Niestety, MySQL Connector/J faktycznie go fałszuje, wykonuje całe zapytanie i przesyła je do klienta, więc sterownik faktycznie ma cały zestaw wyników załadowany do pamięci RAM i przesyła go do ciebie (o czym świadczą problemy z brakiem pamięci) . Miałeś dobry pomysł, to tylko wady sterownika Java MySQL.

Nie znalazłem sposobu na obejście tego, więc poszedłem z ładowaniem dużych porcji przy użyciu zwykłych metod setFirst/max. Przykro mi, że jestem zwiastunem złych wiadomości.

Upewnij się tylko, że używasz sesji bezstanowej, aby nie było buforowania na poziomie sesji ani brudnego śledzenia itp.

EDYCJA:

Twoja UPDATE 2 jest najlepsza, jaką możesz uzyskać, chyba że wyrwiesz się z MySQL J/Connector. Chociaż nie ma powodu, dla którego nie możesz zwiększyć limitu zapytania. Zakładając, że masz wystarczająco dużo pamięci RAM do przechowywania indeksu, powinna to być dość tania operacja. Zmodyfikowałbym to nieznacznie i pobierał partię na raz i używał najwyższego identyfikatora tej partii, aby pobrać następną partię.

Uwaga:to zadziała tylko wtedy, gdy inne_warunki użyj równości (brak dozwolonych warunków zakresu) i ostatnia kolumna indeksu powinna mieć wartość id .

select * 
from person 
where id > <max_id_of_last_batch> and <other_conditions> 
order by id asc  
limit <batch_size>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać identyfikator po wstawieniu do bazy danych MySQL za pomocą Pythona?

  2. Jak korzystać z przygotowanych zestawień w CodeIgniter?

  3. Przesyłanie obrazów w CKEditor bez użycia wtyczki

  4. Czy mogę stworzyć widok z parametrem w MySQL?

  5. Połącz ciąg i liczbę w MySQL