elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  como aliviar la carga del servidor con muchos datos y requests
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como aliviar la carga del servidor con muchos datos y requests  (Leído 6,201 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
como aliviar la carga del servidor con muchos datos y requests
« en: 24 Mayo 2016, 22:18 pm »

En todo desarrollo llega la hora en la que nos preguntamos de qué manera hacer nuestra aplicación más eficiente, hacer las cosas de manera que suponga la menos carga posible para el servidor.

Actualmente estoy seleccionando y mostrando; a veces es una sola fila y otras hay un limite, pero hay un apartado en el que envio todas las filas al plugin JQuery DataTables. Bueno, todas las filas pero no todas las columnas, solo las necesarias y la verdad es que tendrían que ser muchas filas (como 1000 aunque no tengo ni idea) para que empezase a afectar no solo al cliente, si no al servidor tambien cuando hayan varios usuarios pidiendo a la vez.

Me gustaría saber si realmente vale la pena cachear los datos y donde sería mejor, si en una clase de php, en memcached (es el que estoy usando) o incluso en el propio cliente (he leido algo pero no estoy seguro de si se puede hacer).

En el caso de usar una clase php para cargar todas las filas supongo que tendría que convertir la navegación de mi web a AJAX para no tener que recargar todas las filas cada vez (osea que no serviria de nada la clase).

¿Teneis alguna idea más?

Gracias!


En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: como aliviar la carga del servidor con muchos datos y requests
« Respuesta #1 en: 4 Junio 2016, 03:19 am »

Es una locura mandar toda la tabla a DataTables. Ademas este plugin soporta ajax de forma nativa, así te evitas programar la paginación y todo eso...

https://datatables.net/manual/server-side

Ademas DataTables ya trae una clase ssp.class.php que se encarga de hacer todo el trabajo, y emplea PDO.

Si queres, mas tarde puedo pasarte un ejemplo funcional de como implementar DataTables con ajax y paginación. Ademas de una versión mejorada por mi del ssp.class.php para el idioma español.

Ahora estoy por cocinar xD


En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: como aliviar la carga del servidor con muchos datos y requests
« Respuesta #2 en: 4 Junio 2016, 06:14 am »

Las clases ya las ví pero la verdad es que prefiero usar mi propio código (me gusta que el código sea familiar).

Aunque si que le dí una oportunidad a usar server-side, que básicamente es calcular el número de resultados, el número de páginas, y coger solamente el número de elementos de la página actual. El problema de esto creo que es que el buscador solo buscaría entre los elementos de la página actual y no todos (perder esta característica es algo a tener en cuenta). Por eso decidí mandarlo todo.

Se me olvido mencionar que no era toda la tabla, si no todas las filas que pertenecen al usuario. Y la verdad dudo mucho que nadie llegue a tener 500 filas. Además, ¿cuanto puede pesar la información de una sola fila? Unos cuantos bytes? A ojo he calculado entre 70-100 bytes, son simples palabras, ¿cuantas filas así podría manejar un cliente?

Teniendo en cuenta los datos anteriores 500 filas serían apenas 50 kb.... Ahora no me lo creo ni yo, confirma si esto es cierto  :laugh:

Hay otra zona de la web en la que si tengo que limitar las filas por página, ya que se incluye una imagen y unas cuantas columnas.

Luego habría que ver cuantos usuarios hay online accediendo a la misma zona y pidiendo cada uno sus datos. Pero para este proyecto pienso contratar un dedicado, asi que no creo que vaya a tener problemas.

Entonces, ¿crees que vale la pena hacer algo como cachear o simplemente lo dejo como está?
En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: como aliviar la carga del servidor con muchos datos y requests
« Respuesta #3 en: 5 Junio 2016, 07:10 am »

Las clases ya las ví pero la verdad es que prefiero usar mi propio código (me gusta que el código sea familiar).

Solo tenes que importar la clase ssp.class.php y usar la misma. Si tenes un conocimiento medio de POO con PHP 5 es super facil.Te pongo un ejemplo de como usarla:

Código
  1. <?php
  2. header("Content-Type:application/json");
  3. //tabla mysql
  4. $table = 'empleadores';
  5.  
  6. //Clave primaria de la tabla mysql
  7. $primaryKey = 'id';
  8.  
  9. //Array con nombre de campos e indice para DataTable
  10. $columns = array(
  11.    array( 'db' => 'id',      'dt' => 0 ),
  12.    array( 'db' => 'nombre',  'dt' => 1 ),
  13.    array( 'db' => 'cuit',    'dt' => 2 ),
  14.    array( 'db' => 'dom',     'dt' => 3 ),
  15.    array( 'db' => 'loc',     'dt' => 4 ),
  16.    array( 'db' => 'act',     'dt' => 5 )
  17. );
  18.  
  19. //Datos de conexion mysql
  20. $sql_details = array(
  21.    'user' => 'root',//Usuairo de mysql
  22.    'pass' => 'mysql_password',//password mysql
  23.    'db'   => 'db_name',//nombre de base de dato mysql
  24.    'host' => 'localhost'
  25. );
  26.  
  27. require( 'ssp.class.php' );
  28.  
  29.    SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
  30. );
  31. ?>


Aunque si que le dí una oportunidad a usar server-side, que básicamente es calcular el número de resultados, el número de páginas, y coger solamente el número de elementos de la página actual. El problema de esto creo que es que el buscador solo buscaría entre los elementos de la página actual y no todos (perder esta característica es algo a tener en cuenta). Por eso decidí mandarlo todo.

Estas equivocado. DataTable hace una pèticion al servidor cada vez se modifica el input de busqueda, por lo que cada busqueda se hace en el servidor, nunca en local. Incluso si lo cambias el 'ordernar por' de las columnas.

Y lo de cachear las consultas no te lo recomiendo para nada, porque limitarias el sistema a un solo usuario.
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: como aliviar la carga del servidor con muchos datos y requests
« Respuesta #4 en: 6 Junio 2016, 01:43 am »

Hmm pero eso no es solo si tienes la opción server-side activada? He visto ejemplos en los que se le pasa un objeto con datos (normalmente json) y DT se encarga de todo en el cliente. Es lo mismo si los datos están en una tabla, se hace un select, y se envian todos los datos a DT.

Citar
Y lo de cachear las consultas no te lo recomiendo para nada, porque limitarias el sistema a un solo usuario.

No entiendo a que te refieres con eso? Como se va limitar a un solo usuario?

He estado haciendo pruebas en dos tablas distintas: una tabla normal que recibe todos los datos en la primera petición y he estado viendo el monitor de red (de las herramientas de firefox) y no veo ninguna petición extra a parte de la primera cuando filtro, cambio de pagina, ordeno columnas, etc...

Sin embargo en otra tabla tengo dos botones que actuan como filtros, estos botones si que envian una petición que lo que hacen es cambiar la consulta a la db y por lo tanto devuelve distintos datos (filtrados). Esta tabla si que hace un request cada vez que le doy a uno de los dos botones custom que tengo creados. Pero no cuando quiero ver/filtrar/ordenar los datos que ya tengo cacheados en el cliente.

La primera tabla recibe datos en json de apenas 5.6 KB (algo insignificante) y son 3 páginas de 10 resultados. Serian menos de 20KB 100 resultados. 500 resultados serian apenas 100KB. El cliente puede manejar esa insignificante cantidad de datos perfectamente y el servidor tambien debería ser capaz de servir eso a varios usuarios a la vez sin problemas.

Esta claro que depende de lo que se quiera hacer es mejor usar server-side o cliente-side para manejar datos. No soy ningún experto en este tema, pero lo que digo tiene bastante lógica, ¿no?

Por favor, explica un poco mejor por que piensas que no es buena idea hacer esto. Gracias!
« Última modificación: 6 Junio 2016, 01:47 am por gAb1 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines