Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 25-feb-2008, 03:34   #1 (permalink)
Blade_Stom ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 269
acceso a BD Transacciones

Tengo una clase BD que hereda de la clase mysqli. Solo puede existir una instancia de esta clase BD (patron singleton), por tanto tengo dos dudas respecto a esto: Creen que habria algun error si muchas personas solicitan hacer al mismo tiempo una query a dicha clase? (yo creo que no). ya que supongo que se ejecutaria primero una, luego otra.....y en caso de ser consultas cada una generaria su objeto Resultado.

Pero el problema viene con las transacciones, ya que si yo le digo a BD que autocommit sea falso para justo hacer una query.............pero justo en ese momento.... una vez que se ha puesto el autocommit en falso......se ejecuta una query PERO DE OTRO USUARIO......... tonces se liaria todo..........no?

he pensado en tener a parte una clase BD_transacciones.........que no tenga el patron singleton....osea que sea normal......y que me sirva para hacer transacciones.......es decir cada vez que alguien quiera hacer una transaccion que haga una instancia DISTINTA de BD_transacction..........asi yo creo que no se liaria nada...que tal lo veis¿
Blade_Stom esta en línea ahora   Responder Citando
Antiguo 25-feb-2008, 07:03   #2 (permalink)
drbit no se puede cailificar en este momento
 
Fecha de Ingreso: mayo-2006
Mensajes: 120
Re: acceso a BD Transacciones

No sé si estás haciendo algo más raro que no llego a entender. Pero creo que estás confundiendo las cosas. Singleton significa que sólo podés crear un objeto/instancia de la clase, pero esto no tiene nada que ver con varios usuarios porque por cada usuario que solicita tu página hay una nueva ejecución de tu script.
Entonces si vos definis un autocommit falso en una ejecución eso no afecta al resto, porque son distintas y no comparten ni la memoria ni los objetos ni nada.

Saludos.
__________________
Manual XHTML
drbit está desconectado   Responder Citando
Antiguo 25-feb-2008, 08:34   #3 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: acceso a BD Transacciones

Trasladado a Orientado a Objetos.

drbit tiene razón, las instancias son independientes usen o no singleton, inclusive las conexiones a la base de datos son independientes.

Todo el manejo de las transacciones son menejadas por la base de datos, y usan el concepto ACID (Atomicity, Consistency, Isolation, Durability (Atomicidad, Consistencia, Separacion, Durabilidad)), para que no pasen cosas como las que tu planteas.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 25-feb-2008, 10:10   #4 (permalink)
Blade_Stom ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 269
Re: acceso a BD Transacciones

Pero aber..........yo estoy usando el patron singleton en una clase llamada BD
Entonces si pepe se mete a la pagina y realiza algo sobre la BD se creara la unica instancia posible de esa clase..........y si justo antes de que se realice toda su tarea........otro usuario se mete en la web y realiza algo contra la base de datos......ya no se podra crear en el sistema del servidor otra instancia de la clase BD por la cual utilizara la que Pepe esta usando........y si pepe justo ha puesto el autocommit a false.......ps este usuario se comera eso, no??

es lo que tiene usar el patron singleton........no? que es imposible que haya dos instancias de la misma clase...........
Por tanto si un usuario ha instanciado esa clase....y ha modificado un atributo de esa clase........cuando otro usuario vaya a cojer la UNICA INSTANCIA EXISTENTE de esa clase...ps la cojera con el valor de los atributos que dejo el anterior que la uso no??


Aprovechando el post............yo nunca suelo cerrar las conexiones a la BD, tengo entendido que al acabar el script PHP se encarga de eso..........como lo veis? puedo tener algun problema haciendolo asi?

Última edición por Blade_Stom; 25-feb-2008 a las 10:24.
Blade_Stom esta en línea ahora   Responder Citando
Antiguo 25-feb-2008, 10:41   #5 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: acceso a BD Transacciones

El patrón singleton te permite tener una única instancia de una clase, pero esto es por nivel de ejecución, por eso si usuario A entra, el tendrá su instancia de la clase, y si entra usuario B, el tendrá su instancia independiente del usuario A.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 25-feb-2008, 10:42   #6 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: acceso a BD Transacciones

Así es, PHP cierra las conexiones, aunque es de buena practica tu cerrarlas, ya que no todos los lenguajes lo hacen, y si te acostumbras a este comportamiento, es probable que si mudas a otro lenguaje en un futuro tengas fugas de memoria.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 25-feb-2008, 14:53   #7 (permalink)
Blade_Stom ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 269
Re: acceso a BD Transacciones

que me recomiendas ....siempre despues de una query cerrar la conexion? es que lo ideal supongo que seria .......justo al final de la ejecucion del script cerrar la conexion........pero claro......de las conexiones se encargan los modelos y hay veces que una ejecuacion va por un lado....otras veces por otros controladores y modelos.....y es muy dificil saber en cada ejecucion cual sera la ultima query a ejecutar para justro despues cerra la conexion. Entonces seria siempre despues de hacer una query.....cerrar la conexion........pero eso no seria costoso computacionalmente? ya que si en una ejecucion tengo que hacer 5 querys por lados diferentes ......mmmmmmm......5 veces tendria que abrirla y cerrarla, no¿?
Como me recomiendas hacerlo?
Blade_Stom esta en línea ahora   Responder Citando
Antiguo 25-feb-2008, 15:00   #8 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: acceso a BD Transacciones

Lo mejor es que en tu clase de acceso a la base de datos, en el destructor cierres la conexión, así no importa cuantos Querys hagas una vez que tu objeto que se encarga de accesar a la base de datos sea borrado de la memoria, se cerrara la conexión.

No te vayas por el camino de abrir y cerrar conexiones por query, con eso harás muchísimo mas lenta tu aplicación y podrás inclusive llegar a tirar el servicio de la base de datos si tienes múltiples visitas.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 25-feb-2008, 15:25   #9 (permalink)
Blade_Stom ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 269
Re: acceso a BD Transacciones

mmm no entiendo muy bien eso de....en el destructor...........yo no suelo destruir objetos......es necesario? que quieres decir con eso? yo como comente antes....tengo una clase que hereda de mysqli y de la cual solo se puede tener una instancia por ejecucion (patron singleton).... no entiendo muy bien como me propones hacerlo..lo siento...

(por otro lado....sobre lo del destructor......es necesario para liberar memoria ir destruyendo objetos...etc...? yo no suelo destruir nada porque los objetos no son muy grandes y cuando se acabe la ejecucion tengo entendido que se liberara todo....))

Un saludo
Blade_Stom esta en línea ahora   Responder Citando
Antiguo 25-feb-2008, 15:35   #10 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: acceso a BD Transacciones

El destructor se llama automáticamente a la hora de PHP destruir los objetos (por eso el nombre de destructor)

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:43.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93