Il problema in questione riguarda gli avatar degli utenti che provengono dai loro account sui social media. Quando un utente si iscrive alla nostra app, l'utente utilizzerà il suo account social media e semplicemente salviamo l'URL nell'avatar dell'utente nel nostro database.
Ora stiamo riscontrando un problema perché in un database NoSQL stiamo creando molte copie degli stessi dati, come l'URL dell'avatar dell'utente. C'è un'unica fonte di verità sulle informazioni dell'utente che è il suo record utente nel nostro database. Quindi è abbastanza facile aggiornarlo e rilevare una modifica nell'URL dell'avatar.
La domanda è: qual è il modo migliore per gestire questo cambiamento in tutti gli altri luoghi, ad es. commenti pubblicati dall'utente, ecc. Questo non sarebbe un problema in uno scenario di database relazionale, ma stiamo usando alcuni database NoSQL e gli URL degli avatar degli utenti sono salvati in più posti.
Posso pensare a quattro modi per gestirlo e volevo vedere come altri hanno gestito questo sceglione:
-
Salviamo l'URL dell'avatar dell'utente in tutte le entità correlate come i commenti, ecc. Quando l'URL avatar cambia, usa semplicemente un processo di back-end per aggiornare l'URL in tutti gli oggetti correlati. Penso che questo approccio darebbe le migliori prestazioni perché usiamo qualunque URL venga fornito con i dati. Non è necessario alcun tipo di elaborazione in tempo reale. Tuttavia, questo approccio può essere molto costoso in termini di manutenzione, ad es. aggiornare centinaia o persino migliaia di entità come gli avatar cambiano.
-
Un altro modo per gestire ciò è non salvare l'URL dell'avatar utente in nessuna delle entità correlate all'utente diverso dal suo record principale. Quindi prendiamo l'URL dell'avatar dell'utente alla prima richiesta e lo memorizziamo nella cache, diciamo nella cache Redis. Man mano che elaboriamo le richieste nell'applicazione, estraggono semplicemente gli URL degli avatar dalla cache e li colleghiamo alle entità appropriate al volo. Vedo due problemi principali con questo approccio. Innanzitutto, creerà un piccolo ritardo nella gestione delle richieste degli utenti. Ad esempio, se un utente richiede un video con centinaia di commenti sotto di esso, dovrei estrarre gli avatar per tutti gli utenti dalla mia cache e alcuni potrebbero non essere nemmeno memorizzati nella cache quindi dovrei fare una chiamata al database per ottenere i loro avatar e conservarli in cache per un uso futuro. Il secondo problema che vedo con questo è l'uso intensivo della cache, che non sono affatto contro, ma in questo scenario, mi sembra di utilizzare la risorsa più costosa per gestire un requisito così banale.
-
Un terzo modo è quello di ottenere l'avatar di un utente, ad esempio dal suo accesso social e memorizzare il file localmente. Da quel momento in poi, abbiamo il pieno controllo su quel file e il suo URL non cambierà mai a meno che non lo cambiamo. Tre problemi con questo approccio: il primo problema è che non penso che ci sia un modo per scaricare le immagini dei profili dei social media in quanto non forniscono un collegamento a un file. Il secondo problema è la legalità. Non sono sicuro se avremmo il diritto di scaricare e archiviare un file che appartiene a LinkedIn, Facebook, Google, ecc. Il terzo problema è che quando l'utente cambia il suo avatar nell'account dei social media, l'avatar dell'utente nella nostra app non si aggiornerà automaticamente. Lui / lei avrebbe dovuto gestirlo manualmente. Nemmeno la fine del mondo, ma neanche l'esperienza utente.
-
Utilizza il servizio gravatar. Conosco solo alcune informazioni di base su questo servizio, quindi non posso dire molto a riguardo. La mia preoccupazione principale è che stiamo utilizzando un'altra risorsa di terze parti su una risorsa di terze parti che complicherà ulteriormente le cose. Inoltre, non sei proprio sicuro di come funzioni gravatar ma cosa succede se l'utente non ha un account gravatar?
Mi piacerebbe vedere come altri hanno gestito questo scenario. Grazie.
P.S. Basandomi su alcuni post che ho letto qua e là, avevo l'impressione che gli URL degli avatar non cambiassero perché i provider di social media avrebbero generato un URL per l'avatar dell'utente che non era il nome del file. Quindi, anche se l'utente cambia il proprio avatar sul proprio account di social media, l'URL non cambierà. Ora so che questo presupposto non è corretto e l'URL di avatar proveniente dai social media cambia. Mi è successo con LinkedIn. Un URL completamente diverso è ora il mio URL di avatar. La cosa divertente è che non ho nemmeno aggiornato la mia immagine del profilo con loro. In qualche modo, LinkedIn ha deciso di restituire un URL diverso alla mia immagine del profilo.