Mysql
 sql >> база данни >  >> RDS >> Mysql

Затварянето на набор от резултати за поточно предаване (с помощта на mysql jdbc) отнема много време

Така че, както е публикувано в моя коментар към въпроса, официалният отговор от конектора MySQL е, че трябва да предавате поточно целия набор от резултати, за да се затвори (http://dev.mysql.com/doc/refman/5.5/en/connector-j- референтна-изпълнение-бележки.html ). Освен това не можете да изпълнявате повече заявки, докато се осъществява резултат от поточно предаване.

Като напълно отвратителен хак използвах отражение, за да сляза в RowDataDynamic (версия 5.1.24) и фалшифицира прекъснато изключение, както следва:

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

Забележете, че ще трябва да отидете надолу по всеки обект, върху който имате манипулация, за да стигнете до ResultSet. За мен използвах класа ScrollableResults на Hibernate. Това означаваше получаване на препратка към ResultSet от него (всъщност неговия супер клас), а след това RowData от там.

Това ще позволи операцията по затваряне да се осъществи без поточно предаване на останалите резултати ОБАЧЕ Получавам изключение поради несъответстващ размер на пакета, когато се опитам да върна транзакцията (която просто хващам и игнорирам). Използвайки Atomikos като пул за връзки, ще виждам предупреждения за следващите няколко връзки, когато нещата се изчистят, но всичко все още работи добре.

Ясно е, че този подход може да не работи за всички, но поне това е заобиколно решение, когато извършвате обработката чрез заявка към базата данни или писането на по-сложна логика за извличане на резултати в пакети просто няма да работи.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Синтаксис на SQL INSERT – изброен от СУБД

  2. MySQL или PHP добавя Â всеки път, когато се използва £

  3. Отчитане на промените във времевата линия с MySQL

  4. MySQL:4 Table has-many-through Join?

  5. Хибернация – уникалното ограничение на колоната се игнорира