Domanda

Sto costruendo un sito web. Ha gruppi che gli utenti possono aderire.

La differenza tra questo e i gruppi "normali" è che l'appartenenza è temporaneo - Quando un utente si unisce a un gruppo, decide la lunghezza dell'adesione: 5 giorni, a Settimana, 2 settimane, ecc (le scelte sono predefinite). O potenzialmente tutti Le iscrizioni potrebbero essere impostate per essere della stessa lunghezza - diciamo una settimana - se Ciò rende più semplice.

Mi piacerebbe avere un tally da corsa del numero di membri di ciascuno gruppo. Il numero non ha bisogno di essere accurato fino all'ultimo secondo. Ma non può essere anche o non è stato aggiornato, dovrebbe essere aggiornato una volta un giorno.

Il modo "ovvio" per calcolare il numero di membri sembra essere Gestire un lavoro di cron, ad esempio ogni giorno, e attraversa ogni membro di ogni gruppo uno per uno. Se un abbonamento è scaduto, rimuovere quel membro dal gruppo e decrementare il conteggio dei membri del Gruppo di 1.

L'approccio sembra molto inefficiente e non molto scalabile. Con un Grande numero di gruppi, potrebbe richiedere per sempre.

Puoi pensare a un modo migliore per farlo? Il conteggio delle iscrizioni fa non è necessario essere accurati all'ultimo secondo. Può essere approssimativo e (leggermente) fuori data. Anche se fa la differenza tutto Le iscrizioni possono essere impostate per essere della stessa lunghezza, dicono una settimana.

È stato utile?

Soluzione

Memorizza un elenco di quante persone sono attualmente in ciascun gruppo.Memorizzare anche un elenco di giorni.Ogni giorno conterrà un elenco di gruppi e quante persone sottrarre da quel gruppo in quel giorno.

Quando una persona si unisce a un gruppo, aggiungi 1 al totale del gruppo, e aggiungi 1 al popolo-sottract per quel gruppo il giorno in cui la sua iscrizione scadrà.

Se la data di scadenza di una persona cambia, rimuovi 1 dal popolo-sottract dalla vecchia data di scadenza (per quel gruppo) e aggiungere 1 alla nuova data di scadenza.

Infine, ovviamente, una volta al giorno sottrarre l'importo corretto da ciascun gruppo per quel giorno.

Altri suggerimenti

Se tutte le iscrizioni sono la stessa lunghezza, mantenere semplicemente una FIFO di iscrizioni a causa della scadenza.Ogni volta che ottieni un nuovo membro, aggiungi una voce "scade" alla fine dell'elenco, con la data impostata 1 settimana dopo.

Ora, tutte le volte che vuoi, controlla la parte anteriore dell'elenco per scadere le iscrizioni e aggiornare il conteggio del gruppo.Stop quando arrivi alla prima voce che non è ancora scaduta.

Ciò potrebbe anche funzionare per abbonamenti a lunghezza variabile, ma dovrai mantenere un elenco ordinato.

Quando un membro si unisce, sai quando la loro iscrizione scadrà.Quindi, invece di cercare un elenco di membri per disattivare quotidianamente (o tuttavia spesso), è possibile aggiungere ciascun membro all'elenco appropriato delle iscrizioni che scadono nello stesso giorno.Quindi, ogni giorno vai attraverso ed elimina le iscrizioni scadute per quel giorno.È praticamente quello che hai detto, tranne che invece di cercare, memorizzi i risultati.

La dimensione del tuo archiviazione è proporzionale alla lunghezza del tuo adesione più lungo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top