2009-06-23 12 views
6

Estoy investigando situaciones en aplicaciones web orientadas a bases de datos cuando uno debe confiar en la ordenación de tablas del lado del cliente sobre la clasificación en el lado del servidor. Una situación particular que me está molestando es la paginación.Problemas con la paginación y la clasificación

Al intentar paginar una tabla grande (digamos 10000 filas), así como ordenarla por una columna en particular, ¿cuál sería el mejor enfoque para tomar?

entiendo que algunas cuestiones relacionadas con esto son:

  • i cant volver toda la mesa al lado del cliente de una sola vez
  • que no se puede ordenar un máximo de 10.000 registros con javascript
  • ordenar la tabla implicará ordenar filas en todas las páginas, no solo en la página actual.

¿Tienes más problemas para agregar a esta lista?

¿Qué enfoque llevaría a una buena combinación de interacción del lado del cliente y del lado del servidor para que la carga del servidor se reduzca al mínimo?


ADEMÁS:

bien, la clasificación en la base de datos y devolver el reqd página, una página anterior y página siguiente parece ser la mejor opción.

ahora esto:

el usuario está en la página (3 de 10) de la tabla ordenada por número de serie. Ahora el usuario hace clic en el encabezado denominado "nombre de usuario", que quiere ordenar la tabla por nombre de usuario.

Pregunta: ¿El resultado final debería ser "página (1 de 10) ordenada por nombre de usuario" o debería ser "página (3 de 10) ordenada por nombre de usuario"?

Sé que esta es una pregunta muy subjetiva, pero ¿qué recomendarías y por qué?

+0

buena pregunta. probablemente puedas decir que recientemente he tratado con este [problema. –

Respuesta

3

El lado del cliente se mantiene mejor simple: Javascript sorting/paging es solo para conjuntos de resultados muy pequeños - lo suficientemente pequeños como para que un usuario no note un golpe de rendimiento.

El lado del servidor es donde se puede optimizar la carga del servidor:

carga puede venir en forma de frecuentes solicitudes de más páginas, un gran número de filas/columnas por página, y las frecuentes peticiones para recurrir. (Ni siquiera hemos hablado sobre el filtrado)

Por lo tanto, dependiendo de sus usuarios y uso real, es posible que necesite algún tipo de almacenamiento en caché. La nota, éstas son sugerencias para un tiempo después de saber lo que están haciendo los usuarios:

  • Para las solicitudes de página frecuentes, consideran que tienen algunas peticiones Ajax precarga de los próximos (y anteriores) páginas, y luego intercambian en las filas (via Javascript) a la mesa a petición del usuario.

  • Para tamaños de página grandes, considere mantener las filas en la caché de la aplicación (memoria) "utilizada más recientemente", de modo que no se requiera que la base escuche los mismos grandes fragmentos de datos una y otra vez.

  • Para recurrir con frecuencia, un buen enfoque es mantener una tabla de caché en SQL con solo los resultados.

Y siempre, siempre, siempre indexe la base de datos adecuadamente.


respuesta adicional:

Mi respuesta muy subjetiva es la siguiente: El usuario (yo) quiere para ordenar de una página cualquiera. Déjalos (yo). No hay nada más molesto que estar donde quieres estar, y tener una aplicación te devuelve al principio de la lista.

Otra consideración son los niveles múltiples de clasificación: ¿desea implementar la clasificación por número de serie, y luego nombre de usuario? Considere lo que Microsoft Excel hace, o cualquier otra aplicación con la que sus usuarios estén familiarizados. Sus usuarios probablemente estarán bien con lo que están acostumbrados, incluyendo ser devuelto a la página 1.

+0

+1 para la consideración de múltiples niveles de clasificación :) – jrharshath

3

Las bases de datos son verdaderas bestias en la clasificación y selección de datos. Entonces, la mejor opción es que el cliente le diga al servidor: "Quiero la página X con filas Y ordenadas por Z". Luego, la base de datos hace lo suyo, y el cliente muestra el resultado. Para mejorar el rendimiento, puede realizar los resultados de su caché de cliente y, además, puede hacer que su código solicite las páginas siguiente y anterior después de que se haya obtenido la actual para que puedan mostrarse instantáneamente cuando se solicite.

0

El mejor enfoque sería hacer la clasificación y paginación en el nivel de la base de datos y devolver solo un subconjunto de los datos originales que solo se mostrarán en la pantalla. No hay javascript en este escenario.

Si, por algún motivo, no puede ordenar y buscar páginas a nivel de base de datos, debe hacerlo con un script del lado del servidor. No hay javascript en este escenario tampoco.

Y el peor enfoque sería hacer la clasificación y paginación con javascript que, por supuesto, no se recomienda en absoluto por razones obvias.

0

Haga que el db clasifique lo que se entrega en la página en particular en la pantalla. Casi siempre será más rápido, se almacenará en caché y facilitará dicha carga en el navegador.

Si lo desea, permita que el lado del cliente permita una subdivisión adicional a través de javascript, etc., si los datos son lo suficientemente detallados y podrían beneficiarse de ellos. Es posible que desee almacenar las funciones de clasificación secundaria para que se recuerden entre páginas.

Cuestiones relacionadas