Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: digimikeh en 6 Abril 2020, 18:29 pm



Título: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: digimikeh en 6 Abril 2020, 18:29 pm
Hola!

Antes mis programas eran con bases de datos locales sqlite, donde yo al iniciar el programa volcaba toda la informacion de la base de datos en la memoria (en vectores) y luego trabajaba directamente con tales vectores en vez de estar interactuando constantemente con la base de datos, luego tenia un boton "guardar" el cual subia todos los cambios a la BD...



Ahora estoy haciendo un programa cuyo objetivo es agregar personas a una tabla del programa, la cosa es que cada registro debe quedar guardado en una tabla en la base de datos mysql en un servidor remoto.

Ej:

Jorge en España a las 16:00 hrs UTC ingresa una persona a la bd
La tabla del programa de Jorge se actualiza con su registro correctamente

Jaime en Argentina a las 16:01 ingresa otra persona a la bd..
La tabla del programa de Jaime se actualiza con su registro correctamente

Como es que Jorge y Jaime actualizan sus tablas respectivamentes para que muestren ambos registros?... en teoria se como se hace, pero no se si es ortodoxo, se me ocurre que cada vez que uno de los dos guarde un registro se rellenen las tablas de los programas directamente de la base de datos y no de un vector interno del programa como lo hacia yo con sqlite ya que la informacion local de Jaime no seria la misma que la de Jorge..

Estara bien esto?

En el fondo para expresarme mejor, lo que necesito es que la tabla del programa sea una referencia de la tabla de la base de datos todo el tiempo, cada vez que se haga una operacion (agregar, modificar o quitar). que sean como espejos..

gracias


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: engel lex en 6 Abril 2020, 18:34 pm
por lo que dices cada quien altera su tabla, no hay ninguna colision


y si multiples personas pueden manejar la DB al mismo tiempo, claro, no son "al mismo tiempo", simplemente el motor de la DB realiza una operacion y luego la otra


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: digimikeh en 6 Abril 2020, 18:38 pm
Gracias por tu respuesta..

Lo que pasa es que la tabla local y la tabla de bd deben ser espejos una de otra, ya que Jaime tambien debe ver lo que ha ingresado Jorge al instante pero en su propio programa...

Literalmente es como si la tabla local se estuviera actualizando y nivelando con la de la bd, entonces mi duda es que eso va a traer harta carga si son muchos usuarios, no hay problemas para el motor de bd ?


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: engel lex en 6 Abril 2020, 18:51 pm
Gracias por tu respuesta..

Lo que pasa es que la tabla local y la tabla de bd deben ser espejos una de otra, ya que Jaime tambien debe ver lo que ha ingresado Jorge al instante pero en su propio programa...

Literalmente es como si la tabla local se estuviera actualizando y nivelando con la de la bd, entonces mi duda es que eso va a traer harta carga si son muchos usuarios, no hay problemas para el motor de bd ?

si las 2 son espejo, entonces no hay mucho sentido de tener una tabla local a menos que realmente haya posibilidad de tener muchas operaciones offline (ya que me dices que se tiene que acceder a la tabla del otro usuario, offline solo empeora el problema), la tabla offline para rapida operacion usualmente es solo un reflejo en memoria, pero no una tabla real

cuantos llamas muchos usuarios? de cuantas operaciones por segundo hablamos?



Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: #!drvy en 6 Abril 2020, 20:59 pm
Si lo que van a introducir/almacenar esos usuarios tiene la misma estructura, no es practico ni recomendado que cada usuario tenga su "propia tabla".

Lo que haces es usar una sola tabla y asociar cada registro a un usuario en concreto o en su defecto tener una base de datos exclusiva para el usuario.

Saludos


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: ThunderCls en 6 Abril 2020, 21:49 pm
MySQL soporta un maximo de conexiones concurrentes configurable desde los 60 y tantos a los 2000 y tantos (AWS). Eso significa que podrian estar esa cantidad de usuarios, a la misma vez, manipulando la base de datos de una forma u otra. El tema de colisiones como bien te han comentado es manejado por el propio motor de la base de datos y sus protocolos de control de concurrencia (locks, TPLP, DPP, TSO, etc ), el cual garantiza que no existan  problemas con transacciones concurrentes.
Por otra parte, el mecanismo que comentas de trabajar con todos los datos en memoria no es la mejor practica cuando se trabaja con sistemas distribuidos. La base de datos existe con el objetivo de tener la informacion centralizada y que todos los clientes tengan la ultima version de los datos cada vez que lo soliciten. Luego, por cuanto tiempo manejarias la informacion en la memoria de tu aplicacion antes de enviarla a la BD?, mientras no lo haces el resto de clientes no tendrian la informacion actualizada y quizas cuando te decidas a enviarla entre en conflicto con otro commit. Por otra parte esta la seguridad de la informacion, si tu aplicacion crashea o se cierra todos los datos que manejabas en memoria se perderian. Resumiendo, esa forma de proceder viola muchisimas buenas practicas y anula en si el objetivo de una BD para empezar.
Las BD existen para consultarlas y hacerle peticiones cada vez que necesites obtener informacion, ese es su objetivo y su metodo de funcionamiento, luego ya hay tecnicas de optimizacion de consultas, db caching, etc, pero esos son otros temas. A no ser que tu servidor MySQL este alojado en una PC con escasos recursos o tu sistema vea transacciones por el orden de los miles por minuto o segundo, no creo que tengas problemas. Para el tema de mantener en "cache" por llamarlo de alguna manera, los resultados de una consulta de la base de datos, auxiliate de los controles de tu aplicacion, utiliza tablas, listas, cajas de texto y todo lo que necesites para la permanencia de los resultados de tus consultas y la interaccion del usuario con ellos.
Igual con todo lo anterior no se si he respondido a tu pregunta
Suerte



Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: digimikeh en 7 Abril 2020, 04:07 am
Vale, entonces si no entendí mal, no sería problema recargar la tabla local desde la db cada vez que ingrese/modifique/quite un registro.

Los usuarios finales seran al rededor de unos 20 promedio.
Entonces mejor me olvido del vector y almacenaje en la memoria por esta vez.


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: ThunderCls en 7 Abril 2020, 15:21 pm
Vale, entonces si no entendí mal, no sería problema recargar la tabla local desde la db cada vez que ingrese/modifique/quite un registro.

Lo que sigo sin entender es la finalidad de tener una replica local de la BD remota, en mi opinion estas añadiendo una capa extra innecesaria en el flujo de trabajo, a no ser que evidentemente, el diseño de tu software asi lo requiera para otros fines. Cual es el objetivo de esta copia en tu caso especifico? Que necesitas de la BD local que no puedas usar de la remota?


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: digimikeh en 7 Abril 2020, 15:55 pm
no tengo una bd local, es solo un widget de tabla, estoy usando Qt Creator, la tabla la uso para mostrar los datos de la bd..


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: ThunderCls en 7 Abril 2020, 16:02 pm
Ok, habia entendido mal, simplemente ignora mi ultimo mensaje  :rolleyes:


Título: Re: Se puede interactuar con una BD simultaneamente diferentes personas y a la vez?
Publicado por: digimikeh en 7 Abril 2020, 17:07 pm
De acuerdo, agradecido por la ayuda

Saludos !  ::)