Oracle
 sql >> Database >  >> RDS >> Oracle

Schema dell'osservatore in Oracle

L'implementazione di un modello Observer da un database dovrebbe essere generalmente evitata.

Come mai? Si basa sulla tecnologia proprietaria del fornitore (non standard), promuove il blocco del fornitore di database e supporta il rischio e provoca un po' di rigonfiamento. Dal punto di vista aziendale, se non eseguito in modo controllato, può sembrare "skunkworks" - implementando in modo insolito comportamenti comunemente coperti da modelli e strumenti di applicazione e integrazione. Se implementato a livello di grana fine, può comportare un accoppiamento stretto a minuscole modifiche dei dati con un'enorme quantità di comunicazioni ed elaborazioni impreviste, con ripercussioni sulle prestazioni. Un ingranaggio in più nella macchina può essere un ulteriore punto di rottura:potrebbe essere sensibile al sistema operativo, alla rete e alla configurazione di sicurezza o potrebbero esserci vulnerabilità di sicurezza nella tecnologia del fornitore.

Se stai osservando i dati transazionali gestiti dalla tua app:

  • implementa il modello Observer nella tua app. Per esempio. In Java, le specifiche CDI e javabeans lo supportano direttamente e il design personalizzato OO secondo il libro Gang Of Four è una soluzione perfetta.
  • facoltativamente invia messaggi ad altre app. Filtri/intercettori, messaggi MDB, eventi CDI e servizi web sono utili anche per la notifica.

Se gli utenti stanno modificando direttamente i dati anagrafici all'interno del database, allora:

  • fornire una singola pagina di amministrazione all'interno della tua app per controllare l'aggiornamento dei dati principali OPPURE
  • fornire un'app di gestione dei dati master separata e inviare messaggi alle app dipendenti OPPURE
  • (approccio migliore) gestire le modifiche ai dati master in termini di qualità (recensioni, test, ecc.) e tempi (considerare come la modifica del codice), promuovere attraverso gli ambienti, distribuire e aggiornare i dati/riavviare l'app in una pianificazione gestita

Se stai osservando i dati transazionali gestiti da un'altra app (integrazione di database condivisi) OPPURE utilizzi l'integrazione a livello di dati come ETL per fornire i dati alla tua applicazione:

  • prova ad avere entità dati scritte da una sola app (di sola lettura da altre)
  • tabella di controllo di staging/ETL del sondaggio per capire cosa/quando sono state apportate modifiche OPPURE
  • utilizzare l'estensione proprietaria a livello di JDBC/ODBC per la notifica o il polling, come indicato nella risposta di Alex Poole OPPURE
  • Il refactoring delle operazioni sui dati sovrapposte da 2 app a un servizio SOA condiviso può evitare il requisito di osservazione o spostarlo da un'operazione sui dati a un messaggio SOA/app di livello superiore
  • utilizza un ESB o un adattatore di database per richiamare la tua applicazione per la notifica o un endpoint WS per il trasferimento di dati in blocco (ad es. Apache Camel, Apache ServiceMix, Mule ESB, Openadaptor)
  • evitare l'uso dell'infrastruttura di estensione del database come pipe o accodamento avanzato

Se utilizzi la messaggistica (invia o ricevi), fallo dalle tue applicazioni. La messaggistica dal DB è un po' un antipattern. Come ultima risorsa, è possibile utilizzare trigger che richiamano servizi Web (http://www.oracle.com/technetwork/developer-tools/jdev/dbcalloutws-howto-084195.html ), ma è necessaria grande attenzione per eseguire questa operazione in modo molto grossolano, invocando un (sotto)processo aziendale quando un insieme di dati cambia, piuttosto che elaborare operazioni di tipo CRUD a grana fine. È meglio attivare un lavoro e fare in modo che il lavoro chiami il servizio Web al di fuori della transazione.