Separacion de BD

13 views
Skip to first unread message

Max Gmail

unread,
Oct 26, 2011, 1:36:20 PM10/26/11
to Alt-Net Hispano
Hola, buen día....
 
Mi nombre es Max Rodríguez, desarrollador .NET de Colombia!!!! y es la primera vez q les escribo, de antemano les cuento que eh aprendido mucho de las cosas q en este grupo se expone mediante correos.
 
Ahora es mi turno de solicitar ayuda Confused smile, resulta que actualmente mi empresa tiene un sistema de información para salud, y acaba de iniciar un proyecto nuevo ligado a este pero no quisiera seguir afectando la BD principal y separar este nuevo sistema a una BD propia ya que el tamaño del sistema lo amerita.
 
Ahora bn mi problema es que necesito ciertas tablas maestras de la principal para hacer funcionar mi modelo, en principio pensé en vistas para obtener la información, pero en mi modelo necesito crear llaves foraneas a esas tablas algo así.
 
Paciente en Salud = Vista Paciente en Nuevo pero en Nuevo tengo una tabla solicitud que necesita una foranea a paciente, ya que una solicitud tiene un paciente, como puedo lograr esto sin duplicar estas tablas q solo se administren en la BD principal y yo en mi nueva BD consumir dicha información.
 
Muchas gracias y perdón por lo extenso en las siguiente ya no necesitare presentarme Smile with tongue out....
wlEmoticon-confusedsmile[1].png
wlEmoticon-smilewithtongueout[1].png

Leonardo Micheloni

unread,
Oct 26, 2011, 1:48:21 PM10/26/11
to altnet-...@googlegroups.com
Hola Max,
 Podés "linkear" los servidores SQL para hacer referencias entre tablas, de todos modos no me parece recomendable tener claves foráneas entre DBs diferentes.
 

 
2011/10/26 Max Gmail <inge...@gmail.com>
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.



--
Leonardo Micheloni
@leomicheloni

wlEmoticon-confusedsmile[1].png
wlEmoticon-smilewithtongueout[1].png

Mauro Decima

unread,
Oct 26, 2011, 1:50:59 PM10/26/11
to altnet-...@googlegroups.com
Que motor de  base de datos utilizas? Una opcion seria utilizar esquemas pero esto es dentro de una misma base de datos, valido para sql server 2005+
Pondria en consideracion el criterio de tamaño como unico argumento para particionar la base de datos, a menos que planees un esquema de servidores distribuidos.
 
 
Saludos dede Cordoba, Argentina
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.



--

Convertí tus archivos a pdf gratis en http://www.guardarcomopdf.com

Nicolás Marzoni

unread,
Oct 26, 2011, 1:54:18 PM10/26/11
to altnet-...@googlegroups.com
Max, en Sql Server podrías usar linked servers y sinonimos. Calculo que los demás motores tendrán algo similar.
 
 
Saludos
--
wlEmoticon-confusedsmile[1].png
wlEmoticon-smilewithtongueout[1].png

Max Gmail

unread,
Oct 26, 2011, 2:32:09 PM10/26/11
to altnet-...@googlegroups.com
Buenas...
 
Ah bueno el tema es que los motores si están en servidores distribuidos, lo que sucede es q actualmente esos servidores tienen mucha carga de trabajo y algunas veces presentan problemas de TimeOut, por esto es q me gustaria separar las bases de datos, entonces en el escenario de schemas podría evitar q mi BD afectara el timeout de la otra??? eh escuchado de schemas pero la verdad no lo conozco bien. y el tema de links entre Bases de datos me preocupa por que si se me cae la principal quedaría off la funcionalidad de la mía.
wlEmoticon-confusedsmile[1].png
wlEmoticon-smilewithtongueout[1].png

Max Gmail

unread,
Oct 26, 2011, 2:41:19 PM10/26/11
to altnet-...@googlegroups.com
uso SQL server 2008 en desarrollo y SQL 2005 en producción, no me pregunten por que ya que es una “innovación” de Infra... pero bueno ese es el esquema q tengo, ahora si los schemas me funcionan para evitar cargar y generar Timeout sobre la principal perfecto, pero  Sad smile no conosco del tema.. me pondré a investigar.
 
Sent: Wednesday, October 26, 2011 12:50 PM
Subject: Re: [altnet-hispano] Separacion de BD
 
Que motor de  base de datos utilizas? Una opcion seria utilizar esquemas pero esto es dentro de una misma base de datos, valido para sql server 2005+
Pondria en consideracion el criterio de tamaño como unico argumento para particionar la base de datos, a menos que planees un esquema de servidores distribuidos.
 
 
Saludos dede Cordoba, Argentina
El 26 de octubre de 2011 14:36, Max Gmail <inge...@gmail.com> escribió:
Hola, buen día....
 
Mi nombre es Max Rodríguez, desarrollador .NET de Colombia!!!! y es la primera vez q les escribo, de antemano les cuento que eh aprendido mucho de las cosas q en este grupo se expone mediante correos.
 
Ahora es mi turno de solicitar ayuda Confused smile, resulta que actualmente mi empresa tiene un sistema de información para salud, y acaba de iniciar un proyecto nuevo ligado a este pero no quisiera seguir afectando la BD principal y separar este nuevo sistema a una BD propia ya que el tamaño del sistema lo amerita.
 
Ahora bn mi problema es que necesito ciertas tablas maestras de la principal para hacer funcionar mi modelo, en principio pensé en vistas para obtener la información, pero en mi modelo necesito crear llaves foraneas a esas tablas algo así.
 
Paciente en Salud = Vista Paciente en Nuevo pero en Nuevo tengo una tabla solicitud que necesita una foranea a paciente, ya que una solicitud tiene un paciente, como puedo lograr esto sin duplicar estas tablas q solo se administren en la BD principal y yo en mi nueva BD consumir dicha información.
 
Muchas gracias y perdón por lo extenso en las siguiente ya no necesitare presentarme Smile with tongue out....
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a mailto:altnet-hispano%2Bunsu...@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.
wlEmoticon-sadsmile[1].png

Andres Aiello

unread,
Oct 26, 2011, 2:43:13 PM10/26/11
to AltNet-Hispano
Max,
El problema de que si se te cae el principal se te cae el segundo es
inevitable si no queres duplicar informacion.
Siguiendo entonces con los modelos que no duplican podes crear
esquemas como bien te dijeron, pero lo que va a marcar el peso en la
performance en donde ubicas la nueva data. Tanto sea si es una base de
datos nueva en el mismo sql o si es un schema en la base ya existente,
lo importante es que el file en el que guardes la nueva informacion no
se encuentre en el mismo disco que la anterior, porque si tenes
problemas de timeout en general el mayor cuello de botella en las
bases viene de la mano del disco, asi que lo terminarias forzando mas.
Saludos,

-
Lic. Andrés M. Aiello
DBA MS SQL - Oracle
http://aiellodba.blogspot.com/
@AndresAiello


On Oct 26, 3:32 pm, Max Gmail <inge.m...@gmail.com> wrote:
> Buenas...
>
> Ah bueno el tema es que los motores si están en servidores distribuidos, lo que sucede es q actualmente esos servidores tienen mucha carga de trabajo y algunas veces presentan problemas de TimeOut, por esto es q me gustaria separar las bases de datos, entonces en el escenario de schemas podría evitar q mi BD afectara el timeout de la otra??? eh escuchado de schemas pero la verdad no lo conozco bien. y el tema de links entre Bases de datos me preocupa por que si se me cae la principal quedaría off la funcionalidad de la mía.
>
> From: Nicolás Marzoni
> Sent: Wednesday, October 26, 2011 12:54 PM
> To: altnet-...@googlegroups.com
> Subject: Re: [altnet-hispano] Separacion de BD
>
> Max, en Sql Server podrías usar linked servers y sinonimos. Calculo que los demás motores tendrán algo similar.
>
> http://msdn.microsoft.com/en-us/library/ms188279.aspxhttp://msdn.microsoft.com/es-es/library/ms187552.aspx
>
> Saludos
>
> From: Max Gmail
> Sent: Wednesday, October 26, 2011 2:36 PM
> To: Alt-Net Hispano
> Subject: [altnet-hispano] Separacion de BD
>
> Hola, buen día....
>
> Mi nombre es Max Rodríguez, desarrollador .NET de Colombia!!!! y es la primera vez q les escribo, de antemano les cuento que eh aprendido mucho de las cosas q en este grupo se expone mediante correos.
>
> Ahora es mi turno de solicitar ayuda , resulta que actualmente mi empresa tiene un sistema de información para salud, y acaba de iniciar un proyecto nuevo ligado a este pero no quisiera seguir afectando la BD principal y separar este nuevo sistema a una BD propia ya que el tamaño del sistema lo amerita.
>
> Ahora bn mi problema es que necesito ciertas tablas maestras de la principal para hacer funcionar mi modelo, en principio pensé en vistas para obtener la información, pero en mi modelo necesito crear llaves foraneas a esas tablas algo así.
>
> Paciente en Salud = Vista Paciente en Nuevo pero en Nuevo tengo una tabla solicitud que necesita una foranea a paciente, ya que una solicitud tiene un paciente, como puedo lograr esto sin duplicar estas tablas q solo se administren en la BD principal y yo en mi nueva BD consumir dicha información.
>
> Muchas gracias y perdón por lo extenso en las siguiente ya no necesitare presentarme ....
> --
> Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
> Para tener acceso a más opciones, visita el grupo enhttp://groups.google.com/group/altnet-hispano?hl=es.
> --
> Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
> Para tener acceso a más opciones, visita el grupo enhttp://groups.google.com/group/altnet-hispano?hl=es.
>
>  wlEmoticon-confusedsmile[1].png
> 1KViewDownload
>
>  wlEmoticon-smilewithtongueout[1].png
> 1KViewDownload

Max Gmail

unread,
Oct 26, 2011, 2:45:21 PM10/26/11
to AltNet-Hispano
Mmmm... ok te entiendo y creo q eso es precisamente lo que busco, minimizar
los riesgos de tener que acceder a una BD tan complicada como la principal,
tu me podr�as indicar documentaci�n o donde puedo investigar mas sobre el
tema.. Much�simas gracias.

-----Original Message-----
From: Andres Aiello
Sent: Wednesday, October 26, 2011 1:43 PM
To: AltNet-Hispano
Subject: [altnet-hispano] Re: Separacion de BD

Max,
El problema de que si se te cae el principal se te cae el segundo es
inevitable si no queres duplicar informacion.
Siguiendo entonces con los modelos que no duplican podes crear
esquemas como bien te dijeron, pero lo que va a marcar el peso en la
performance en donde ubicas la nueva data. Tanto sea si es una base de
datos nueva en el mismo sql o si es un schema en la base ya existente,
lo importante es que el file en el que guardes la nueva informacion no
se encuentre en el mismo disco que la anterior, porque si tenes
problemas de timeout en general el mayor cuello de botella en las
bases viene de la mano del disco, asi que lo terminarias forzando mas.
Saludos,

-
Lic. Andr�s M. Aiello


DBA MS SQL - Oracle
http://aiellodba.blogspot.com/
@AndresAiello


On Oct 26, 3:32 pm, Max Gmail <inge.m...@gmail.com> wrote:
> Buenas...
>

> Ah bueno el tema es que los motores si est�n en servidores distribuidos,

> lo que sucede es q actualmente esos servidores tienen mucha carga de
> trabajo y algunas veces presentan problemas de TimeOut, por esto es q me
> gustaria separar las bases de datos, entonces en el escenario de schemas

> podr�a evitar q mi BD afectara el timeout de la otra??? eh escuchado de

> schemas pero la verdad no lo conozco bien. y el tema de links entre Bases

> de datos me preocupa por que si se me cae la principal quedar�a off la
> funcionalidad de la m�a.


>
> From: Nicol�s Marzoni
> Sent: Wednesday, October 26, 2011 12:54 PM
> To: altnet-...@googlegroups.com
> Subject: Re: [altnet-hispano] Separacion de BD
>

> Max, en Sql Server podr�as usar linked servers y sinonimos. Calculo que
> los dem�s motores tendr�n algo similar.


>
> http://msdn.microsoft.com/en-us/library/ms188279.aspxhttp://msdn.microsoft.com/es-es/library/ms187552.aspx
>
> Saludos
>
> From: Max Gmail
> Sent: Wednesday, October 26, 2011 2:36 PM
> To: Alt-Net Hispano
> Subject: [altnet-hispano] Separacion de BD
>

> Hola, buen d�a....
>
> Mi nombre es Max Rodr�guez, desarrollador .NET de Colombia!!!! y es la

> primera vez q les escribo, de antemano les cuento que eh aprendido mucho
> de las cosas q en este grupo se expone mediante correos.
>
> Ahora es mi turno de solicitar ayuda , resulta que actualmente mi empresa

> tiene un sistema de informaci�n para salud, y acaba de iniciar un proyecto

> nuevo ligado a este pero no quisiera seguir afectando la BD principal y

> separar este nuevo sistema a una BD propia ya que el tama�o del sistema lo

> amerita.
>
> Ahora bn mi problema es que necesito ciertas tablas maestras de la

> principal para hacer funcionar mi modelo, en principio pens� en vistas
> para obtener la informaci�n, pero en mi modelo necesito crear llaves
> foraneas a esas tablas algo as�.


>
> Paciente en Salud = Vista Paciente en Nuevo pero en Nuevo tengo una tabla
> solicitud que necesita una foranea a paciente, ya que una solicitud tiene
> un paciente, como puedo lograr esto sin duplicar estas tablas q solo se
> administren en la BD principal y yo en mi nueva BD consumir dicha

> informaci�n.
>
> Muchas gracias y perd�n por lo extenso en las siguiente ya no necesitare
> presentarme ....
> --
> Has recibido este mensaje porque est�s suscrito al grupo "AltNet-Hispano"
> de Grupos de Google.
> Para publicar una entrada en este grupo, env�a un correo electr�nico a
> altnet-...@googlegroups.com.
> Para anular tu suscripci�n a este grupo, env�a un correo electr�nico a
> altnet-hispan...@googlegroups.com
> Para tener acceso a m�s opciones, visita el grupo
> enhttp://groups.google.com/group/altnet-hispano?hl=es.
> --
> Has recibido este mensaje porque est�s suscrito al grupo "AltNet-Hispano"
> de Grupos de Google.
> Para publicar una entrada en este grupo, env�a un correo electr�nico a
> altnet-...@googlegroups.com.
> Para anular tu suscripci�n a este grupo, env�a un correo electr�nico a
> altnet-hispan...@googlegroups.com
> Para tener acceso a m�s opciones, visita el grupo

> enhttp://groups.google.com/group/altnet-hispano?hl=es.
>
> wlEmoticon-confusedsmile[1].png
> 1KViewDownload
>
> wlEmoticon-smilewithtongueout[1].png
> 1KViewDownload

--
Has recibido este mensaje porque est�s suscrito al grupo "AltNet-Hispano" de
Grupos de Google.
Para publicar una entrada en este grupo, env�a un correo electr�nico a
altnet-...@googlegroups.com.
Para anular tu suscripci�n a este grupo, env�a un correo electr�nico a
altnet-hispan...@googlegroups.com
Para tener acceso a m�s opciones, visita el grupo en
http://groups.google.com/group/altnet-hispano?hl=es.

Mauro Decima

unread,
Oct 26, 2011, 2:47:19 PM10/26/11
to altnet-...@googlegroups.com
Complejo..., Si tenes problemas de performance en el servidor A, cualquier solucion que implementes en el servidor B que consulte el servidor A va a influir en un aumento de la carga de este ultimo.
 
Otra opcion seria sincronizar la base de datos principal de A con el servidor B en una especie de mirror asyncronico, pero todo tiene un costo y hasta donde se en sql server 2008 no es posible leer la base de datos espejada en cualquier momento.

Leonardo Micheloni

unread,
Oct 26, 2011, 2:55:01 PM10/26/11
to altnet-...@googlegroups.com
Si tenés problemas de performance en A vas a necesitar ayuda de un experto para encarar temas como particionamiento, tunning, desnormalización, etc. etc.

2011/10/26 Mauro Decima <mde...@gmail.com>



--
Leonardo Micheloni
@leomicheloni

Marcos Mellibovsky

unread,
Oct 26, 2011, 3:12:36 PM10/26/11
to altnet-...@googlegroups.com
Si pasas a otro servidor tenes que tener cuidado con los querys (sobre todo joins) entre datos de ambos servidores porque el servidor A no tiene acceso a los indices del servidor B, entonces, por ejemplo, si filtrar registros de B por macheo con registros de A (JOIN) puede que se tenga que traer la tabla completa para hacer el join y sin indices.

Una opcion es replicar las tablas involucradas, sobre todo si se modifican solo en el origen

Saludos

2011/10/26 Leonardo Micheloni <leonardogabr...@gmail.com>



--

Ing. Marcos Mellibovsky
ARSoft Consultoría Informática
mel...@arsoft.com.ar
0351 155630801
msn:mellibov...@hotmail.com

Jorge Fioranelli

unread,
Oct 26, 2011, 6:42:15 PM10/26/11
to altnet-...@googlegroups.com
Hola Max,

Yo veo basicamente tres opciones (claro que hay mas, pero estas son las que yo usaria):

1.- DB sin duplicados: la nueva base de datos tendria solo los datos de los cuales tu sistema es "propietario" y el resto tendrias que obtenerlos de otro modo, por ejemplo invocando servicios expuestos por las aplicationes externas. En este escenario no podrias usar claves foraneas para los datos externos, lo cual no es tan malo tampoco, muchas aplicaciones lo hacen es pos de escalabilidad. Este modelo funciona bien cuando los datos compartidos son pocos y no son muy usados en tu aplicacion. Si los datos externos son de consulta constante y/o necesitas hacer filtros mixtos (datos internos y externos), yo descartaria esta opcion (si son solo algunos casos podes linkear las bases y usar vistas, pero trataria de evitar hacerlo si es posible).

2.- DB con duplicados: la nueva base de datos tendria todos los datos que tu aplicacion necesita, seas el propietario de los mismos o no, y tendrias que mantener algun mecanismo de sincronizacion de los datos. Con esto tu aplicacion tiene todo lo que necesita y no tiene que ir a buscar nada a otro origen de datos. Algo que esta muy de moda para sicronizar los datos son los eventos distribuidos (usando colas) para informar de los cambios y actualizar los datos cuando cambian en el origen (ej: el sistema externo envia un evento avisando del cambio y como tu aplicacion esta subscripta recibe el cambio y actualiza tu DB). Este modelo funciona bien cuando no es neceario que los datos a mostrar esten sincronizados "al instante". Suena raro, pero creeme que la mayoria de los datos no tienen porque estar actualizados "al segundo". Greg Young siempre cuenta que estaba hablando con unos usuarios que le exigian que los datos tenian que estar actualizados "a cada segundo" y cuando les pregunta que hacian con esa informacion, ellos dijeron "la imprimimos y nos reunimos para discutirla" :). Productos como NServiceBus son bastante buenos para este tipo de escenarios, usan colas de mensajes para comunicar los sistemas (tambien podes usar WCF sobre MSMQ).

3.- SOA a la Udi Dahan: este escenario es complejo de explicar pero basicamente consta en segmentar cada pantalla en partes segun el origen de los datos y hacer que todas las partes se compongan y comuniquen en el cliente. La idea es muy buena, especialmente para escalabilidad, pero tambien es un cambio de paradigma muy grande e impacta en todas las aplicaciones implicadas. Si te interesa el tema te recomiendo ver este video (ingles) http://skillsmatter.com/podcast/design-architecture/asynchronous-systems-architecture-for-the-web


Por ultimo, nada impide que utilices varias estrategias en conjunto, evaluando cada caso y definiendo cual es la que mejor se adapta a cada situacion, si hay algo que ya aprendimos hace tiempo es que no existen "balas de plata" en software.

Espero que te sirva

Un abrazo

Jorge

2011/10/27 Max Gmail <inge...@gmail.com>
--
wlEmoticon-confusedsmile[1].png
wlEmoticon-smilewithtongueout[1].png

Max Gmail

unread,
Oct 26, 2011, 6:52:36 PM10/26/11
to altnet-...@googlegroups.com
Hola Jorge,
 
De verdad muchas gracias por tu explicación, haber te cuento el sistema principal de la BD esta a mi alcance por lo que creo no requiero crear un sistema de mensajería por colas para sincronizar, sin embargo no conozco un sistema de sincronización entre BD... o bueno no sabría como hacer para que la BD me notifique que las tablas A,B y C que necesito tener sincronizadas cambiaron para realizar el proceso de migración.
 
Gracias.
 
Sent: Wednesday, October 26, 2011 5:42 PM
Subject: Re: [altnet-hispano] Separacion de BD
 
 
2011/10/27 Max Gmail <inge...@gmail.com>
Para anular tu suscripción a este grupo, envía un correo electrónico a mailto:altnet-hispano%2Bunsu...@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.
wlEmoticon-confusedsmile[1].png
wlEmoticon-smilewithtongueout[1].png

Jorge Fioranelli

unread,
Oct 26, 2011, 7:08:39 PM10/26/11
to altnet-...@googlegroups.com
La idea de usar las colas no solo es valida si la base "no esta a tu alcance", ya sea que la base este a tu alcance o no, te da dos grandes ventajas:

1.- Te desacopla de la otra base de datos, si el otro sistema esta caido, tu aplicacion sigue funcionando.
2.- Te permite accionar de la manera que prefieras ante cada mensaje. Ej: si un cliente cambia de status, en tu negocio no solo puede ser necesario actualizar el estado, sino que tambien cancelar las ordenes de compra pendientes. Simplemente tenes que armar un handler para cada tipo de mensaje y ejecutar ahi la logica que sea necesaria, desde un simple update hasta la llamada a tus objetos de dominio para ejecutar alguna logica de negocio.

Saludos
wlEmoticon-smilewithtongueout[1].png
wlEmoticon-confusedsmile[1].png

Esteban Grinberg

unread,
Oct 27, 2011, 10:30:57 AM10/27/11
to altnet-...@googlegroups.com
Yo no me complicaria demasiado la vida Max.
Podes usar algunos de los mecanismos de replicacion o mirroring que vienen con SQL Server. Son ideales para este tipo de casos.
O sino, si las tablas que tenes que sincronizar son pocas, incluso hasta un trigger te puede servir.
Eso si queres duplicar informacion.
De lo contrario, si tenes la version Enterprise, podes hacer un federation de tus servidores SQL Server, que es lo mas parecido a una arquitectura Sharding para SQL Server que hay. Basicamente consiste en tener una sola base de datos distribuida en varios servidores. Incluso las tablas, estan distribuidad en varios servidores. Esta pensado para esquemas de mucha escalabilidad, pero pueden aplicar a tu caso.
2011/10/26 Max Gmail <inge...@gmail.com>
wlEmoticon-smilewithtongueout[1].png
wlEmoticon-confusedsmile[1].png
Reply all
Reply to author
Forward
0 new messages