Azione dell'utente una volta al giorno: Ripristino 24 ore a mezzanotte Reset [chiuso]

23

Quando un utente è in grado di eseguire un'azione solo una volta al giorno, ad esempio ottenendo un biglietto gratuito per una competizione, ci sono due possibilità che ho riscontrato nella mia esperienza.

1) Ripristino di 24 ore

Se esegue l'azione il giorno 1 alle 23:45, può eseguire nuovamente l'azione solo il giorno 2 o dopo le 11:45. Non sarà in grado di farlo 11:44 il giorno 2.

2) Reset mezzanotte (o qualsiasi ora fissa)

Indipendentemente dall'ora in cui l'utente esegue l'azione il giorno 1, non appena gira a mezzanotte e inizia il giorno 2, sarà in grado di farlo di nuovo.

Entrambi limitano l'utente nell'eseguire solo un'azione al giorno, ma molto spesso mi imbatto nel metodo 1, che ritengo sia piuttosto scomodo per due motivi:

  • Prima devo aspettare il tempo
  • e secondi su un lungo periodo di tempo, il timestamp di me che eseguirò l'azione diventerà più tardi e più tardi, poiché non sarò in grado di eseguire l'azione esattamente a quel timestamp ogni giorno, solo un paio di secondi o minuti dopo.

C'è qualche motivo tecnico , che uno preferirebbe il metodo 1, sebbene a mio avviso lo svantaggio importante per l'utente dichiarato in precedenza?

Modifica, per specificare: sto parlando in particolare di un esempio, in cui il tempo reale di 24 ore non è ovviamente necessario, come nel attuale evento di spin gratuito di Theory11 , in cui ottieni 1 spin gratuito ogni 24 ore per avere la possibilità di vincere premi.

    
posta RUL 18.12.2018 - 11:19
fonte

8 risposte

21

Sono sorpreso perché di solito mi aspetterei il reset di mezzanotte.

Tuttavia, ha un grosso svantaggio, in quanto vi è più di una mezzanotte ogni 24 ore. Devi scegliere il tuo fuso orario.

Forse è questo il motivo per cui l'universale una volta per 24 ore viene scelto, puoi immaginare che l'azienda potrebbe non voler accettare che gli utenti a metà tra diversi paesi potrebbero avere orari di chiusura locali non di mezzanotte, o piuttosto che potrebbero considerare che dire "al giorno" "implicita mezzanotte e quindi cambiano il marketing in" per 24 ore "e le specifiche del software in modo che corrispondano

Anche se penso che sia abbastanza comune vedere "finisce alle 14:00 GMT" o simili in questi giorni.

Avrei pensato che la sfida di memorizzare una data dell'ultima azione per ogni utente sarebbe stata più difficile di quella di assegnare un fuso orario agli utenti o ai tipi di azione.

Modifica Penso che valga la pena notare le differenze tra i due metodi

Regola 24 ore

  • Avrò un flusso costante di eventi, con una frequenza limitata a meno di 1 per 24 ore.
  • Quando termino la cosa, alcuni utenti riceveranno meno eventi.
  • Ho bisogno di memorizzare ogni ultimo evento degli utenti
  • Quando l'ora legale causa un giorno lungo o breve, non ho 1 evento al giorno
  • Gli umani non saranno in grado di colpire esattamente 24 ore in punto, quindi otterrò in media meno di 1 al giorno in media

1 regola per giorno di calendario

  • Ottengo eventi con bucket su un periodo di 50h (? UTC + 14 a -12?) assegnato a un giorno di calendario
  • realisticamente devo ancora memorizzare tutti gli ultimi eventi dell'utente come "giorni" sul giro
  • Ho una fine precisa di un giorno in cui posso dire che tutti gli eventi dopo ora non sono nel giorno.
  • Devo conoscere la posizione dell'utente per sapere in quale giorno si applica il loro evento a
  • Alcune persone sono svegli molto prima nel "giorno" di altri

1 per giorno di calendario nella regola UTC

  • Divento bella uniforme per 24 ore di durata
  • Posso eseguire il bucket dei miei eventi
  • So quando l'inizio e la fine di un giorno sono
  • I risparmi diurni confonderanno le persone.
  • Gli esseri umani possono avere 1 evento al giorno
  • Gli esseri umani che non vivono vicino a Greenwich avranno orari di inizio e di fine divertenti
  • Forse posso fare un'ottimizzazione intelligente e memorizzare solo un elenco di utenti che sono entrati? (probabilmente finirò per memorizzare tutti gli eventi e gli orari degli utenti)

* Bucketing degli eventi sarà molto utile per vari scopi di reporting. per esempio. Diciamo che ho 10 premi da vincere ogni 24 ore e differiscono nel tempo. Quanti studenti sono entrati il giorno 10? etc

    
risposta data 18.12.2018 - 12:39
fonte
14

Fuori dalla mia testa:

  • Potrebbe essere più semplice implementare la versione "24 ore dall'ultima azione"
  • Se l'utente non esegue l'azione esattamente 24 ore dopo l'ultima volta, alla fine potrebbe perdere un intero periodo di 24 ore perché il ripristino deve avvenire quando sono addormentati o in funzione. Forse lo fanno alle 7 del mattino prima di andare al lavoro, e vanno al lavoro alle 20:00. Il giorno dopo lo fanno alle 7:15, poi alle 7:30, poi alle 7:45, e l'ultimo giorno rimangono fino alle 8:00 per eseguire l'azione poco prima di partire. Il giorno dopo non sono disposti a rimanere fino alle 8:15, quindi basta perdere quella mattina e farlo dopo essere tornati a casa dal lavoro alle 6 del pomeriggio, un intervallo di 34 ore. Se il risultato dell'azione è costoso per l'azienda, il risparmio potrebbe essere più importante dell'inconveniente.
risposta data 18.12.2018 - 11:32
fonte
8

Come hanno già detto altre risposte, il metodo 24 ore è più amichevole con più fusi orari ed è altrettanto semplice da codificare, poiché si memorizza solo l'ultimo timestamp completato per ciascun utente.

Ha anche il "vantaggio" aggiunto di richiedere effettivamente all'utente di interagire con l'app ogni giorno per ottenere tutte le azioni quotidiane. Se c'è un reset a mezzanotte, un utente può fare un'azione alle 23:59 e poi di nuovo alle 12:00. Potrebbero farlo ogni due giorni e ottenere comunque tutte le azioni. Per alcune app lo scopo delle azioni quotidiane è di far interagire l'utente con l'app quotidianamente, quindi è meno ideale.

C'è una terza alternativa che evita le insidie dell'interfaccia utente di entrambi, ma è un po 'più difficile da codificare.

3) Nessuna serie di più di n azioni in (n-0,75) * 24 ore

Richiede due variabili da memorizzare, ma consente a qualcuno che non sta provando ad abusare del sistema di utilizzare la propria azione in qualsiasi momento della giornata senza doversi preoccupare dei fusi orari e dei ripristini.

Impedisce inoltre a chiunque di utilizzare più di 1 azione "extra".

Quindi implementa effettivamente l'algoritmo di cui avresti bisogno per memorizzare l'ora di inizio della serie, l'ultima ora di gioco e il numero di azioni nella tua striscia.

Tenere traccia dell'ultimo tempo di azione consente di rifiutare due azioni troppo ravvicinate. Puoi impostare questo limite anche in meno di 24 ore perché la striscia impedisce il rallentamento all'inizio della giornata.

Una serie continua finché ti impegni ogni giorno. Se intraprendere un'azione significherebbe che avresti più azioni che giorni nella tua serie, allora verrà respinta. Questo impedisce lentamente di avanzare lentamente, facendo le azioni "extra" perché l'ora di inizio della tua striscia non cambia.

qualche pseudo codice per implementare il controllo e tracciare i tempi:

//precondition: streakStart and  lastAction are initialized as in the far past
//              streakCount is initialized as 0
graceHours=18;
checkAllowed(currentTime,&streakStart,&streakCount, &lastAction){
    diffhours=hoursDifferent(lastAction,currentTime);
    if(diffhours< 24 - graceHours){
        return false;
    }
    diffhours=hoursDifferent(streakStart,currentTime);
    if(diffhours <= 24*streakCount - graceHours){
        return false;
    }
    if(diffhours > 24*(streakCount+2)-graceHours){
        streakStart=currentTime;
        streakCount=0;
    }
    streakCount++;
    lastActionTime=currentTime;
    return true;
}

Come bonus aggiuntivo, ottieni un segnalino striscia, se ne vuoi uno.

    
risposta data 18.12.2018 - 22:09
fonte
5

Riguardo al tuo problema con la durata di 24 ore tra le azioni, alcune aziende utilizzano invece una durata di 22 ore, in questo modo gli utenti ottengono un po 'di margine sul momento esatto della giornata in cui è richiesta l'azione e continuano a incoraggiare gli utenti a eseguire l'azione una volta al giorno -no 23:59 - 00:00 scappatoia.

Non una risposta, ma non ho abbastanza punti per commentare.

    
risposta data 18.12.2018 - 21:24
fonte
3
tl/dr: 24 hour resets are the lazy man's way of minimizing load spikes

Oltre alle risposte di cui sopra, il reset a mezzanotte incoraggia l'aumento del traffico.  Se l'azione diventa disponibile per tutti i partecipanti in un determinato momento, allora ci sarà un incentivo per molte persone a tentare l'azione allo stesso tempo. Questo è lo stesso motivo per cui la maggior parte degli stati ha la tua patente di guida scadere il giorno del tuo compleanno invece di una data fissa (USA): il DMV non sarebbe in grado di tenere il passo se tutti hanno la patente scaduta il 1 ° gennaio.

Small Aside : se un sistema informatico deve intervenire una volta al giorno per un gran numero di utenti, puoi fare la stessa domanda, e in genere lo disegno per essere una combinazione di entrambi. Potresti immaginare due compiti cron:

  1. Esegui a mezzanotte, trova tutti i record, agisci
  2. Esegui ogni minuto (o una frequenza regolare), trova tutti i record che non hanno preso provvedimenti dalle 00:00 di ieri, agisci, registra che l'azione è stata intrapresa

In pratica ho trovato il primo essere fragile. Se un'attività cron si interrompe mentre è in esecuzione, alcuni numeri potrebbero non avere l'azione applicata e potrebbe essere necessario un ulteriore lavoro affinché il sistema ricordi dove si trovava e riprende da dove era stato interrotto. Può anche causare problemi se ottieni abbastanza record che l'attività cron non può elaborarli tutti in un ragionevole limite di tempo, e si spegne prima di terminare.

Quest'ultimo si prende cura di entrambi questi problemi. Non ha lo scopo di far elaborare tutto esattamente a distanza di 24 ore, ma finché il tuo compito cron può facilmente eseguire tutte le azioni ogni giorno, saranno molto vicino e garantirai che tutti corri su ogni giorno attuale (cioè non avrai le cose lentamente alla deriva da più di 24 ore). Ancora più importante, però, riprenderà facilmente da dove era stato interrotto se le cose si rompessero per qualche motivo.

link

    
risposta data 18.12.2018 - 21:28
fonte
0

I biglietti giornalieri per autobus / treno al TfL (Transport for London) sono validi dalle 4:30 alle 4:30. Fai l'interruttore quando la gente dorme. Un sacco di persone vorranno utilizzare un servizio dire dalle 8:30 a un'ora dopo la mezzanotte

    
risposta data 18.12.2018 - 17:01
fonte
0

Il reset di mezzanotte ha una condizione specifica che potrebbe essere desiderabile o dannosa, a seconda del problema che stai cercando di risolvere e cioè: posso eseguire l'azione un giorno alle 11:59:58 e di nuovo alle 00:00 : 01. Se lo spazio del problema è un qualsiasi tipo di competizione, questo potrebbe conferire un vantaggio ingiusto alle persone che scelgono di eseguire le proprie azioni vicino a mezzanotte. La regola di ripristino di 24 ore è l'unico modo per garantire una distribuzione equa delle azioni disponibili indipendentemente dall'ora del giorno in cui qualcuno è disponibile per loro.

La conseguenza del ripristino di 24 ore che diventa più tardi e più tardi può essere mitigata prevedendo una tolleranza, ad esempio accettando una richiesta di azione entro 15 minuti dal ripristino, a condizione che l'azione non sia effettivamente registrata (o non avere effetto) fino a quando non si verifica il reset. Ciò introduce un po 'più di complessità nella soluzione, ma non riesco a pensare ad alcuna strategia di mitigazione per poter prendere due azioni giornaliere separate da secondi come nel caso di reset di mezzanotte.

    
risposta data 18.12.2018 - 21:27
fonte
0

Non ho visto nessuno menzionare il fatto che la regola delle 24 ore incoraggia le visite regolari di routine. Molti giochi hanno un accesso / ricompensa di vittoria una volta al giorno che si ripristina dopo 24 ore perché preferiscono effettuare il check-in per un breve periodo ogni 24 ore anziché per il doppio della durata ogni 48 ore. Immagino che sia simile per i siti web che ospitano omaggi di biglietti.

    
risposta data 19.12.2018 - 00:35
fonte

Leggi altre domande sui tag