Sto elaborando un flusso di record in arrivo, per chiarezza presumo che siano numerati in sequenza 1,2,3 .... ecc.
La maggior parte delle volte i record arrivano abbastanza lentamente da consentirmi di elaborare ogni singolo record. Durante i periodi di punta, arrivano troppo velocemente per essere elaborati, quindi devo eliminare / ignorarne una parte.
Ho usato un semplice bit di codice (pseudo) come questo .....
if ( n mod x == 0 )
{
process = true;
}
(dove 'n' è il numero del record). Questo è piuttosto semplice, se 'x' è 2 e il record è pari numerato viene elaborato, se è dispari numerato viene ignorato. Il 50% dei record viene elaborato e il 50% ignorato. Se sostituisco 'x' con 10, verrà elaborato un record in 10 (cioè il 10%) e il 90% verrà ignorato. Sostituendo 'x' con 20 selezioni il 5% dei record.
Funziona bene, ma consente solo la selezione di un numero limitato di percentuali ..
x=2 -> 50%
x=3 -> 33%
x=4 -> 25%
x=5 -> 20%
Come posso riscrivere il mio codice per selezionare una determinata percentuale di record in entrata, ad esempio l'85%?
sebbene lo stia facendo con uno script PowerShell, sto cercando una soluzione neutra per la lingua.
AGGIORNAMENTO - A causa della natura dei dati, preferirei non lasciare cadere i record casualmente perché ciò potrebbe (in teoria) eliminare una lunga sequenza di record consecutivi. Preferirei abbandonare / elaborare a una frequenza regolare, cioè elaborare 3 record, rilasciare 1 e ripetere. Lasciare cadere (diciamo) 20 record di seguito potrebbe farmi perdere qualcosa di importante.