Grazie alla (relativa) semplicità nel creare applicazioni asincrone introdotta dal Service Broker, diventa piuttosto interessate provare ad utilizzare un'approcio asincrono in soluzioni dove, ad oggi, non l'avremmo mai provato.
La prima cosa che mi viene in mente è la Business Intelligence. Supponiamo di avere un sito di eCommerce piuttosto grosso e visitato; molto probabilmente avremo due database distinti, un per la gestione delle transazioni online (e quindi ordini, catalogo prodotti, anagrafica utenti, e via dicendo), ed un datawarehouse per lo contenere lo storico di tutte le transazioni e di tutti i dati.
Normalmente l'aggiornamento del datawarehouse viene fatto di notte, tramite processi batch. Questo per diversi motivi, tra cui:
- la grande quantità di dati da spostare
- la denormalizzazione degli stessi per ottimizzare query di reportistica
- l'ottimizzazione del datawarehouse verso la velocità di lettura (quindi, potenzialmente, molti e grossi indici), contrapposta all'ottimizzazione del database OLTP per un buon equilibrio tra letture e scritture (quindi pochi indici e - possibilimente - piccoli, e magari con un fillfactor relativamente basso)
che rendono impraticabile un aggiornamento del datawarehouse in tempo reale, pena un notevole ralletamente delle operazioni OLTP.
Tutto questo però se siamo in un meccanismo sincrono, come il seguente:
BEGIN TRAN
' Inserisco nel db OLTP
INSERT INTO TabellaOrdini VALUES <....>
' Inserisco nel datawarehouse
INSERT INTO TabellaStoricoOrdini VALUES <...>
...
COMMT TRAN
Dove ovviamente la transazione deve aspettare che tutti gli statement insert terminino il proprio lavoro.
Se però utilizziamo il Broker per introdurre e sfruttare un meccanismo asincrono possiamo scrivere quacosa del genere:
BEGIN TRAN
' Inserisco nel db OLTP
INSERT INTO TabellaOrdini VALUES <....>
' invio una notifica di inserimento nel datawarehouse
SEND ON CONVERSATION ..... (@message)
...
COMMT TRAN
Questo approcio permette di rendere asincroni tutti gli aggiornamenti da fare sul datawarehouse e quindi non diventano bloccanti per la transazione online; questo permette inoltre di avere il datawarehouse aggiornata in tempo "quasi-reale", in quanto il Broker è in grado si scalare automaticamente per far fronte anche a molte richieste contemporanee....ed in questo modo i nostri report potranno lavorare su dati il più possibile aggiornati.