Ver Mensaje Individual
  #11 (permalink)  
Antiguo 05/12/2011, 15:08
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: clases y mysqli

Si dice, Bueno más o menos ahora te te cuento.

Antes de eso lo que dije antes era refiendome entre la mysql o utilizando mysqli sobre mysql.

Cita:
If you are using MySQL versions 4.1.3 or later it is strongly recommended that you use the mysqli extension instead.

Cita:
Si se utiliza una versión de MySQL 4.1.3 o posterior, se recomienda encarecidamente utilizar la extensión mysqli en su lugar.
Creo que es lo que dices sobre la nota.
==================================================

Pero si Entre mysqli y PDO, mysqli es ligeramente más rápido.

Y parece lógico si tomamos como concepto lo siguiente:

-> PHPmanual (en alguna parte) dice que PDO ofrece una capa adicional de abstracción. Y parece lógico, pues PDO puede accesar a distintos motores de bases de datos utilizando los mismo métodos.

Si esto es cierto entonces PDO crea una interfaz o una clase abstracta.


Imagina una interfaz en la que defines todos tus métodos pero no los inicias, sabes?.

Conforme tu implementes esta interfaz deberás iniciar los métodos, pero cada método lo trabajas de la forma adecuada según el driver utilizar.


Nosotros no sabemos si PDO es una interfaz( clase 100% abstracta) o si es solo una clase abstracta, Pero la gente de PHP nos dice es abstracta y sí tiene su lógica.


Entonces cuando se hace la instancia un objeto de la clase PDO trabajará según el atributo "driver" que pasemos como parámetro.

en el caso de pasar mysql:host=servername;dbname=algo

Estamos indicando que el driver a utilizar es para trabajar con mysql.

También sabemos que si se hace la instancia con el driver de mysql , sin especificar la versión, seguramente por defecto trabajará con una versión superior a MySQL4.1.3


Por esta razón nos podemos dar cuenta que PDO realiza por lo menos 1 tarea extra.

También sabemos que todas estas tareas se traducen un árbol de procesos y en cuanto más grande sea este árbol más tiempo llevara obtener una respuesta o finalizar las tareas.


Imagina la siguiente cuestión:

mysqli -> es más directo que PDO (por decirlo de una forma simple), ya que mysqli al hacer la instancia sabe por defecto que se trabajara sobre MySql y no hay más, lo que implica que no será necesario comprobar la existencia del driver además de que no es necesario implementar una interfaz o extender de una clase abstracta algo que en PDO es imprescindible. (Esto nos ahorra 1 tarea.)

========> Para comprobar que todo esto es cierto yo hice un experimento.

Lo cierto es que no te puedo pasar un link que diga esta analogía, no se si exista. Todo lo anterior lo se aplicando un poco de lógica pero la lógica no es verdadera hasta que no se comprueba con un experimento:


No se si te comenté a tí pero hace pocas semanas hice un proyecto donde me vi en la necesidad de insertar, consultar y actualizar poquito menos de 20 millones de registros guardados en MYSQL.

Como sabía que me enfrentaba a un bicho enorme investigue cual era la mejor opción para hacer los querys; entre PDO y MySQLi

Entonces hice lo siguiente:

* Una resta de microtimes colocados al inicio del script y al final, para obtener el tiempo que tarda el script en finalizar
* 1,000,000 querys con PDO y con MySQLi (SELECT),(INSERT),(UPDATE)

(SELECT)
PDO tardó menos de 2 segundos más que MySQLI
(INSERT)
PDO tardó aprox 7 segundos más que mysqli
(UPDATE)
PDO targó 22 segundos mas que mysqli.

En todos los casos PDO tardó un poco más de tiempo.

También hay que considerar que tipo y tamaño de dato juega en el query, en mi caso fue una string de 255 bits.

Como vez, para 1,000,000 querys la diferencia entre ambos sigue siendo despreciable. Pero para 1,000,000,000 la diferencia de los tiempos de respuesta serán más significativos.


Espero sirva la info :D Un saludo amigo.
Que tengas buen comienzo de semana.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.