SQL Server e Mongo possono essere utilizzati insieme?

13

Abbiamo un grande sito orientato alle notizie che ha un elevato traffico web. L'architettura è il tuo DB - Repo Layer - Layer dei servizi - Asp.Net MVC spesso visto. Il problema che abbiamo riscontrato riguarda le prestazioni di lettura. Si scopre che tutta questa roba sugli oggetti del dominio DDD è ottima, in teoria, per le regole aziendali, ma ha reso la vita più difficile quando si tratta di ottimizzare le prestazioni di lettura.

Come soluzione, sto considerando qualcosa di completamente nuovo (per noi): l'uso di noSQL. Mi piacerebbe utilizzare un database noSQL per i dati presentati sul nostro sito. Non possiamo sbarazzarci del nostro SQL Server (almeno non molto presto), ma mi sembra che un passo pratico sarebbe usare Mongo come database di query per tutti i nuovi sviluppi.

La mia domanda è se è possibile utilizzare SQL Server come database di record e Mongo come database di query insieme ?

Quindi, quando uno dei nostri editor aggiorna un record, i dati verranno archiviati in SQL Server. Questo è necessario, perché c'è troppo codice legacy che non può essere riscritto durante la notte.

Ma quando un visualizzatore sul sito Web visualizza un articolo o un elenco di articoli, mi piacerebbe approfittare delle prestazioni di Mongo contro SQL Server. Per mantenere i dati alquanto attuali, diciamo 15 minuti o meno, i dati di SQL Server dovrebbero aggiornare Mongo. RDBMS ha strumenti di replica per operazioni come questa e mi chiedo se esiste qualcosa per fare lo stesso da SQL Server a Mongo. Server Lync, forse?

    
posta John 19.12.2011 - 19:35
fonte

2 risposte

13

Hai incontrato un problema che molti hanno davanti a te ... un database ottimizzato per la lettura raramente è buono per l'efficienza di scrittura e viceversa. Un approccio che si è evoluto da questo impedimento in lettura / scrittura è CQRS (Command Query Responsibility Segregation). Nonostante Wikipedia colleghi i due CQRS e CQS sono tecnicamente diversi. CQS richiede solo che un metodo esegua una modifica (comando) o chieda informazioni (query) mai entrambe.

CQRS compie un ulteriore passo avanti e specifica di avere un modello separato per Query e Comandi. Questo singolo passaggio consente di separare il tuo database di lettura e scrittura. Quale è quello che vuoi fare.

Non posso dire di essere un esperto di Mongo o di configurarlo per funzionare con SQL Server. Ma dalla mia comprensione, la gente usa Mongo come vista denormalizzata del loro database transazionale. Aggiornare Mongo dal db transazionale potrebbe arrivare a eseguire un agente SQL. O avere un servizio separato per interrogare il database.

Un'alternativa ancora migliore sarebbe quella di fare in modo che il tuo servizio di comando attivi un evento ogni volta che viene effettuato un aggiornamento. Avresti quindi un servizio che ha ascoltato quell'evento e ha aggiornato il MongoDB con quelle informazioni. Questo è l'approccio fondamentale a Sourcing di eventi (cerca Sourcing di eventi nella pagina).

Greg Young, uno dei leader del pensiero nel mondo DDD sta attualmente scrivendo un libro nella Fowler Signature Series su CQRS chiamato Event-Centric (si chiamava CQRS). Fowler ha scritto un post sul suo bliki descrivendo l'approccio

    
risposta data 19.12.2011 - 20:40
fonte
1

Sì. Nel mio progetto attuale, stiamo ottenendo dati e archiviandoli in SQL Server, quindi creando indici di ricerca usando Lucene / Solr e memorizzandoli in MongoDB. Il popolamento di MongoDB viene eseguito con un caricatore personalizzato, tuttavia, nessuna replica di SQL Server o aggiornamento automatico.

    
risposta data 19.12.2011 - 20:28
fonte

Leggi altre domande sui tag