Nell’ambito dei database relazionali uno dei più avanzati( ed anche open source) è PostgreSQL ed in questo articolo ti vogliamo parlare di una funzionalità molto particolare, vale a dire la possibilità di scrivere dati persistenti all’interno del database senza che questi dati appaiano in alcuna tabella!
La funzione pg_logical_emit_message() ed il logical decoding con Debezium
Attraverso la funzione pg_logical_emit_message() puoi scrivere messaggi codificati(sia testuali sia in formato binario) all’interno del Write-Ahead Log(WAL), un vero e proprio database nel database che viene normalmente usato da PostgreSQL per assicurare l’integrità dei dati e per eventualmente effettuarne il restore.
Una volta codificato il dato ed inserito nel database, è possibile, attraverso la capacità di Change Data Capture(CDC) di PostgreSQL, sfruttabile con strumenti come Debezium, recuperare i messagi dal WAL, processarli ed eventualmente fornirli esternamente per altri utilizzi.
Gli Use Case del logical decoding
La possibilità fornita da PostgreSQL ti permette di utilizzare il logical decoding abbinato a strumenti di CDC per:
- Propagare dati tra microservizi(outbox pattern): una comune necessità nei microservizi è quella che quando c’è un ingest di dati in un microservizio, quest’ultimo aggiorni il proprio database ed invii un messaggio ad un altro microservizio. In questo caso, attraverso il logical decoding, non è necessario aggiornare più database ma è sufficiente, quando si aggiorna il database, scrivere un “log” nel WAL che attraverso il CDC viene processato direttamente. Per un approfondimento sul concetto dell’outbox pattern puoi leggere l’articolo “Saga Orchestration for Microservices Using the Outbox Pattern“.
- Analisi nei rollback: il logging può avvenire in tantissime maniera, non ultima quella attraverso un servizio come Cloud Logging, ma così facendo sarebbe complicato analizzare il prima ed il dopo di un rollback del database. Attraverso il WAL, già nato per garantire l’integrità dei dati, si può garantire anche la coerenza e l’analisi successivamente ad un rollback.
- Audit log: i log di audit sono spesso importanti nelle applicazioni di livello enterprise per essere compliant con norme ed anche qui le possibilità implementative sono tante ma il logical decoding abbinato a Debezium diminuisce la complessità di mantenere sistemi di audit log sfruttando una caratteristica nativa di PostgreSQL e quindi anche ottenendo basse latenze e certamente migliori performance.
Glue Labs e PostgreSQL
Esperti di database SQL e NoSQL, ti supportiamo nel bulding e delivery di soluzioni avanzate di archiviazione di dati e di integrazione con sistemi terzi. Grazie all’esperienza maturata in tantissimi settori, con numerosi Clienti e con un solido gruppo aziendale ti forniamo formazione avanzata, assistenza e supporto per qualsiasi progetto di Change Data Capture(CDC) e Data Management. Contattaci subito e senza impegno per maggiori informazioni.