Pagination using JDBC and JSP
http://www.javaranch.com/journal/2008/08/pagination-using-JDBC-and-JSP.html
The VM prints "OutOfMemoryError" and exits. Increasing max heap size
doesn't help. What's going on?
http://java.sun.com/docs/hotspot/HotSpotFAQ.html#gc_oom
17.1.2 Oracle JDBC Implementation Overview for Result Set Enhancements
http://download-east.oracle.com/docs/cd/B14117_01/java.101/b10979/resltset.htm#sthref1523
2009/4/28 William Diaz Pabón <wid...@gmail.com>:
creo que sería interesante que plantees un caso puntual
2009/4/29 QuiQue <quiqu...@gmail.com>:
Que tal Quique, por lo que estoy entendiendo de tu caso, me parece que el problema pasa por otro lado y no por java. Si vos haces un SELECT * FROM XXX que te devuelve muchísimos registros y la red se te colapsa entonces el problema es de red, porque es el mismo caso que si copias un archivo grande y lo pasas por red.
Caso de red:
1) Suponete que haces un SELECT que te devuelve 10GB de información y la red se cuelga.
2) Entonces si copias un archivo de 10GB de información la red también se te va a colgar dado que para el la red no hay diferencia, son todos Bytes.
3) Por lo tanto el problema ya se escapa de la base de datos, lenguaje, sistema particular que hayas desarrollado.
Solución) Quizás tendrías que pensar en algo conocido como QoS (Quality of Service) para asegurar una velocidad de transmisión mínima para todos lo que usen dicha red.
Caso del HEAP:
1) Hace algunos años había estado viendo el tema de los servicios de NT y los drivers de base de datos en otro trabajo que tuve, y si el driver esta bien hecho no tendrías por qué tener problemas. Por lo general los drivers tienen la suficiente inteligencia como para hacer que las cosas funcionen bien (Hacen los fetch cuando corresponde y te paginan la consulta sin que vos se lo pidas).
2) Además la conexión a la base la resuelve el driver, no el lenguaje por lo que quizás el tema venga por ese lado.
Caso de que Java es una mierda:
Hay cosas que podrían estar mejor pero como no hay otro que esté tan extendido en tantas plataformas con similares características que java, entonces no se puede hacer una comparación justa.
-----Mensaje original-----
De: QuiQue [mailto:quiqu...@gmail.com]
Enviado el: miércoles, 29 de abril
de 2009 12:44
Para: jav...@googlegroups.com
Asunto: [JavaSOS] Re: Consulta de
mas de 50 mil registros
NOTA DE RESPONSABILIDAD: El contenido del presente mensaje es privado, estrictamente confidencial y exclusivo para su destinatario. Este mensaje puede contener información protegida por normas legales y/o de secreto profesional y es sólo para su destinatario. El emisor no asume responsabilidad ni obligación legal alguna por cualquier información incorrecta o alterada contenida en este mensaje. Si usted no es el destinatario de este mensaje, por favor elimínelo, no lo copie ni lo haga conocer a terceros e informe al emisor. Muchas gracias.
Solo como comentario, en SQL podes usar TOP xxxx para limitarla, por ejemplo: SELECT TOP 100 ............
-----Mensaje original-----
De: Claudio Fernandez
[mailto:clau...@gmail.com]
Enviado el: miércoles, 29 de abril
de 2009 13:22
Para: jav...@googlegroups.com
Asunto: [JavaSOS] Re: Consulta de
mas de 50 mil registros
1. respecto a limitar lso resultados por java sigo sin saber como hacerlo. lo de limitarlas mediante la query es lo que ya os he dicho que al final hice (limit mysql, rownum oracle, y una subconsulta en sqlserver, ya que mi app era multiplataforma)
Depende. Si usas JDBC de forma directa, entonces los limitas como te permita el
SQL que soparta tu motor limitarlo. No hay un estandar de esto y ningun fwk que
se limite solo a tirar consultas como JDBC te va a dar mucho soporte ahi. En
Oracle tendras que usar la subquery con rownum, en Limit el top, en SLQ Server
2000 suicidarte, etc...
Ahora! Siempre podes construir una capa de abstracción sobre eso, y crear algo
que se encargue de disparar consultas abstrayendote de como setea la
paginación. Deben de haber varias librerías o fwks por ahí que ya se encarguen
(de hecho, hibernate lo hace, pero usar hibernate solo para eso es un
despropocito).
Las herramientas estan disponibles, y las limitaciones tecnicas no son muy
superiores a las de otros ambientes (incluso aquellos de memoria no manejada
como C). Vas a tener siempre el mismo problema! Pero eso no te quita poder
construir/propiciarte algo que te abstraiga de lidiar con eso. La falencia no
es java, sino tu diseño en este caso.
2. Una lista desborda? QUE?
public static void main(String[] args) {
long startTime = System.nanoTime();
List<Integer> lista = new
LinkedList<Integer>();
for (int i = 0; i < 10000000 ; i++) {
lista.add(i);
}
System.out.println("Took: " +
(System.nanoTime() - startTime / 100000.0) + " ms");
System.out.println("Size: " +
lista.size());
}
Mirá:
Took: 1.7806198243922128E14 ms
Size: 10000000
... con ArrayList instead:
Took: 1.7813854148980412E14 ms
Size: 10000000
... sin siquiera aumentar el heap a nada. Estas seguro de lo que decis???
Ahora, si son un millon de fotos de Pamela Anderson en bolas de alta
definición, ahí ya no se.
2009/4/29 QuiQue <quiqu...@gmail.com>
respecto a limitar lso resultados por java sigo sin saber como hacerlo. lo de limitarlas mediante la query es lo que ya os he dicho que al final hice (limit mysql, rownum oracle, y una subconsulta en sqlserver, ya que mi app era multiplataforma)
--
Oscar E. Berganza Cardona
Hay un método de paginación, muy sencillo para Oracle, te arrojara los datos como le pongas, solo tendrías que hacer la tabla que te vaya paginando.
Este es el select del cual te hablo:
select *
from ( select a.*, rownum rnum
from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
where rownum <= MAX_ROWS )
where rnum >= MIN_ROWS |
|
A: jav...@googlegroups.com |
|
|
Core J2EE Patterns - Value List Handler
http://java.sun.com/blueprints/corej2eepatterns/Patterns/ValueListHandler.html
http://java.sun.com/blueprints/patterns/ValueListHandler.html
Pagination using JDBC and JSP
http://www.javaranch.com/journal/2008/08/pagination-using-JDBC-and-JSP.html
The VM prints "OutOfMemoryError" and exits. Increasing max heap size
doesn't help. What's going on?
http://java.sun.com/docs/hotspot/HotSpotFAQ.html#gc_oom
17.1.2 Oracle JDBC Implementation Overview for Result Set Enhancements
http://download-east.oracle.com/docs/cd/B14117_01/java.101/b10979/resltset.htm#sthref1523
2009/4/28 William Diaz Pabón <wid...@gmail.com>:
> Buenas tardes.
>
> Necesito hacer una consulta pero me da el siguiente error: Caused by:
> java.lang.OutOfMemoryError: Java heap space
>
> Se le acaba la memoria de la maquina virtual de java porque la consulta
> deberia retornar 50349 registros.
>
> Como hago para ejecutar la consulta pero de 100 en 100 registros para no
> colgar a la maquina virtual?
>
> Yo uso jdk 1.5.14, Spring 1.3.8 + Oracle