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

Zamykanie zestawu wyników przesyłania strumieniowego (przy użyciu mysql jdbc) zajmuje dużo czasu

Jak napisałem w moim komentarzu do pytania, oficjalna odpowiedź z łącznika MySQL jest taka, że ​​musisz przesyłać strumieniowo cały zestaw wyników, aby go zamknąć (http://dev.mysql.com/doc/refman/5.5/en/connector-j- reference-implementation-notes.html ). Ponadto nie możesz wykonywać więcej zapytań, gdy trwa przesyłanie strumieniowe.

Jako całkowicie obrzydliwy hack użyłem refleksji, aby przejść do RowDataDynamic (wer. 5.1.24) i sfałszuj przerwany wyjątek, na przykład:

    final Class<?> rdClass = rd.getClass();
    final Field isInterruptedField = rdClass.getDeclaredField("isInterrupted");
    isInterruptedField.setAccessible(true);  // override 'protected' visibility
    isInterruptedField.set(rd, true);

Zauważ, że będziesz musiał zejść z dowolnego obiektu, na którym masz uchwyt, aby dostać się do zestawu wyników. Dla mnie korzystałem z klasy ScrollableResults Hibernate. Oznaczało to pobranie z niego referencji do zestawu wyników (właściwie jego superklasy), a następnie do RowData.

Umożliwi to zamknięcie operacji bez przesyłania strumieniowego pozostałych wyników JEDNAK Otrzymuję wyjątek z powodu niedopasowanego rozmiaru pakietu, gdy próbuję wycofać transakcję (którą po prostu przechwytuję i ignoruję). Używając Atomikos jako puli połączeń, będę widzieć ostrzeżenia o kilku następnych połączeniach, gdy wszystko zostanie uporządkowane, ale wszystko nadal działa dobrze.

Oczywiście to podejście może nie działać dla wszystkich, ale przynajmniej jest to obejście, gdy przetwarzanie za pomocą zapytania do bazy danych lub pisanie bardziej skomplikowanej logiki w celu pobierania wyników w partiach po prostu nie zadziała.




  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 wyświetlić hierarchiczne dane NESTED SET w PHP?

  2. Suma, średnia, maksymalna, minimalna, liczba wartości NULL

  3. Jak znaleźć powtarzające się słowa komórki w SQL

  4. Przekazywanie wartości do operacji MySQL IN w przygotowanym oświadczeniu PDO?

  5. Zaktualizuj tryb SQL w MySQL