Estrarre efficientemente l'API remota in Python

1

Devo sostituire la classe "table" di SQLAlchemy (dichiarativa) con un wrapper per lo più funzionalmente equivalente, che utilizzerà l'API di un altro microservizio. Tutti gli usi possono essere modificati, quindi non è necessario eseguire il mimetismo completo delle funzionalità di SQLAlchemy, ma con il reimplementing sto perdendo alcune cose utili come il caching intelligente, il pooling delle connessioni (modo asincrono), il supporto delle transazioni.

La classe "table" non è solo la dichiarazione dei campi della tabella, ma contiene anche alcuni metodi helper di livello superiore, un metodo di business logic uniforme.

Supponendo che il supporto delle transazioni non sia un problema nel caso, quale sarebbe il buon approccio (i) per gestire il caching?

Il mio approccio sarebbe ignorare completamente la memorizzazione nella cache, ma ho bisogno di essere preparato per ottimizzare.

La soluzione può ancora utilizzare il database relazionale disponibile, se aiuta, comprendendo che l'autorevole fonte di dati per l'entità in questione è altrove. Introducing memcached o it's ilk è il secondo migliore.

Ci si aspetta che una chiamata API remota abbia un po 'più di latenza della chiamata RDBMS locale, ma fortunatamente non ci si aspetta che le operazioni siano massicce, non ci saranno "join" poiché la tabella in questione ha solo un posto riferito da chiave esterna (e che sarà facilmente risolto)

    
posta Roman Susi 08.07.2016 - 08:12
fonte

1 risposta

1

In primo luogo, penso che sarebbe utile trovare un modo per misurare l'importanza del caching.

Una volta stabilito che è assolutamente necessario il caching, suppongo che un database relazionale sarebbe meglio che usare qualcosa come memcached, dato che si può avere una cache molto considerevole senza usare troppa memoria. Potresti considerare Redis con il suo supporto per la persistenza abilitato pure.

Assicurati di trattare l'invalidazione della cache con attenzione, poiché probabilmente non vuoi restituire informazioni obsolete dalla cache.

In via opzionale, tuttavia, potresti dividere un po 'il tuo codice, separando la logica di business dal modello di database. Forse potresti avere la classe del tuo modello di dominio e una classe helper che la preleva da una posizione persistente, come l'API remota (con o senza la memorizzazione nella cache abilitata) o dall'attuale soluzione basata su SQLAlchemy. In questo modo, in futuro, potresti aggiungere / sostituire un altro meccanismo di persistenza senza troppi problemi o dover rispettare un'interfaccia di terze parti, come SQLAlchemy.

    
risposta data 05.08.2016 - 05:20
fonte

Leggi altre domande sui tag