Sistema con varias App y multiples bases de datos trabajando en conjunto

303 views
Skip to first unread message

wchopite

unread,
Apr 25, 2012, 4:54:57 PM4/25/12
to CakePHP en Español
Saludos comunidad. En esta oportunidad me dirijo a ustedes para saber
si es posible tener varias app funcionando con un mismo nucleo y que
cada app se conecte a una bd diferente, pero en su conjunto forman un
gran sistema y por ende deben poder comunicarse entre si?

Algo asi:

Raiz
App1
App2
App3
App4
Nucleo Cakephp

Cada App funcionaria con una BD distinta pero entre todas se deben
comunicar ya que forman un gran sistema

Alguna sugerencia, otra forma de hacerlo, alguna idea o guia...?

Agradecido de antemano me despido

Jesus Antonio Zapata Cruz

unread,
Apr 25, 2012, 4:57:30 PM4/25/12
to cakep...@googlegroups.com
Claro que se puedes y esa es una de las ventajas de cakephp.

En el archivo cakephp\app\Config existe un archivo que es database.php dentro de el puedes definir diferente base de datos.

<?php
class DATABASE_CONFIG {

public $una = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'root',
'database' => 'cakephp',
);

       public $dos = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'root',
'database' => 'cakephp',
);
}

Fijate que tienes dos diferente configuraciones de base de datos


----
Jesus Zapata
0426-8431284
SolTec RL



--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.


Wladimir Chopite

unread,
Apr 25, 2012, 5:03:51 PM4/25/12
to cakep...@googlegroups.com

Ok. Perfecto. Solo 2 preguntas que me surgen:

1) Como saben los modelos con cual BD trabajar?
2) No es posible dividir o agrupar esos subsistemas todos en una sola App pero dentro de carpetas? Algo asi como agrupar todos los controladores de un subsistema en una carpeta, los de otro subsistema en otra carpeta y asi sucecivamente? Por supuesto haciendo lo mismo para los modelos y las vistas?

Wladimir Chopite

unread,
Apr 25, 2012, 5:05:23 PM4/25/12
to cakep...@googlegroups.com

O no es posible hacerlo mediante plugins, que cada plugin represente un subsistema dentro de ese gran sistema, y que a su vez cada plugin trabaje con una bd determinada?

Claro y que todos esos plugins se comuniquen entre si.

Es posible eso, alguna idea o guia?

Gracias por tu respuesta

El abr 25, 2012 4:28 p.m., "Jesus Antonio Zapata Cruz" <chuchoc...@gmail.com> escribió:

Ricardo Mun~oz A.

unread,
Apr 25, 2012, 5:10:55 PM4/25/12
to cakep...@googlegroups.com
On Wed, Apr 25, 2012 at 5:54 PM, wchopite <wcho...@gmail.com> wrote:
> Saludos comunidad. En esta oportunidad me dirijo a ustedes para saber
> si es posible tener varias app funcionando con un mismo nucleo y que
> cada app se conecte a una bd diferente, pero en su conjunto forman un
> gran sistema y por ende deben poder comunicarse entre si?

ibamos bien hasta "que cada app se conecte a una bd diferente"... que
es eso de "en su conjunto forman un gran sistema" y "poder comunicarse
entre si"? que necesitas hacer?

tu pregunta supone una solucion, pero no describe cual es el
problema... sabiendo el problema se podrian sugerir soluciones
alternativas.

--
Ricardo Mun~oz A.
http://pobrezuko.info

Jesus Antonio Zapata Cruz

unread,
Apr 25, 2012, 5:15:08 PM4/25/12
to cakep...@googlegroups.com
class User extends AppModel {
   ...
   var $useDbConfig = 'other';
   ...
} 



----
Jesus Zapata
0426-8431284
SolTec RL

Wladimir Chopite

unread,
Apr 25, 2012, 5:28:46 PM4/25/12
to cakep...@googlegroups.com

Bien. Me estan solicitando que cada departamento tenga su propia BD. Estas deben poder gestionarse bajo un mismo gran sistema. Por eso digo que deben poder comunicarse.

Son varias BD que deben funcionar bajo un mismo sistema. Por eso decia si es posible hacerlo mediante plugins. Que cada plugin represente un subsistema con su BD, y que entre ellos se comuniquen.

No se si me explico

Wladimir Chopite

unread,
Apr 25, 2012, 5:30:41 PM4/25/12
to cakep...@googlegroups.com

Uuum ya veo Jesus. Entonces supongo que puedo usar esa misma variable desde un model de un plugin, para que funcione con la BD que yo decida, correcto?

Jesus Antonio Zapata Cruz

unread,
Apr 25, 2012, 5:30:29 PM4/25/12
to cakep...@googlegroups.com
Si seria posible hacerlo como modulos, pero entonces deberias hacer un macro plugin que maneje todas las conexiones a todas las base de datos para hacer que este plugin haga las operaciones entre base de datos.



----
Jesus Zapata
0426-8431284
SolTec RL

Jesus Antonio Zapata Cruz

unread,
Apr 25, 2012, 5:35:14 PM4/25/12
to cakep...@googlegroups.com
Si puedes cambiar desde un controlador el useDbconfig de un modelo en especifico.

Entonces este macro plugin que hablamos deberia ir cambiando de useDbconfig segun el decida.

Que base de datos usas? Mysql?


----
Jesus Zapata
0426-8431284
SolTec RL

Wladimir Chopite

unread,
Apr 25, 2012, 5:40:22 PM4/25/12
to cakep...@googlegroups.com

Si, MySQL 5.5

Pense que con indicar la variable para cambiar la BD en un modelo de un plugin era suficiente. Y que todas las conexiones a las distintas BD se hicieran desde el archivo Config.php

No es posible eso?

O tienes alguna guia de lo que me acabas de decir?

Wladimir Chopite

unread,
Apr 25, 2012, 5:44:08 PM4/25/12
to cakep...@googlegroups.com

Porque la otra cuestion que me surge es como manejaria yo posibles transacciones cuando tenga que grabar, o actualizar por ejemplo en varias tablas de varias bases de datos? Es posible usar commit y rollback de esta manera?

Tengo una enorme confusion, de hecho nunca he trabajado con plugins ni con multiples BD en una misma app. Por eso quizas mis preguntas no sean tan especificas o claras. Pido disculpas de antemano.

Pero de manera general lo que quiero es un gran sistema Modular, que cada modulo funcione con una BD y estos modulos entre si se puedan comunicar. A groso modo yo creo que asi quedan claros los requerimientos

Jesus Antonio Zapata Cruz

unread,
Apr 25, 2012, 5:55:24 PM4/25/12
to cakep...@googlegroups.com
Debes primero pensar bien que es lo que quieres para poder ayudarte mejor pero te puedo decir lo siguiente
  1. Mysql no estoy seguro si soporta transiciones, habra que revisarlo.
  2. Puedes manejar un plugin que maneje solo una base de datos.
  3. Puedes manejar un macro plugin que trabaje con las múltiples base de datos. Haga operaciones entre ellas inserte en una lo que saca de la otra.
  4. Puedes tener todas las configuraciones de base de datos en el archivo database.php de cakephp, cada modulo usara una base de datos diferente.
Ahora con esta información trata de  pensar bien como es que vas a trabajar.

----
Jesus Zapata
0426-8431284
SolTec RL

Wladimir Chopite

unread,
Apr 25, 2012, 6:01:06 PM4/25/12
to cakep...@googlegroups.com

Perfecto. Muchas gracias Jesus. Si, creo que en base a esa informacion ya puedo tomar un camino y probar si funciona. Cualquier cosa estare comentandolo.

Voy a usar plugins, y hare que trabajen con la BD que corresponda. De esa forma la aplicacion sera modular y podra ir creciendo poco a poco.

Muchas gracias!

romel javier gomez herrera

unread,
Apr 25, 2012, 6:35:51 PM4/25/12
to cakep...@googlegroups.com
ha! chopite.

Tal vez sea esto: http://book.cakephp.org/2.0/en/models/datasources.html

Cada sistema seria independiente en si, con un nueclo comun o independiente eso depende de la configuración, pero yo preferiría independiente ya que en cada nueva versión de cake salen nuevas cosas que pueden ayudar a solucionar y de esa forma no tendrías que actualizar todas las app para implementar un método nuevo.


Saludos amigo.

Wladimir Chopite

unread,
Apr 25, 2012, 6:37:30 PM4/25/12
to cakep...@googlegroups.com

Tambien habia pensado eso romel. Tener varias app todas bajo un mismo nucleo. Revisa los comentarios y dame una recomendacion si no es molestia.

Ah y gracias por el dato

Pisistrato

unread,
Apr 25, 2012, 10:42:48 PM4/25/12
to cakep...@googlegroups.com
Amigo Wladimir Chopite

Lo que de verdad no entiendo es la necesidad de que sean bases de datos diferentes si es una misma empresa y un mismo servidor, el que sea una sola bases de datos bien modelada no implica menos seguridad ni mas gastos de recursos al contrario lo que tu planteas si

mo recomendacion como la describes es que use plugin y que uses una sola base de datos con prefijos en sus tablas ejem Departamento de sistemas tabla ds_equipos, departamento de compras dc_articulo etc

para el ususario es transparente cuanta bases de datos son y para ti como administrador de base de datos 5 o 10 bases de datos de una misma aplicacion con el tiempo sera una pesadilla sin contar que tendras que crear una para el super plugin de contro que en algunos caso puede duplicar la informacion ya existente

Wladimir Chopite

unread,
Apr 25, 2012, 11:04:07 PM4/25/12
to cakep...@googlegroups.com

Estoy de acuerdo. Pero los gerentes muchas veces no escuchan y piden cosas medio absurdas. Voy a plantear lo que dices, que es como yo queria hacerlo. Gracias por tu comentario

romel javier gomez herrera

unread,
Apr 25, 2012, 11:23:31 PM4/25/12
to cakep...@googlegroups.com

En referente a:

"Bien. Me estan solicitando que cada departamento tenga su propia BD. Estas deben poder gestionarse bajo un mismo gran sistema. Por eso digo que deben poder comunicarse.

Son varias BD que deben funcionar bajo un mismo sistema. Por eso decia si es posible hacerlo mediante plugins. Que cada plugin represente un subsistema con su BD, y que entre ellos se comuniquen.

No se si me explico"

Por un lado 

http://croogo.org/ es un ejemplo de un sistema un modular, usa un plugin para administrar el acl y cada nuevo plugin hereda privilegios del mismo, lo que en teoría significa que entre ellos si se comunican. según mi experiencia la ultima vez que lo use. 

Si cada departamento tiene su propia base de dato, pero todos los usuarios se validad contra una sola base de datos, pues puedes hacer una mini prueba, donde cada plugin representa una base de datos simple en la cual intentas manipular en conjunto luego de hacer un login.     

En el pedagógico existen aplicaciones independientes la cuales usan otra base de datos única para loguear a los administradores.  



Por otro 

Puedes tratar con transacciones usando data sources  

PD: lo de usar prefijos, es una buena idea. 

También puede intentar preguntarle directamente a lorenzo. el es venezolano y uno de los desarrolladores principales de cake. O obtener ideas también de el foro en ingles https://groups.google.com/forum/?fromgroups#!forum/cake-php

Ese foro es 40 veces mas activo que el español.  

saludos chopite. 

El 25 de abril de 2012 18:07, Wladimir Chopite <wcho...@gmail.com> escribió:

Ricardo Mun~oz A.

unread,
Apr 26, 2012, 8:31:38 AM4/26/12
to cakep...@googlegroups.com
On Wed, Apr 25, 2012 at 6:28 PM, Wladimir Chopite <wcho...@gmail.com> wrote:
> Bien. Me estan solicitando que cada departamento tenga su propia BD. Estas
> deben poder gestionarse bajo un mismo gran sistema. Por eso digo que deben
> poder comunicarse.

"gestionarse bajo un mismo gran sistema" en que sentido? poder grabar
datos en diferentes tablas de diferentes BD al hacer click en "Grabar"
una sola vez? o sacar informes que contengan datos de todas las BD?
que es lo que debe hacer el "gran sistema" con las diferentes BD?

si es para grabar y consultar, yo usaria una combinacion de vistas y
triggers. si me confirmas lo que te pregunte mas arriba te puedo
comentar mas acerca de la solucion que se me ocurre...

Wladimir Chopite

unread,
Apr 26, 2012, 8:41:42 AM4/26/12
to cakep...@googlegroups.com

Si,es algo asi precisamente. Pero creo que voy a desarrollarlo mediante plugins y todo en una sola BD bien modelada.

No se que opinas? De todas formas comentame tu idea por favor.

Si me gustaria una informacion para el desarrollo de plugins con cake 2, que no sea la info del manual. Si la tienes seria buenisimo.

Gracias por tu respuesta.

Ricardo Mun~oz A.

unread,
Apr 26, 2012, 8:55:10 AM4/26/12
to cakep...@googlegroups.com
On Thu, Apr 26, 2012 at 9:41 AM, Wladimir Chopite <wcho...@gmail.com> wrote:
> Si,es algo asi precisamente. Pero creo que voy a desarrollarlo mediante
> plugins y todo en una sola BD bien modelada.
>
> No se que opinas? De todas formas comentame tu idea por favor.

BD1 -> app1
BD2 -> app2
etc.

luego tienes una

BDm -> appM, donde m/M = maestra :)

por el lado de Cake la appM al igual que todo el resto de las app no
tendrian nada de especial, serian apps totalmente independientes, tal
como lo indicaste en un principio.

pero en la BDm, y suponiendo que en todas las BD tienes las mismas
tablas, tendrias esas mismas tablas pero con triggers asociados,
entonces por ejemplo al ejecutarse un INSERT en la BDm el trigger
tambien ejecutaria un INSERT cada una del resto de las BD. para los
informes, es decir los SELECT, podrias crear vistas (CREATE VIEW ...)
con tus SELECT que segun tu traen datos desde todas las BD, en MySQL
esto se puede hacer poniendo "el nombre completo" de una tabla que es

nombre_base.nombre_tabla

lo cual quedaria como

CREATE VIEW informe_blabla SELECT blabla FROM nombre_base1.tabla1 JOIN
nombre_base2.tabla1 JOIN ...

luego informe_blabla es tratada como una tabla mas, es decir en Cake
queda asociada a un modelo.
Reply all
Reply to author
Forward
0 new messages