Implementazione della quota di utilizzo dello spazio di archiviazione per utente nei prodotti SaaS

1

In una soluzione SaaS, che consente agli utenti di mantenere i propri dati sul server, se devo implementare vari schemi di prezzo, in cui ogni schema offre quote di storage diverse, ad esempio, l'abbonamento Basic ti porta 2 GB storage, mentre Premium ti offre una capacità di archiviazione di 10 GB - che tipo di architettura è necessario utilizzare?

  1. Devo mantenere contro il profilo utente la quota utilizzata?
  2. Funzionerà solo se i dati vengono mantenuti nel file system? Cosa succede se i dati vengono archiviati nel database relazionale o NoSQL - come si tiene traccia dell'utilizzo di archiviazione a livello utente in questi casi?
posta Wand Maker 02.12.2015 - 16:14
fonte

2 risposte

1
  1. Aggiungi un campo size a ogni elemento archiviato. Questo campo potrebbe essere approssimativo, ma dovrebbe essere aggiornato per riflettere la nuova dimensione ogni volta che l'elemento viene modificato.

  2. Aggiungi un campo space_used sull'utente. Ogni volta che qualcosa con size viene aggiunto o modificato, esegui una query per tutti gli elementi di cui l'utente è proprietario, somma i campi size e aggiorna il campo space_used sull'utente. Se non si utilizza un database relazionale, è possibile provare piccoli trucchi di efficienza, ad esempio aggiungendo o sottraendo la modifica della dimensione dell'elemento appena modificato, ma ciò non riuscirà se è possibile che un utente possa modificare 2 elementi contemporaneamente .

  3. Sia sull'utente, sia sulla società (a seconda di chi paga per le licenze) è necessario memorizzare space_quota da confrontare con.

Il risultato:

Dovrai controllare User.space_used < space_quota prima di consentire all'utente di aggiungere elementi o aumentare le dimensioni di tutti gli articoli, quindi space_used deve essere precalcolato per mantenere la query veloce. Hai bisogno di Item.size per rispondere successivamente alla domanda, "Come abbiamo calcolato User.space_used perché sembra sbagliato?"

Utilizzando un sistema di questo tipo, dovrebbe essere facile dare l'avvertimento all'utente quando raggiunge l'80% o il 95% della sua quota.

    
risposta data 02.12.2015 - 17:29
fonte
1

L'approccio accademico sarebbe quello di avere un livello discreto, il più breve possibile, ma completo tra l'applicazione e il mezzo di persistenza (che si tratti di file system, database o una combinazione di questi) che conta le dimensioni di tutto ciò che viene aggiunto, modificato o rimosso dalla persistenza e continua ad aggiornare il totale nel profilo.

Tuttavia, ad un certo punto nel tempo ti imbatterai inevitabilmente nel problema di dover ricalcolare tutto, quindi dato che molto probabilmente dovrai scrivere il codice ricalcolato-tutto, potresti desiderare (almeno all'inizio) di riutilizzarlo quel codice e salta la soluzione accademica. Quindi, ogni volta che viene effettuato un inserimento, aggiornamento o rimozione, si imposta un flag "dirty" nel profilo, e quindi si ha un processo batch separato che cerca i profili "sporchi" e ricalcola la quantità di spazio occupato, interrogando il filesystem, database, ecc.

Ovviamente, questo significa che le modifiche alle quote non saranno visibili immediatamente e, soprattutto, una volta che avrai abbastanza clienti questo approccio sarà troppo costoso per essere fattibile, ma una volta che avrai abbastanza clienti, presumibilmente sarai abbastanza ricco per essere in grado di permettersi una riscrittura completa.

Oppure, vai con la soluzione accademica.

    
risposta data 02.12.2015 - 16:47
fonte

Leggi altre domande sui tag