¿Se pueden usar SQL Server y Mongo juntos?

13

Tenemos un gran sitio orientado a las noticias que tiene un alto tráfico web. La arquitectura es la base de datos que se ve a menudo: Capa de repo - Capa de servicios - Asp.Net MVC. El problema que hemos estado viendo está relacionado con el rendimiento de lectura. Resulta que todo este objeto de dominio DDD es genial, en teoría, para las reglas de negocios, pero ha hecho la vida más difícil cuando se trata de optimizar el rendimiento de lectura.

Como solución, estoy considerando algo completamente nuevo (para nosotros): usar noSQL. Me gustaría usar una base de datos noSQL para los datos que se presentan en nuestro sitio web. No podemos deshacernos de nuestro SQL Server (al menos no en el corto plazo), pero me parece que un paso práctico sería usar Mongo como una base de datos de consultas para todos los nuevos desarrollos.

Mi pregunta es si es posible usar SQL Server como su base de datos de registro y Mongo como su base de datos de consulta juntos ?

Entonces, cuando uno de nuestros editores actualiza un registro, los datos se almacenarán en SQL Server. Esto es necesario, porque hay demasiado código heredado que no se puede volver a escribir de la noche a la mañana.

Pero cuando un espectador en el sitio web ve un artículo o una lista de artículos, me gustaría aprovechar el rendimiento de Mongo frente a SQL Server. Para mantener los datos algo actuales, digamos que 15 minutos de antigüedad o menos, los datos de SQL Server necesitarían actualizar Mongo. RDBMS tiene herramientas de replicación para operaciones como esta y me pregunto si existe algo para hacer lo mismo desde SQL Server a Mongo. Servidor Lync, tal vez?

    
pregunta John 19.12.2011 - 19:35

2 respuestas

13

Se ha encontrado con un problema que muchos tienen antes que usted ... una base de datos optimizada para la lectura rara vez es buena para la eficiencia de escritura y viceversa. Un enfoque que ha evolucionado a partir de este impedimento de lectura-escritura es CQRS (Segregación de responsabilidad de consulta de comando). A pesar de que Wikipedia une los dos, CQRS y CQS son técnicamente diferentes. CQS solo exige que un método realice un cambio (comando) o solicite información (consulta) nunca a ambos.

CQRS lo lleva un paso más allá y especifica que tiene un modelo separado para Consultas y Comandos. Este solo paso permite cosas como separar su base de datos de lectura y escritura. Que es lo que quieres hacer.

No puedo decir que soy un experto en Mongo o que lo estoy configurando para que funcione con SQL Server. Pero a mi entender, la gente usa Mongo como una vista desnormalizada de su base de datos transaccional. La actualización de Mongo desde la base de datos transaccional puede reducirse a la ejecución de un Agente SQL. O tener un servicio separado para sondear la base de datos.

Una alternativa aún mejor sería que su servicio de Comando dispare un evento cada vez que se realice una actualización. Luego tendría un servicio que escuchó ese evento y actualizó el MongoDB con esa información. Ese es el enfoque fundamental para Sourcing de eventos (busque Sourcing de eventos en la página).

Greg Young, uno de los líderes de opinión en el mundo de DDD actualmente está escribiendo un libro en la serie Fowler Signature en CQRS llamado Event-Centric (antes se llamaba CQRS). Fowler ha escrito una publicación en su bliki que describe el enfoque

    
respondido por el Michael Brown 19.12.2011 - 20:40
1

Sí. En mi proyecto actual, obtenemos datos y los almacenamos en SQL Server, y luego creamos índices de búsqueda con Lucene / Solr y los almacenamos en MongoDB. Sin embargo, el llenado de MongoDB se realiza con un cargador personalizado, sin replicación de SQL Server ni actualización automática.

    
respondido por el TMN 19.12.2011 - 20:28

Lea otras preguntas en las etiquetas